SlideShare a Scribd company logo
1 of 22
Download to read offline
EC-Cube を Heroku でも
Heroku Meetup #22
Takahiro Yonei (@yonet77)
Herokuに「何か」を載っけるシリーズ 〜EC-Cube編〜
※続くかどうかは未定
 米井 孝浩(よねい たかひろ)
 TAOドライブ株式会社 エンジニア
 Salesforce向けの受託開発をメインにしてます
 最近はHerokuにも力を入れ始めてます
 Salesforce DG (Tokyo) の運営メンバの1人
 (いちおう)Salesforce MVP (Spring’ 15)
 PHP歴 ほぼゼロ
 Heroku に本腰入れたのは今年から
※そんな初心者が(無謀?)にもEC-Cube案件に挑んだ時の記録です...
1. EC-CubeをHerokuで試してみる
 EC-Cubeのインストール
 EC-Cube on Heroku の動作確認
 Heroku Pipeline に載せる etc
2. Heroku上で稼働させるポイント(分かってきたこと)
3. 今後の展望
 ECサイトを何かサクッと作れないか?
 とあるエンドユーザからの要求...
 Salesforceは稼働中
 ただ、Commerce Cloudはちょっと...
 ならばHerokuで構築するしかない!
 専任のインフラ担当はいないので、AWSで稼働させるのはツラい
 ECサイト用のパッケージとしては...EC-Cubeが良いのでは?
-> EC-CubeをHerokuに載っけてみよう
コトの発端...
 EC-Cubeとは?
 オープンソースのEC向けコンテンツ管理システム
• PHP + PostgreSQL で構築されており、v2.13系とv3.0.x系があるが、
初めから使うならv3.0.x系が良さそう
 有償ライセンスと無償ライセンス(GPLライセンス)のデュアルライセンス方式
 様々なプラグインが用意されており、プラグインを組み合わせることで拡張可能
 開発コミュニティの規模も大きく、非常に活発
https://www.ec-cube.net/ https://github.com/EC-CUBE/ec-cube
 EC-Cube を Heroku にインストール
 Heroku DeployボタンよりHerokuにデプロイする
 半年ほど前の場合だと、postgreのバージョン指定がなくインストールに失敗する
※ 最新の app.json だと、v9.6 が指定されており、インストールは成功する
 EC-Cube on Heroku の動作確認
 画像ファイルはHeroku内に格納できないので、別のストレージサービスを使う
Herokuのaddonとして利用できるストレージサービス
• Bucketeer https://elements.heroku.com/addons/bucketeer
• Cloudinary https://elements.heroku.com/addons/cloudinary
Cloudinary用のプラグインと、Heroku
addonの組合せが良さそう
(試せてないですが)
画像ファイルをCloudinaryに保存するプラグインもある
https://www.ec-cube.net/products/detail.php?product_id=1058
 EC-Cube on Heroku の動作確認
 Dynoの数を増やしてみたら、正常にログインできなくなった
ログインしたはずなのに、ログイン画面にリダイレクトされてしまう!
セッション情報をローカルに保存する方式になっていた模様?
-> Dynoが増えるとセッションの引き継ぎに失敗する
-> セッション用のデータストアが必要
セッションを Heroku Redis で管理するよう変更
(設定ファイルのイメージ)
 EC-Cube を Heroku Pipeline に載せる
 Pull Requestを作って、review appを作成する
-> 新規に app を作るのは特段問題なし
 stagingへのデプロイで色々と問題が発生した
1. デプロイ時に流すスクリプトはどうするの?
2. 環境ごとにDBとか切り分けたいがどうするの?
3. 2回目以降のデプロイ後、管理画面にログインできない!
4. プラグインのインストールでエラー発生...
 EC-Cube を Heroku Pipeline に載せる
1. デプロイ時に流すスクリプトについて
PHPアプリをHerokuにデプロイする場合、Composer.json内の “scripts” -> “compile” にて指定したコマンドが実行
される
ここに、EC-Cubeインストールコマンドを指定する
-> https://devcenter.heroku.com/articles/php-support#custom-compile-step
アプリを新規作成する場合(review appを作成するなど)には、以下の処理
既にインストールされているアプリに差分をデプロイする場合(stagingへのデプロイ)には、
以下の処理
環境ごとに、デプロイ時の処理を切り替える
 EC-Cube を Heroku Pipeline に載せる
