目次
はじめに
既にオープンしているEC-CUBE4サイトに改修を加えることになった。
文言変更などの軽微な修正だったら直接本番サイトを触ってしまうかもしれないけど、ガッツリな改修を行うのにいきなり本番サイトを触るのは怖すぎる。
ローカル開発環境を構築し、そちらで実装やテストをしっかり行い本番反映したい。今回はそのためのローカル開発環境の構築手順を紹介する。
また、ローカル開発環境を構築する際は要注意すべき事項がたくさんある。個人情報漏洩や事故による本番サイトの不具合が起きる可能性もある。記事の最後の方に注意点も記載しているから一通り目を通してほしい。
私のローカル開発環境の状態
なお、この記事を書くにあたってのローカル開発環境は以下の通りである。環境によってはうまくいかないかもしれないけど、使っている環境に詳しいのはその使っている人だから、うまく調整していただきたい。
- macOS High Sierra 10.13.3(17D47)
- PHP 7.2.14 (cli) (built: Jan 12 2019 05:23:00) ( NTS )
- PHPモジュールのインストール状況はEC-CUBE4が動く条件を満たしている
- Composer version 1.6.5 2018-05-04 11:44:59
- MySQLは10.2.16-MariaDBでphpMyAdminも入っている
ローカル開発環境の構築手順
ローカル開発環境は以下の手順で構築を行う。
本番環境からソースコード一式をダウンロードする
ローカルにソースがないと動かない(あたりまえだ)。だから本番環境からソースコードを一式をダウンロードしてくる。
Git運用している人はリモートリポジトリからソースコードをpullしてくるでもいいだろう。(※Gitで画像や設定ファイルなども管理しているならね。。)
今回は、本番サーバにSSHでログインし対象のEC-CUBE4ディレクトリをまるごとzip圧縮する。圧縮の際に var/
ディレクトリ内のキャッシュファイル、ログファイル、セッションのファイルは不要になる。ディレクトリのパスなどは環境に合わせてね。
cd /home/user/example.jp/public_html/
zip -r eccube4.zip eccube4 -x *var/cache/* -x *var/log/* -x *var/sessions/*
圧縮したzipはローカルにダウンロードする。
scp server:/home/user/example.jp/public_html/eccube4.zip ~/Desktop/
ダウンロードしたzipは任意の開発用のディレクトリで解凍するなりして、ソースコードはローカルに揃った状態となる。
本番環境からデータベースをもらってくる
ローカルにデータベースがないと動かない(あたりまえだ)。だから本番環境からデータベースをエクスポートする。
本番環境からデータベースSQLをエクスポート
本番環境のデータベースがMySQLでphpMyAdminの操作ができるなら、phpMyAdminにログインしてEC-CUBE4のデータベースをエクスポートできるだろう。
エクスポート画面ではごちゃごちゃ出るけど、特に凝った設定をする必要はない(はず)。以下の入力内容でSQLファイルをダウンロードできる。
- 簡易 – 最小限のオプションだけ表示
- フォーマットはSQL
- エンコーディングへの変換なし
- 実行
SQLがダウンロードできない場合は、おそらくデータベースの容量が大きくてSQL作るのに時間がかかっていてタイムアウトしたりしているのかもしれない。phpMyAdminを管理している情シスやサーバ管理者に問い合わせてみよう。
ローカル開発環境へデータベースSQLをインポート
次に、ローカル開発環境のMySQLにインポートを行う。ローカル開発環境には既にMySQLとphpMyAdminがインストールされていることを前提に説明する。
もしmacにMySQLやphpMyAdminが入っていない場合は環境を整えてから続きを行うこと。
データベースのインポートを行うには、まずはデータベースの箱を作る必要がある。エクスポートしてきたデータベース名と同じ名前でデータベースを作成する。照合順序(以下の画像のutf8_general_ci)も本番環境と同じで良い。
もし、本番環境と同じデータベース名を使えない場合は、エクスポートしたSQLファイルの以下の箇所を任意のデータベース名にして、その任意のデータベース名でデータベースの箱を作れば良い。
--
-- Database: `eccube4_test`
--
箱ができたら、データベースを選択してインポート。
インポート画面でもごちゃごちゃ出るけど、特に凝った設定をする必要はない(はず)。以下の入力入力内容でOK。
- アップロードファイルのファイルを選択でエクスポートしたSQLファイルを選択
- エンコーディングへの変換なし
- 実行
SQLのインポートができない場合は、SQLファイルが大きかったりでPOSTで送信できるファイルサイズの上限に引っかかっているのかもしれない。phpMyAdminを管理している情シスやサーバ管理者に問い合わせてみよう。
データベースはローカルに揃った状態となる。
EC-CUBE4の環境変数
EC-CUBE4の環境変数は本番環境の環境変数のままである。ローカル開発環境に合わせた環境変数へ書き変えてあげること。
.env or .htaccess
EC-CUBE4の環境変数は .env か .htaccess のどちらかのファイルに記載されている。本番環境での環境変数は .htaccess に記述することをEC-CUBE公式が推奨しているので、おそらくは .htaccess 側に記述されているはず。.htaccess側は以下のような感じに。
SetEnv APP_ENV prod
SetEnv APP_DEBUG 0
SetEnv DATABASE_URL 本番のDATABASE_URL
SetEnv DATABASE_SERVER_VERSION 5.7.16
SetEnv MAILER_URL sendmail://本番のドメイン
SetEnv ECCUBE_AUTH_MAGIC EYIMMW6iHTaygJosR3f1kBt4mOPdXlc2
SetEnv ECCUBE_ADMIN_ALLOW_HOSTS []
SetEnv ECCUBE_FORCE_SSL true
SetEnv ECCUBE_ADMIN_ROUTE adminadminadmin
SetEnv ECCUBE_COOKIE_PATH /
SetEnv ECCUBE_TEMPLATE_CODE default
SetEnv ECCUBE_LOCALE ja
SetEnv ECCUBE_TIMEZONE Asia/Tokyo
.env 側に記述されている場合は以下のような感じに。
APP_ENV=prod
APP_DEBUG=0
DATABASE_URL=本番のDATABASE_URL
DATABASE_SERVER_VERSION=5.7.16
MAILER_URL=sendmail://本番のドメイン
ECCUBE_AUTH_MAGIC=EYIMMW6iHTaygJosR3f1kBt4mOPdXlc2
ECCUBE_ADMIN_ALLOW_HOSTS=[]
ECCUBE_FORCE_SSL=true
ECCUBE_ADMIN_ROUTE=adminadminadmin
ECCUBE_COOKIE_PATH=/
ECCUBE_TEMPLATE_CODE=default
ECCUBE_LOCALE=ja
ECCUBE_TIMEZONE=Asia/Tokyo
環境変数を編集する
ローカル開発環境は以下のように環境変数を書き換えてあげる。
APP_ENV prod
- dev へ変更。デバックツールを使えるようになり便利。
APP_DEBUG 0
- 1 へ変更。デバックツールを使えるようになり便利。
DATABASE_URL 本番のDATABASE_URL
- mysql://ユーザ名:パスワード@ホスト/データベース名 へ変更
- 私の環境の場合、
mysql://root:testtest@phpmyadmin.localhost.jp/eccube4_test - ローカルのphpMyAdminにログインしたときのユーザ名とパスワードを使用する。ホストはローカルだとlocalhostでしょうか。環境で合わせること。
MAILER_URL sendmail://本番のドメイン
- 設定なしか、sendmailが入っているならローカルのsendmailのURLを記入する。
- 設定なしの場合、メール系処理でメールが飛びません。メール誤送信の事故防止のために設定なしにしてても問題ない。
- 私の環境の場合、sendmail://localhost.jp
ECCUBE_FORCE_SSL true
- false へ変更。HTTPSを強制するかの設定である。ローカルなのでHTTPでもいいでしょう。
以上の点を踏まえ、私の環境の場合は以下のようにEC-CUBE4の環境変数を設定する。各々のローカル開発環境に合う環境変数に書き換えてあげること。
SetEnv APP_ENV dev
SetEnv APP_DEBUG 1
SetEnv DATABASE_URL mysql://root:testtest@phpmyadmin.localhost.jp/eccube4_test
SetEnv DATABASE_SERVER_VERSION 5.7.16
SetEnv MAILER_URL sendmail://localhost.jp
SetEnv ECCUBE_AUTH_MAGIC EYIMMW6iHTaygJosR3f1kBt4mOPdXlc2
SetEnv ECCUBE_ADMIN_ALLOW_HOSTS []
SetEnv ECCUBE_FORCE_SSL false
SetEnv ECCUBE_ADMIN_ROUTE adminadminadmin
SetEnv ECCUBE_COOKIE_PATH /
SetEnv ECCUBE_TEMPLATE_CODE default
SetEnv ECCUBE_LOCALE ja
SetEnv ECCUBE_TIMEZONE Asia/Tokyo
ローカル開発環境の出来上がり、動かない場合は?
あとはソースコード置いているディレクトリで以下のコマンドでビルドインWebサーバを立ち上げればローカル開発環境が動くはずだ。
bin/console server:run --env=dev
http://127.0.0.1:8000 でEC-CUBE4サイトが見られればOK。
もし動かない場合はvar/
ディレクトリ内のキャッシュを削除してあげたり環境変数などを見直すと良いかもしれません。
ちょっと待った!ローカル開発環境の個人情報や事故対策は大丈夫?
ローカル開発環境ができたし改修のための実装を始めるか〜!
ちょっと待った! ローカル開発環境そのままで大丈夫ですか?
本番で動いているEC-CUBE4をまるごとコピーしてローカル開発環境を作ったのですから、以下のことに注意する必要があります。
(順序的に最初に読んでほしかったかも…ここに書いてごめん。)
個人情報は大丈夫?
個人情報は大丈夫?会員の氏名、メールアドレス、住所、お届け先、注文情報、お届け先情報…EC-CUBEは個人情報の宝庫なので。。。
そもそもローカル開発環境にデータベースをエクスポートしてSQLとして保存すること自体危険。エクスポートする前に上手に個人情報をマスクしてエクスポートするのが最善。社内の情シスと相談しよう。
dtb_customer, dtb_order, dtb_shipping などに個人情報あり。データを削除するのが難しければ、UPDATEで適当なものに全て書き換えてあげるなどする。
外部システム連携は大丈夫?
多機能なEC-CUBE4サイトの場合、もしかしたら外部へのシステム連携を行っている可能性がある。エンドユーザが会員登録を完了したら、カートに商品を入れたら、注文を完了したら、退会したら…などなど。
外部連携がされているEC-CUBE4をローカル開発環境で気にせず動かしていると、外部連携先のデータに不整合が生じてしまい外部連携先に不具合が出てしまったり、本番環境のEC-CUBE4に不具合が出てしまったり…。様々なことが考えられる。
外部システム連携を行っているかどうかの仕様などをしっかり確認すること。ローカル開発環境で外部システム連携がされると問題がある場合はソースコードから外部システム連携の箇所をコメントアウトしたりして連携されないようにすること。
おわりに
いかがでしたでしょうか。本番稼働中のEC-CUBE4サイトのローカル開発環境の作り方のイメージはつきましたでしょうか。
記事中で紹介しましたローカル開発環境の作り方は、環境によって方法が違う場合があります。各々の環境に合わせて作っていただければと思います。自己責任でよろしくお願いいたします。
コメントを残す