Laravelの設定機能はphpdotenvをベースに作られています。このため環境に依存する設定は.envファイルに書くのが望ましいです。
vlucas/phpdotenv: Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.
この記事を書いている時点でLaravelの提供する.env例は次です。
laravel/.env.example at master · laravel/laravel
APP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD= BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
いくつか項目がありますが、ここではAPP_ENV=localに注目します。このAPP_ENVとはこの環境がどの様な環境下を定義する値です。この例ではAPP_ENV=localによってこれはローカル環境であると示しています。ただ示すだけでは.envファイルを見る人の役に立つだけです。それはそれで価値がありますがPHPソースコード内でも活用されるべきであり、実際Laravelソースコード内でこのAPP_ENVの値を参照する記述があります。
この記述は laravel/framework/src/Illuminate/Foundation/Application.php 内にまとまっています。抜き出したのが次です。
/** * Determine if application is in local environment. * * @return bool */ public function isLocal() { return $this['env'] === 'local'; } /** * Determine if application is in 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'; }
ローカル環境、本番環境、テスト環境それぞれで値が定められメソッドで覆われています。多くのLaravelに関連するコードではこのメソッドを経由して環境を識別しています。このため.env内にもlocal, production, testingのいずれかを書き、それ以外はよっぽどの例外とした方がよいでしょう。余談ですがPHPUnitを使ってLaravel内のテストを行う時、勝手にtesting環境と識別される様になっています。テスト中は不要なミドルウェアを落とす時などに便利です。