1. デプロイ時に流すスクリプトについて
環境ごとに切り替えるインストールスクリプトを用意する
(スクリプトのイメージ)
 EC-Cube を Heroku Pipeline に載せる
1. デプロイ時に流すスクリプトについて
作成したスクリプトを、composer.json から呼び出す
インストール用のスクリプトを、
composer.json で指定する
 EC-Cube を Heroku Pipeline に載せる
2. 環境ごとにDBとかを切り分けたい
こんな感じに環境に応じて設定ファイルを分け
られるようにしたい
2. 環境ごとにDBとかを切り分けたい
src/Eccube/Application.php に手を加える
-> 環境変数によって読み込むconfigを切り替える
ただ、src/Eccube/Application.php に手を加えるのが良い方法かどうか??
(詳しい人からのアドバイスを募集...)
※本体の方でも修正があった模様? https://github.com/EC-CUBE/ec-cube/pull/2550
 EC-Cube を Heroku Pipeline に載せる
3. 2回目以降のデプロイ後、管理画面にログインできない(stagingアプリ)
Herokuの環境変数として AUTH_MAGIC をもたせて、常に同じ値とする
① /eccube_install.php を実行
② 変数 AUTH_MAGIC を新規生成
③ ②の AUTH_MAGIC 値を使って、saltキーを生成
⑤ 設定ファイルに AUTH_MAGIC を保存
④ saltキーとともにadminユーザを登録
初回デプロイ
2回目以降デプロイ
� ユーザ登録時のAUTH_MAGICの値と異
なる値を設定ファイルに保存
-> ログインできない!
(stagingアプリのデプロイ処理 一部抜粋)
 EC-Cube を Heroku Pipeline に載せる
4. プラグインのインストールでエラー発生(stagingアプリ)
 EC-Cube を Heroku Pipeline に載せる
(まず)プラグインのインストール方法について
1. プラグインのインストールはスクリプト化しておく
2. デプロイ時にアプリによって処理を切り分ける
 review app(appを新規作成) -> app.json の scripts にスクリプトを指定する
 staging(差分更新) -> デプロイ後に手動で実行($ heroku run bash xxx)
4. プラグインのインストールでエラー発生(stagingアプリ)
インストール処理で、使用するテーブルの存在をチェックしてないプラグインもある
(テーブルの存在チェックは、プラグイン作成時の必須要件ではない)
プラグインを都度修正(存在チェックを追加していく)
 EC-Cube を Heroku Pipeline に載せる
本体 プラグイン composer.json app.json
インストール - - - • addon指定
• postgres
• redis
• cloudinary(ベター?)
Pipelineへの搭
載
環境ごとに
設定ファイルを
切り分ける
インストール時に
重複エラーを回避する
環境ごとに
デプロイ時の処理を
切り分ける
• 環境変数
• AUTH_MAGIC を指定する
(これまでの修正箇所)
 物理ファイルは格納できないので、ストレージサービスは必須
 セッション管理には、redisなど別のデータストアサービスを利用する
 アプリの設定ファイルは、環境ごとに切り分けできるようにする
 本体の方でも検討されている模様なので要確認
 デプロイ時の処理(インストールなど)の内容を把握して、
review app作成時と、stagingデプロイ時の両方にも対応できるようにする
(これまでで分かってきたこと...)
 EC-Cube を Heroku で稼働させる上でのノウハウを
もっと溜め込みたい
 他のソフトウェアもHerokuで稼働させることを試してみたい
-> Heroku で「何か」を稼働させる上でのポイントを溜め込みたい
EC-CubeをHerokuでも

More Related Content

Similar to EC-CubeをHerokuでも

SFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptx
SFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptxSFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptx
SFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptxToru Inoue
 
Herokuトレーニング
HerokuトレーニングHerokuトレーニング
HerokuトレーニングYosuke Murata
 
Salesforce DUG meetup09 summer15
Salesforce DUG meetup09 summer15Salesforce DUG meetup09 summer15
Salesforce DUG meetup09 summer15Ikou Sanuki
 
Salesforce developer conference tokyo2013
Salesforce developer conference tokyo2013Salesforce developer conference tokyo2013
Salesforce developer conference tokyo2013Ikou Sanuki
 
