EC-CUBE Advent Calendar 2016 の3日目です。
ぼくのかんがえたさいきょうのEC-CUBE3開発環境とは
Macで開発するために考えた開発環境です。だいたい以下のような感じです。
- Dockerを使ってできるだけ環境を汚さない
- 動作確認するためのEC-CUBEはコンテナ上で動かす
- コードを書いたりPHPUnitのテストを実行するのはMac上のIntelliJからできるようにする
- IntelliJでブレークポイントを設定してコンテナで動いているEC-CUBEのデバッグを出来るようにする
Dockerを使った開発環境を紹介している記事がいくつかありましたが、3と4を出来るものが見当たらなかったので出来たものが、「ぼくのかんがえたさいきょうのEC-CUBE3開発環境」です。
必要なもの
-
IntelliJ IDEA
- PhpStormでもいいと思いますが、個人でライセンスを持ってるので使ってます。
-
PHPBrew
- IntelliJに設定します。EC-CUBE3は今のところPHP5.3.9〜7.0.xまで対応しているのでバージョンを変えれるようにPHPBrewを使っています。
-
Docker for Mac
- WebサーバやDBなども複数種類、複数バージョンサポートしているので環境を切り替えやすいようDockerを使います。
-
docker-sync
- Docker for Macのファイル共有が遅いのでdocker-syncを使います。
- ここを参考にfswatch/unison/rsyncもインストールしておきます。
環境構築
GitHubのリポジトリにdocker-compose.ymlとか置いてるので、クローンしてコンテナをビルドします。EC-CUBE3本体はサブモジュールにしています。
$ git clone git@github.com:kiy0taka/eccube3-dev.git
$ cd eccube3-dev
$ git submodule init && git submodule update
$ docker-compose build
コンテナを起動します。docker-syncを使っているのはDocker for Macのファイル共有が遅いためです。
$ docker-sync-stack start
eccube_install.php
をコンテナ内で実行してEC-CUBEのインストール処理を実行します。
$ docker-compose exec app bash -c "chown -R www-data: . && php eccube_install.php pgsql"
動作確認
http://localhost:8080/ec-cube/html
にアクセスしてEC-CUBE3が見えたらOKです。メール送信する機能を使って送信されたメールはhttp://localhost:1080/
で確認できます。
再起動したときにマウントしているディレクトリのパーミッションがおかしくなってエラーになる場合もあるので、そのときは以下のコマンドを実行します。
$ docker-compose exec app chown -R www-data: app/cache
プログラミングとテスト
IntelliJを使って普通にできますが、DBを使うテストはコンテナのデータベースを見に行けるように以下の内容を/private/etc/hosts
に追記しておきます。
127.0.0.1 localhost db mail
また/var/www/html/ec-cube
がないとテストでエラーになるのでシンボリックリンクを作っておきます。
$ sudo mkdir -p /var/www/html && sudo ln -s ${PWD}/ec-cube /var/www/html/ec-cube
以下のコマンドでテストが成功していたら大丈夫です。
$ cd ec-cube
$ vendor/phpunit/phpunit/phpunit tests/Eccube/Tests/Service/ShoppingServiceTest.php
デバッグ
コンテナ上で動いているPHPプログラムをMac側でデバッグするのは少し面倒です。最終的にこれの下の方にたどり着きました。
以下のコマンドを実行して、IPエイリアスを割り当てればデバッグできるようになります。
$ sudo ifconfig lo0 alias 10.254.254.254
これでIntelliJ側でブレークポイントを設定しておくと、ステップ実行したり変数の中身を確認できるようになります。
最後に
こんな感じでEC-CUBE3の開発を2ヶ月ほどやっていて、まあまあいい感じに開発できていると思います。デバッグの設定等は一度やってしまえばいいのですが、docker-syncはちょっと面倒な感じもあります。今後Docker for Macがよくなってdocker-syncを使わなくてもいいようになることをサンタさんにお願いしましょう。