🙄
Laravelの環境(APP_ENV)の判断方法
だいたい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