Salesforceのほんとにあった怖い話(こわれた組織)
Salesforceのほんとにあった怖い話(こわれた組織)Salesforceのほんとにあった怖い話(こわれた組織)
Salesforceのほんとにあった怖い話(こわれた組織)Toru Inoue
 
「標準機能ファースト」でSalesforceを使い倒せ!
「標準機能ファースト」でSalesforceを使い倒せ!「標準機能ファースト」でSalesforceを使い倒せ!
「標準機能ファースト」でSalesforceを使い倒せ!Yoshimasa Yaguma
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能Yoshifumi Kawai
 
Trelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatuTrelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatuYoh Nakamura
 
Lightning Component × Lightning Design System
Lightning Component × Lightning Design SystemLightning Component × Lightning Design System
Lightning Component × Lightning Design SystemTaiki Yoshikawa
 
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発TipsAdminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発TipsTakashi Hatamoto
 
Kyoto sfdg meetup3_for_sharing
Kyoto sfdg meetup3_for_sharingKyoto sfdg meetup3_for_sharing
Kyoto sfdg meetup3_for_sharing友嗣 小野
 
150704 イノベーションエッグ第4回 umekita_force活動報告
150704 イノベーションエッグ第4回 umekita_force活動報告150704 イノベーションエッグ第4回 umekita_force活動報告
150704 イノベーションエッグ第4回 umekita_force活動報告Naoya Shiraishi
 
WebRTCでリアル店舗を作ってみる
WebRTCでリアル店舗を作ってみるWebRTCでリアル店舗を作ってみる
WebRTCでリアル店舗を作ってみるJunichi Okamura
 
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2ttakapi0327
 
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことPHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことksimoji
 
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話Takashi Hatamoto
 
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)Takashi Hatamoto
 

Similar to EC-CubeをHerokuでも (20)

SFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptx
SFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptxSFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptx
SFDG_画面フローとLightningWebComponentのハイブリッド開発について.pptx
 
Herokuトレーニング
HerokuトレーニングHerokuトレーニング
Herokuトレーニング
 
Salesforce DUG meetup09 summer15
Salesforce DUG meetup09 summer15Salesforce DUG meetup09 summer15
Salesforce DUG meetup09 summer15
 
Salesforce developer conference tokyo2013
Salesforce developer conference tokyo2013Salesforce developer conference tokyo2013
Salesforce developer conference tokyo2013
 
Salesforceのほんとにあった怖い話(こわれた組織)
Salesforceのほんとにあった怖い話(こわれた組織)Salesforceのほんとにあった怖い話(こわれた組織)
Salesforceのほんとにあった怖い話(こわれた組織)
 
「標準機能ファースト」でSalesforceを使い倒せ!
「標準機能ファースト」でSalesforceを使い倒せ!「標準機能ファースト」でSalesforceを使い倒せ!
「標準機能ファースト」でSalesforceを使い倒せ!
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
Inside Quizar
Inside QuizarInside Quizar
Inside Quizar
 
Apex Test Plusの紹介
Apex Test Plusの紹介Apex Test Plusの紹介
Apex Test Plusの紹介
 
Trelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatuTrelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatu
 
Lightning Component × Lightning Design System
Lightning Component × Lightning Design SystemLightning Component × Lightning Design System
Lightning Component × Lightning Design System
 
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発TipsAdminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発Tips
 
Kyoto sfdg meetup3_for_sharing
Kyoto sfdg meetup3_for_sharingKyoto sfdg meetup3_for_sharing
Kyoto sfdg meetup3_for_sharing
 
150704 イノベーションエッグ第4回 umekita_force活動報告
150704 イノベーションエッグ第4回 umekita_force活動報告150704 イノベーションエッグ第4回 umekita_force活動報告
150704 イノベーションエッグ第4回 umekita_force活動報告
 
WebRTCでリアル店舗を作ってみる
WebRTCでリアル店舗を作ってみるWebRTCでリアル店舗を作ってみる
WebRTCでリアル店舗を作ってみる
 
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2
 
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことPHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
 
Lt 110416
Lt 110416Lt 110416
Lt 110416
 
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
 
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
 

More from Takahiro Yonei

