CakePHP 3でDotenvを使って環境設定する方法
2017-01-23
LaravelなんかのPHPフレームワークでは、デフォルトで.env
ファイルを用いて環境設定(Dotenv)するようになっています。
CakePHP 3は、デフォルトでDotenvが利用できる形にはなっていないので、ライブラリを導入してDotenvで環境設定ができるよう実装する手順を解説していきます。
※ CakePHP 3.5以降では、Dotenvライブラリーのサポートが、アプリケーションスケルトンに追加されました。従って、バージョン3.5.0以降では本記事の手順を踏むことなく利用できます。
Dotenvとは?
Dotenvとは、もともとRuby界隈で考えられた仕組みで、.env
というファイルに環境情報(データベース接続情報やメールサーバー接続情報など)をまとめて記述して、それをロードすることで環境設定を行う仕組みです。
通常、.env
はGit等のバージョン管理の対象外とし、デプロイする際に記述(配置)します。
これまで多くのPHPフレームワークではdevelopment環境とproduction環境の両方の環境設定を用意しておき状況によって切り替える、というのが普通でしたが、これは開発環境用の設定ファイルとか本番環境用の設定ファイルとかそういったことは抜きに、サーバーごとに環境設定ファイルを個別に持とう!というものです。
設定ファイルの構成や設定手順がわかりやすくなるため、CakePHPに限らず、他のフレームワークやピュアPHPで開発する際など、多くの場合においてオススメしたい仕組みです。
PHP Dotenvのインストール
では、実際に設定していきます。
まず、PHP Dotenvをインストールします。composerを利用し、以下のコマンドを実行します。
composer require josegonzalez/dotenv:dev-master
なお、最新版のライブラリ(v3.0.0以降)では、対応PHPのバージョンがPHP 7.0+となっています。PHP 5系で利用したい場合は、以下のコマンドを入力します。
composer require josegonzalez/dotenv:~2.0
CakePHP 3への設定
ライブラリーがインストールできたら、CakePHPへ環境設定を読み込む記述を追加します。
CakePHPのconfig/bootstrap.php
ファイルのpaths.php
が読み込まれた後の部分(42行目付近)へ、以下の記述を追加します。
/*
* PHP Dotenv
*/
try {
josegonzalez\Dotenv\Loader::load([
'filepath' => __DIR__ . DS . '.env',
'toEnv' => true
]);
} catch (InvalidArgumentException $e) {
// do nothing in case the file doesn't exist
}
これで、config/.env
ファイルを読み込むようになります。プロジェクトルートの.env
を読ませたい場合は、__DIR__
の部分をROOT
にすればいいでしょう。
.envファイルの追加
CakePHP 3をインストールしてすぐの初期状態では、設定ファイルであるconfig/app.php
ファイルの複数箇所で、env
関数を呼び出していると思います。このenv
関数は、第一引数の環境変数を取得し、存在しない場合は第二引数の値を返す、というものです。
デフォルトで既に、重要な設定値はenv
関数を通すようになっているので、下記のテンプレートファイルを参考に.env
ファイルを作成・配置すれば、もうアプリケーションの環境設定が.env
ファイルで出来ている状態になるでしょう。
# app settings
export APP_NAME=app
export APP_ENCODING="UTF-8"
export APP_DEFAULT_LOCALE="ja_JP"
# some general configuration for cakephp
export DEBUG=true
export SECURITY_SALT="[セキュアなランダム文字列]"
export SECURITY_CIPHER_SEED="[乱数]"
# database connection information
export DATABASE_URL="mysql://user:password@localhost/test_database_name?encoding=utf8"
export DATABASE_TEST_URL="mysql://user:password@localhost/test_database_name?encoding=utf8"
# a simple email adapter
export EMAIL_URL="mail://localhost/?from=you@localhost"
export EMAIL_SMTP_URL=smtp://user:secret@localhost:25/?from[site@localhost]=My+Site&timeout=30
export EMAIL_FAST_URL=smtp://user:secret@localhost:25/?from=you@localhost&messageId=1&template=0&layout=0&timeout=30
もちろん、これは例なので、上記にない環境変数も追加すれば設定できますし、config/app.php
を編集すれば好きなパラメーターを.env
経由で設定できるようになります。
まとめ
たかが設定ファイル、されど設定ファイル。
設定ファイルひとつでデプロイの手間が全然違ってきたりします。もし、あまり気にしたことのないのであれば、これを機に見直してみてはいかがでしょうか。