CakePHP3のインストール・環境切り分けプラグインを使った本番反映


シリーズ説明と今回の概要
このシリーズは、CakePHP3 系で web サイトを開発する一連の流れの解説になります。初回である本記事は、ローカルの開発環境でサイトを新規作成し、web サーバへ反映するまでの手順になります。重要なファイルは git の管理下から除外しつつ、特別なデプロイツールを使わずに単に git pull して反映します。また、これを叶えるために plugin を利用します。

ローカル作業
普段開発で使用している Vagrant / VertualBox を利用してアプリケーションの開発の準備を行います。仮想環境が立ち上がったらアプリケーションを作成します。

http://book.cakephp.org/3.0/ja/installation.html#cakephp

アプリケーションのインストール

公式マニュアルに従って composer でアプリケーションをインストールします。まずは composer.phar のダウンロードです。私は以下ディレクトリに移動して実行しました。

composer.phar がダウンロードされるので、ダウンロード完了後に公式マニュアル通りにコマンドを打ってアプリケーションを作成しました。

すると、/usr/share/nginx/html/サイト名/app 以下に色んなファイルが作成されるかと思います。作成完了後、app ディレクトリ以下を git のバージョン管理下に入れます。なお、デフォルトで /vendor/*, /tmp/*, /logs/* は gitignore に記載されていますので、これら以外を管理下に入れます。

app ディレクトリと同じ階層にある composer.phar を削除し、app 直下に composer.phar を新しくダウンロードします。こんなことをしなくても最初からうまくできるのかもしれませんが、公式マニュアルのインストール方法に従いつつプラグインのインストールの準備を行うため、app 直下に composer.phar を配置しました。なお、単にファイルを移動させるよりも新しくダウンロードしなおす方がトラブルなく無難です。

ダウンロードが完了したら、gitignore に composer.phar を追記します。app ディレクトリ以下、composer 関連は composer.json, composer.lock, composer.phar の3つがあり、composer.phar のみバージョン管理から除外します。以下この時点での .gitignore の内容になります。

いったんここで初期コミットとして git commit しました。ここでコミットしておき、今後何かミスをした時に元に戻れるようにしました。

環境切り分け用のプラグインの利用

開発環境 / 本番環境の環境切り替えを行うために、プラグインを利用します。今回利用するプラグインの開発者は CakePHP の開発者なので信頼性は抜群です。

https://github.com/josegonzalez/cakephp-environments

インストール手順に従って composer.json の内容を書き換えます。

json のよくあるミスとして「 , 」に注意して記述します。記述が完了したら app ディレクトリ以下に移動して、下記コマンドでプラグインをインストールします。インストールが完了すると composer.lock ファイルが変更されます。

config/bootstrap.php 内、Plugin::loadAll(); を記述してプラグインを入れるたびにファイルを書き換える手間を省きます。都度ファイルを書き換えても問題ありませんし、これはご自身のルールに従えばいいかなと思います。Plugin::loadAll(); はデフォルトでコメントアウトされているので、私はこれをコメント解除しました。

インストールが完了したら、プラグインの公式マニュアルに従って各々ファイルを作成します。今回はステージング環境を省き、本番環境と開発環境の設定ファイル、及び各環境を読み込み実行するファイルを作成しました。

CakePHP2 系の時と同様、マニュアルには環境ファイルを切り分ける処理が書いていないので、私はサーバ変数を利用して切り分ける処理を environments.php に記述しました。なお、CAKE_ENV は production, development ファイル内の $name と同じ値にします。

各々のファイルを作成し終えたら、本番環境の極秘情報を記述した production.php は git 管理したくないので ignore に追加します。この時点での .gitignore ファイルの内容です。

追加完了後、app.php から Security.salt とDBの接続情報を各種環境ファイルにそれぞれ移植し、.gitignore から app.php を除外してバージョン管理下に配置します。なお、Security.salt の値は開発環境と本番環境で別々の値にすることを強くお勧めします。早くサーバに反映して開発 / 本番環境の行き来を楽しみたいので、私は以下のみ移植しました。例として development.php の内容を記します。

Datasources の情報をこのプラグインで切り替えるため、bootstrap.php 内、Configure::load の記述のすぐ下でenvironments.php を include し、Configure::read や Configure::consume で期待通りに動くようにします。私は最初、何も考えずに適当な位置で読み込み、environment プラグインがうまく動作しない!と一人で騒いでしまいました。environments.php ファイル内で Environment::start() を実行しているので、bootstrap.php に記述する場所を間違えると Configure::consume でデフォルトの情報が消えてしまいます。

くどいですが、production.php が管理から除外されていることを確認して、git commit & push します。

本番環境の作業
ディレクトリに移動してファイルを展開します。また、composer を実行してプラグインをインストールします。

インストールが完了したら、nginx の設定ファイルに CAKE_ENV の値を追加し、プラグインが自動で環境を切り替えるように設定します。CakePHP3 の公式マニュアルの内容に加えたものが下記になります。

修正が完了したら、nginx をリロードして内容を反映します。

これで web からアクセスされた場合に環境を切り分けられますが、コマンド操作(bake や migration 等)では対応できません。そこで、以下を .bashrc に記載します。なお、場所はユーザのホームディレクトリにあります。

これで開発 / 本番環境の行き来が完了しました。が、本番環境の url にアクセスすると NotFound のエラーが発生しました。急いで作業したので、Templete/Pages/home.ctp がデフォルトのままで、このまま本番環境に反映するとエラーが発生するようにテンプレートに記述されていました。

Please replace Pages/home.ctp with your own version.
「Error: The requested address ‘/’ was not found on this server.」

なんて親切なと思う一方、NotFound じゃないエラーにして欲しいなと思いつつテンプレートを修正して、問題ないことを確認しました。これで環境を行き来しつつ重要ファイルはバージョン管理から除外されたかと思います。

終わりに
何か不明点があれば、サイト TOP のお問い合わせよりご質問ください。また、より CakePHP3 について詳しく知りたい方は、現在公式マニュアルの翻訳を行っていますので一緒にやりませんか?

CakePHP3 の公式マニュアルを翻訳する方法

Enjoy!!