SalesforceとHerokuのより良い関係を目指して(たぶん序章)
SalesforceとHerokuのより良い関係を目指して(たぶん序章)SalesforceとHerokuのより良い関係を目指して(たぶん序章)
SalesforceとHerokuのより良い関係を目指して(たぶん序章)Takahiro Yonei
 
ApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してTakahiro Yonei
 
Tokyo SFDG Meetup#16 / Release Note, Einstein Platform Service
Tokyo SFDG Meetup#16 / Release Note, Einstein Platform ServiceTokyo SFDG Meetup#16 / Release Note, Einstein Platform Service
Tokyo SFDG Meetup#16 / Release Note, Einstein Platform ServiceTakahiro Yonei
 
Meetup #15 : リリースノート輪読 / Apexまわり
Meetup #15 : リリースノート輪読 / ApexまわりMeetup #15 : リリースノート輪読 / Apexまわり
Meetup #15 : リリースノート輪読 / ApexまわりTakahiro Yonei
 
カスタムメタデータを受託の案件で使ってみた話
カスタムメタデータを受託の案件で使ってみた話カスタムメタデータを受託の案件で使ってみた話
カスタムメタデータを受託の案件で使ってみた話Takahiro Yonei
 
Visualforceをあきらめない
VisualforceをあきらめないVisualforceをあきらめない
VisualforceをあきらめないTakahiro Yonei
 
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Takahiro Yonei
 
Salesforce dug tokyo_meetup#8_about_releasenote
Salesforce dug tokyo_meetup#8_about_releasenoteSalesforce dug tokyo_meetup#8_about_releasenote
Salesforce dug tokyo_meetup#8_about_releasenoteTakahiro Yonei
 
SDUG Tokyo Meetup#7 About ReleaseNote
SDUG Tokyo Meetup#7 About ReleaseNoteSDUG Tokyo Meetup#7 About ReleaseNote
SDUG Tokyo Meetup#7 About ReleaseNoteTakahiro Yonei
 
DCMax CrowdHackathonチャレンジ②
DCMax CrowdHackathonチャレンジ②DCMax CrowdHackathonチャレンジ②
DCMax CrowdHackathonチャレンジ②Takahiro Yonei
 
Salesforce DUG Tokyo meetup#5
Salesforce DUG Tokyo meetup#5Salesforce DUG Tokyo meetup#5
Salesforce DUG Tokyo meetup#5Takahiro Yonei
 
Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2Takahiro Yonei
 
Force.com Developer Group Japan Meetup#1
Force.com Developer Group Japan Meetup#1Force.com Developer Group Japan Meetup#1
Force.com Developer Group Japan Meetup#1Takahiro Yonei
 

More from Takahiro Yonei (14)

SalesforceとHerokuのより良い関係を目指して(たぶん序章)
SalesforceとHerokuのより良い関係を目指して(たぶん序章)SalesforceとHerokuのより良い関係を目指して(たぶん序章)
SalesforceとHerokuのより良い関係を目指して(たぶん序章)
 
ApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指して
 
Tokyo SFDG Meetup#16 / Release Note, Einstein Platform Service
Tokyo SFDG Meetup#16 / Release Note, Einstein Platform ServiceTokyo SFDG Meetup#16 / Release Note, Einstein Platform Service
Tokyo SFDG Meetup#16 / Release Note, Einstein Platform Service
 
Meetup #15 : リリースノート輪読 / Apexまわり
Meetup #15 : リリースノート輪読 / ApexまわりMeetup #15 : リリースノート輪読 / Apexまわり
Meetup #15 : リリースノート輪読 / Apexまわり
 
カスタムメタデータを受託の案件で使ってみた話
カスタムメタデータを受託の案件で使ってみた話カスタムメタデータを受託の案件で使ってみた話
カスタムメタデータを受託の案件で使ってみた話
 
Visualforceをあきらめない
VisualforceをあきらめないVisualforceをあきらめない
Visualforceをあきらめない
 
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
 
Salesforce dug tokyo_meetup#8_about_releasenote
Salesforce dug tokyo_meetup#8_about_releasenoteSalesforce dug tokyo_meetup#8_about_releasenote
Salesforce dug tokyo_meetup#8_about_releasenote
 
SDUG Tokyo Meetup#7 About ReleaseNote
SDUG Tokyo Meetup#7 About ReleaseNoteSDUG Tokyo Meetup#7 About ReleaseNote
SDUG Tokyo Meetup#7 About ReleaseNote
 
