[CakePHP4]環境設定である.envとapp_local.phpのどっちを使うべきか悩む

[CakePHP4]環境設定である.envとapp_local.phpのどっちを使うべきか悩む
2021年05月03日2023年10月10日

CakePHP4をインストール後、DBの接続先を設定しようとファイルを確認すると2種類の設定方法に気づいた方もいるかもしれません。

confディレクトリに設定ファイルが2種類存在します。

  • .env.example
  • app_local.example.php

どちらも設定内容を記述するファイルなんですが、どっちが良いんでしょうか?先に結論を書きますが、CakePHPはapp_local.example.phpをリネームしてapp_local.phpで管理をおすすめしているようです。

.envの使い方

configディレクトリにある「.env.example」をリネームして「.env」にします。

必要な環境情報を記述します。

config/.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の読み込みがデフォルトで無効(コメントアウト)になっているので、有効にします。

config/bootstrap.php
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」にするだけで有効化できます。

下記は必要な部分だけを抜粋しています。

config/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」を使ったほうが良いかもしれません。

コメント

コメントを残す

お名前(任意)
コメント:新規