🙄

Laravelの環境(APP_ENV)の判断方法

2021/06/16に公開

だいたいAPP_ENVの値で現在の環境を判断する際に、このような記述を書くことがあるかと思います。

if (config("app.env") === "production") {

}

これでも全然問題ないのですが、今回はもっとシンプルに下記のように書くことができます。

環境によって処理を分岐する

本番環境かどうかを判断する場合

if (app()->isProduction()) {
    // 本番環境の場合の処理
}

ローカル環境かどうかを判断する場合

if (app()->isLocal()) {
    // ローカル環境の場合の処理
}

テスト環境かどうかを判断する場合

ユニットテストなどのテスト実行時にtrueになります。

if (app()->runningUnitTests()) {
    // テスト環境かどうかを判断する場合
}

それぞれenvファイルはどう書けばいいのか?

実は、この3つの関数は vendor/laravel/framework/src/Illuminate/Foundation/Application.php に記載されています。

     /**
     * Determine if the application is in the local environment.
     *
     * @return bool
     */
    public function isLocal()
    {
        return $this['env'] === 'local';
    }

    /**
     * Determine if the application is in the production environment.
     *
     * @return bool
     */
    public function isProduction()
    {
        return $this['env'] === 'production';
    }
    
    
    /**
     * Determine if the application is running unit tests.
     *
     * @return bool
     */
    public function runningUnitTests()
    {
        return $this['env'] === 'testing';
    }

つまり、.envのAPP_ENVに入れる値は、ローカルの場合は 「local」, 本番環境の場合は「production」と書けばよいです。

テストの場合は.env.testingもしくはphpunit.xmlで環境を「testing」に設定しておくと良いでしょう。

Discussion