[CakePHP4]環境設定である.envとapp_local.phpのどっちを使うべきか悩む
CakePHP4をインストール後、DBの接続先を設定しようとファイルを確認すると2種類の設定方法に気づいた方もいるかもしれません。
confディレクトリに設定ファイルが2種類存在します。
- .env.example
- app_local.example.php
どちらも設定内容を記述するファイルなんですが、どっちが良いんでしょうか?先に結論を書きますが、CakePHPはapp_local.example.phpをリネームしてapp_local.phpで管理をおすすめしているようです。
.envの使い方
configディレクトリにある「.env.example」をリネームして「.env」にします。
必要な環境情報を記述します。
export APP_NAME="Sample"
export DEBUG=true
export APP_ENCODING=UTF-8
export APP_DEFAULT_LOCALE=ja_JP
export APP_DEFAULT_TIMEZONE="Asia/Tokyo"
export SECURITY_SALT="xxxxxxx"
CakePHP4では、.envの読み込みがデフォルトで無効(コメントアウト)になっているので、有効にします。
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
$dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
$dotenv->parse()
->putenv()
->toEnv()
->toServer();
}
※コメントアウトを削除する
これで.envの読み込みが可能となるのですが、Docブロックの英文を読むと、重要なことが書かれています。
config/.env.example
# Having this file in production is considered a **SECURITY RISK** and also decreases
# the boostrap performance of your application.https://github.com/cakephp/app/blob/master/config/.env.example
翻訳:
#このファイルを本番環境に置くことは**セキュリティリスク**と見なされ、減少します
#アプリケーションのブーストラップパフォーマンス。
セキュリティリスクとパフォーマンスに影響があるとのことのようです。
また「.env」をバージョン管理しないように注意がされています。gitの場合、.gitignoreファイルに「.env」を追加しておく必要があります。
app_local.php の使い方
app_local.phpの設定は、「app_local.example.php」をリネームして「app_local.php」にするだけで有効化できます。
下記は必要な部分だけを抜粋しています。
<?php
return [
'debug' => false,
'Security' => [
'salt' => env('SECURITY_SALT', '2fdfcd38ec984a7ba84504eeff4b589936ad6ec003f2ee624a958b8d00ef5009')
],
'Datasources' => [
'default' => [
'host' => 'localhost',
'username' => 'root',
'password' => 'password',
'database' => 'text_db',
'url' => env('DATABASE_URL', null)
]
]
];
こちらもバージョン管理しないように注意がされています。gitの場合、.gitignoreファイルに「app_local.php」を追加しておく必要があります。
明確な答えは無いもよう
issuesのコメントや他関連ブログなどを調査したところ、どちらが良いか明確な答えは無いようです。
envを使うことで、コンテナベースのでデプロイが簡単になるし、app_local.phpはansible / puppet / chefが管理するサーバー上に存在するアプリケーションが簡単になるとのこと。
また2つとも採用するのは、システムを複雑化する原因になるため、どちらか好きな方(プロジェクトに合うやり方)を採用したほうがいいとのこと。
Using environment variables will make deployments in kubernetes or other container based hosting simpler, while 'local' files make applications living on servers managed by ansible/puppet/chef easier. I'm not confident we can make a decision in either direction here, as each style is used for a different deployment style, and choosing only one will likely make the other harder, and choosing both adds complexity and opportunity for confusion. The current opt-in approach we have lets people choose the style they need.
https://github.com/cakephp/app/issues/707#issuecomment-529236177
まとめ
色々調べてみた結果、明確な答えはありませんでした。
Laravelなどは.envを採用していますし、.envで慣れている人は.envでも問題なさそうです。
どちらでも良いよという方は、CakePHPが推奨している「app_local.php」を使ったほうが良いかもしれません。
コメント
コメントを残す