BETA

[Laravel] Laravel では env() を config 系ファイル以外の場所に書いてはいけない

投稿日:2018-10-15
最終更新:2018-10-24
※この記事は外部サイト(https://qiita.com/mpyw/items/34f37742d9a18...)からのクロス投稿です

説明するよりもフレームワークのコード読んでもらったほうが早いので掲載します。

framework/LoadEnvironmentVariables.php L12-L31

    /**
     * Bootstrap the given application.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    public function bootstrap(Application $app)
    {
        if ($app->configurationIsCached()) {
            return;
        }

        $this->checkForSpecificEnvironmentFile($app);

        try {
            (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
        } catch (InvalidPathException $e) {
            //
        }
    }

.env ファイルの読み込みは, php artisan config:cache していない場合にしか行われません! キャッシュを有効にしてある場合, .env に書いてあるだけでシェルから起動する時点で定義されていない環境変数はすべて未定義になってしまうので注意しましょう。

要するに

    'env' => env('APP_ENV', 'production'),

こういう使い方はOKで,

class User extends Model
{
    public function debug(): string
    {
        if (env('APP_ENV', 'production') === 'production') {
            /* ... */
        } else {
            /* ... */
        }
    }
}

こういう使い方はダメだと言うことです。環境変数で分岐させたい場合は,一度必ずconfig/*.phpの中に落としましょう。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@mpywの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!