Laravelの.envは、ご存知のように実行する環境により中身が違ってきます。その環境の種類を設定するのがAPP_ENVの環境変数です。今回はそのお話です。
設定値
Laravel以下のように.envファイル内でいろいろな環境変数の設定ができます。
APP_NAME=Laravel APP_ENV=local # これが今回の主人公 APP_KEY= APP_DEBUG=true ..
その中で、APP_ENVの値はどの環境であるかを設定します。既存値としては、local あるいは production の2つあります。ローカルの開発環境あるいはライブの環境です。しかし、必要ならば自分で好きな値で設定しています。私らのステージングサーバでは、stagingの値を使用しています。
また、.envでは指定しないですが、ユニットテスト実行のときに自動的に testing という値が設定されます。これは、phpunit.xmlの以下で設定しています。
... <php> <env name="APP_ENV" value="testing"/> <env name="APP_URL" value="https://localhost"/> ...
どの環境か判断
さて、プログラムの中でどの環境で現在実行されているかを、どのように判断するかというと、これ意外とバリエーションあります。
最近まで私が使用していたのは、
if (config('app.env') === 'production') { // }
config()
のヘルバーは他の環境変数でも使えるので重宝します。
しかし、マニュアルを見ると、以下のようにAppのファサードのメソッドを使っています。
if (App::environment('production')) { // }
これ知らなかったなあ。しかも、複数の環境のテストも可能です。stagingあるいはproductionなら、
if (App::environment(['staging', 'production'])) { // }
さらに、こんなのもありです。
if (App::isProduction()) { // }
このバリエーションには、ローカル環境のチェックもあります。
if (App::isLocal()) { // }
さて、テスト環境はなんだと思いますか?
if (App::runningUnitTests()) { // }
残念、App::isTesting()
ではなかったですね。
それから、Appのファサードを使用しなくても、app()
のヘルパーを使用しても同様です。例えば、
if (app()->isProduction()) { // }
最後に
環境変数と関係ないですが、コマンドラインでLaravelを実行しているときは、以下でチェックできます。
if (App::runningInConsole()) { // }
tinkerで実行したら、
>>> App::runningInConsole() => trueメルマガ購読の申し込みはこちらから。