普段VagrantのVCCWを使ってWordPressのテーマ開発を行っていたが、
- 公式VCCWはPHP7.0とかなので、環境としてだいぶ古い
- VirtualBoxは遅い(気がする)
- 手動で環境作るのがめんどくさい
という点で微妙だなと思っていた。
そこで、今時っぽくDockerでWordPressの開発環境を作ろうと思い、奮闘した。
完成版のリポジトリを作ったので、環境構築だけしたい人はリポジトリのREADMEの通りにやると良い。↓
https://github.com/yheihei/wp-docker-template
目次
WordPressでテスト駆動開発をやるのに必要なもの
テストコードを書かないとWordPressはグダグダになるという自論を持っている。
自分自身もテスト駆動開発じゃ無いと、ろくなコードを書けない体になっているのでテストができる環境が必須である。
WordPressのテストに必要なパッケージは以下。
- WP-CLI
- PHPUnit
WP-CLIはコマンドラインでWordPressを操作するツール。Scaffoldにより、テーマのテストに必要なファイルの生成を行う。
WP-CLIなしでテスト環境を作ることも(多分)可能だが、誰もそんなことやってないので、WP-CLIで作ることにする。
リポジトリ
完成品は下記。
https://github.com/yheihei/wp-docker-template
README通りにやれば、数分でテーマのユニットテストができるようになる。
作り方
Dockerfileを作る
まずは、Dockerfileに、WP-CLI、PHPUnitをインストールする設定をする。
WP-CLIでテスト環境を作る際に必要になるため、default-mysql-clientやSVNも入れている。
docker-compose.ymlを作る
コンテナとして以下を用意
- db → WordPress保存用のmysqlコンテナ
- test_db → WordPressのテスト用のmysqlコンテナ。WordPressのテストは毎回まっさらなWordPressのDBを作ってからそこに対してテストをする。そのため、コンテナごと分けた。ちなみに本番DBを無理やり繋いでテストしようとすると本番DBがまっさらになるw
- wordpress → WordPressが動くWebサーバー。wp-content配下だけがローカルと同期されている。ローカルのテーマファイルをいじるとここに反映され、開発ができる
PHPの設定
php/php.iniにphpの設定を書く。
WordPressのファイルアップロードのMaxサイズをあげている。他にphpの設定が必要になったらここに書くことで反映される。
初期化用スクリプト用意
コンテナが起動した後に、コンテナ内でスクリプトを実行することで、WordPressの初期設定と、テーマのテストができるようになる。
init_wp.sh
コンテナ内で実行することで、WordPressの初期設定を自動で行うスクリプト。
init_wp_test.sh
コンテナ内で実行することで、全てのテーマフォルダ内でwp scaffoldを行い、テストに必要なファイル群を生成する。
init_wp_theme_test.sh
テーマフォルダ内で実行することで、テスト用のDBの設定を行うスクリプト。
起動からテスト実行までの流れ
コマンド入力だけでテスト環境が構築できた。