DCMax CrowdHackathonチャレンジ②
DCMax CrowdHackathonチャレンジ②DCMax CrowdHackathonチャレンジ②
DCMax CrowdHackathonチャレンジ②
 
Salesforce DUG Tokyo meetup#5
Salesforce DUG Tokyo meetup#5Salesforce DUG Tokyo meetup#5
Salesforce DUG Tokyo meetup#5
 
Cloudforce2012 LT
Cloudforce2012 LTCloudforce2012 LT
Cloudforce2012 LT
 
Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2Force.com Developer Group Japan Meetup#2
Force.com Developer Group Japan Meetup#2
 
Force.com Developer Group Japan Meetup#1
Force.com Developer Group Japan Meetup#1Force.com Developer Group Japan Meetup#1
Force.com Developer Group Japan Meetup#1
 

Recently uploaded

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (7)

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

EC-CubeをHerokuでも

  • 1. EC-Cube を Heroku でも Heroku Meetup #22 Takahiro Yonei (@yonet77) Herokuに「何か」を載っけるシリーズ 〜EC-Cube編〜 ※続くかどうかは未定
  • 2.  米井 孝浩(よねい たかひろ)  TAOドライブ株式会社 エンジニア  Salesforce向けの受託開発をメインにしてます  最近はHerokuにも力を入れ始めてます  Salesforce DG (Tokyo) の運営メンバの1人  (いちおう)Salesforce MVP (Spring’ 15)
  • 3.  PHP歴 ほぼゼロ  Heroku に本腰入れたのは今年から ※そんな初心者が(無謀?)にもEC-Cube案件に挑んだ時の記録です...
  • 4. 1. EC-CubeをHerokuで試してみる  EC-Cubeのインストール  EC-Cube on Heroku の動作確認  Heroku Pipeline に載せる etc 2. Heroku上で稼働させるポイント(分かってきたこと) 3. 今後の展望
  • 5.  ECサイトを何かサクッと作れないか?  とあるエンドユーザからの要求...  Salesforceは稼働中  ただ、Commerce Cloudはちょっと...  ならばHerokuで構築するしかない!  専任のインフラ担当はいないので、AWSで稼働させるのはツラい  ECサイト用のパッケージとしては...EC-Cubeが良いのでは? -> EC-CubeをHerokuに載っけてみよう コトの発端...
  • 6.  EC-Cubeとは?  オープンソースのEC向けコンテンツ管理システム • PHP + PostgreSQL で構築されており、v2.13系とv3.0.x系があるが、 初めから使うならv3.0.x系が良さそう  有償ライセンスと無償ライセンス(GPLライセンス)のデュアルライセンス方式  様々なプラグインが用意されており、プラグインを組み合わせることで拡張可能  開発コミュニティの規模も大きく、非常に活発 https://www.ec-cube.net/ https://github.com/EC-CUBE/ec-cube
  • 7.  EC-Cube を Heroku にインストール  Heroku DeployボタンよりHerokuにデプロイする  半年ほど前の場合だと、postgreのバージョン指定がなくインストールに失敗する ※ 最新の app.json だと、v9.6 が指定されており、インストールは成功する
  • 8.  EC-Cube on Heroku の動作確認  画像ファイルはHeroku内に格納できないので、別のストレージサービスを使う Herokuのaddonとして利用できるストレージサービス • Bucketeer https://elements.heroku.com/addons/bucketeer • Cloudinary https://elements.heroku.com/addons/cloudinary Cloudinary用のプラグインと、Heroku addonの組合せが良さそう (試せてないですが) 画像ファイルをCloudinaryに保存するプラグインもある https://www.ec-cube.net/products/detail.php?product_id=1058
  • 9.  EC-Cube on Heroku の動作確認  Dynoの数を増やしてみたら、正常にログインできなくなった ログインしたはずなのに、ログイン画面にリダイレクトされてしまう! セッション情報をローカルに保存する方式になっていた模様? -> Dynoが増えるとセッションの引き継ぎに失敗する -> セッション用のデータストアが必要 セッションを Heroku Redis で管理するよう変更 (設定ファイルのイメージ)
  • 10.  EC-Cube を Heroku Pipeline に載せる  Pull Requestを作って、review appを作成する -> 新規に app を作るのは特段問題なし  stagingへのデプロイで色々と問題が発生した 1. デプロイ時に流すスクリプトはどうするの? 2. 環境ごとにDBとか切り分けたいがどうするの? 3. 2回目以降のデプロイ後、管理画面にログインできない! 4. プラグインのインストールでエラー発生...
  • 11.  EC-Cube を Heroku Pipeline に載せる 1. デプロイ時に流すスクリプトについて PHPアプリをHerokuにデプロイする場合、Composer.json内の “scripts” -> “compile” にて指定したコマンドが実行 される ここに、EC-Cubeインストールコマンドを指定する -> https://devcenter.heroku.com/articles/php-support#custom-compile-step アプリを新規作成する場合(review appを作成するなど)には、以下の処理 既にインストールされているアプリに差分をデプロイする場合(stagingへのデプロイ)には、 以下の処理 環境ごとに、デプロイ時の処理を切り替える
  • 12.  EC-Cube を Heroku Pipeline に載せる 1. デプロイ時に流すスクリプトについて 環境ごとに切り替えるインストールスクリプトを用意する (スクリプトのイメージ)
  • 13.  EC-Cube を Heroku Pipeline に載せる 1. デプロイ時に流すスクリプトについて 作成したスクリプトを、composer.json から呼び出す インストール用のスクリプトを、 composer.json で指定する
  • 14.  EC-Cube を Heroku Pipeline に載せる 2. 環境ごとにDBとかを切り分けたい こんな感じに環境に応じて設定ファイルを分け られるようにしたい
  • 15. 2. 環境ごとにDBとかを切り分けたい src/Eccube/Application.php に手を加える -> 環境変数によって読み込むconfigを切り替える ただ、src/Eccube/Application.php に手を加えるのが良い方法かどうか?? (詳しい人からのアドバイスを募集...) ※本体の方でも修正があった模様? https://github.com/EC-CUBE/ec-cube/pull/2550  EC-Cube を Heroku Pipeline に載せる
  • 16. 3. 2回目以降のデプロイ後、管理画面にログインできない(stagingアプリ) Herokuの環境変数として AUTH_MAGIC をもたせて、常に同じ値とする ① /eccube_install.php を実行 ② 変数 AUTH_MAGIC を新規生成 ③ ②の AUTH_MAGIC 値を使って、saltキーを生成 ⑤ 設定ファイルに AUTH_MAGIC を保存 ④ saltキーとともにadminユーザを登録 初回デプロイ 2回目以降デプロイ � ユーザ登録時のAUTH_MAGICの値と異 なる値を設定ファイルに保存 -> ログインできない! (stagingアプリのデプロイ処理 一部抜粋)  EC-Cube を Heroku Pipeline に載せる
  • 17. 4. プラグインのインストールでエラー発生(stagingアプリ)  EC-Cube を Heroku Pipeline に載せる (まず)プラグインのインストール方法について 1. プラグインのインストールはスクリプト化しておく 2. デプロイ時にアプリによって処理を切り分ける  review app(appを新規作成) -> app.json の scripts にスクリプトを指定する  staging(差分更新) -> デプロイ後に手動で実行($ heroku run bash xxx)
  • 19. 本体 プラグイン composer.json app.json インストール - - - • addon指定 • postgres • redis • cloudinary(ベター?) Pipelineへの搭 載 環境ごとに 設定ファイルを 切り分ける インストール時に 重複エラーを回避する 環境ごとに デプロイ時の処理を 切り分ける • 環境変数 • AUTH_MAGIC を指定する (これまでの修正箇所)
  • 20.  物理ファイルは格納できないので、ストレージサービスは必須  セッション管理には、redisなど別のデータストアサービスを利用する  アプリの設定ファイルは、環境ごとに切り分けできるようにする  本体の方でも検討されている模様なので要確認  デプロイ時の処理(インストールなど)の内容を把握して、 review app作成時と、stagingデプロイ時の両方にも対応できるようにする (これまでで分かってきたこと...)
  • 21.  EC-Cube を Heroku で稼働させる上でのノウハウを もっと溜め込みたい  他のソフトウェアもHerokuで稼働させることを試してみたい -> Heroku で「何か」を稼働させる上でのポイントを溜め込みたい