はじめに
Laravelでは.envファイルを用いて、アプリケーションの設定を管理します。しかし、開発・ステージング・本番など複数の環境を運用する際に、.envファイル1つでは柔軟な管理が難しくなることがあります。
この記事では、.env.stagingや.env.localなどの複数の.envファイルをLaravelで安全かつ自動的に切り替える方法を、実行可能なコードとともに詳しく解説します。実務でのヒントや運用のベストプラクティスも紹介します。
環境ごとの.envファイル運用のメリット
- 設定の分離:ローカル・ステージング・本番の設定を分けて管理できる
- 安全性の向上:誤って本番の設定をローカルで使うリスクを軽減
- 柔軟なデプロイ:環境変数に応じた動作を自動化できる
Laravelでの.env読み込み仕組み
Laravelでは、bootstrap/app.php で .env ファイルを読み込む仕組みがあり、デフォルトでは .env のみを読み込みます。
これをカスタマイズすることで、環境に応じて異なる.envファイルを読み込むことが可能です。
実装手順
1. 環境ごとの.envファイルを作成する
cp .env .env.local
cp .env .env.staging
cp .env .env.productionそれぞれのファイルで、環境に応じた設定を記述します。
例:.env.staging
APP_ENV=staging
APP_DEBUG=false
DB_DATABASE=myapp_staging
MAIL_MAILER=log2. bootstrap/app.php をカスタマイズ
$envFile = '.env';
if (isset($_SERVER['APP_ENV'])) {
$envFile = '.env.' . $_SERVER['APP_ENV'];
} elseif (isset($_ENV['APP_ENV'])) {
$envFile = '.env.' . $_ENV['APP_ENV'];
}
if (file_exists(__DIR__ . '/../' . $envFile)) {
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
$app->loadEnvironmentFrom($envFile);
} else {
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
}
return $app;このコードにより、環境変数 APP_ENV の値に応じて適切な .env ファイルを読み込みます。
3. 環境変数 APP_ENV をサーバ側で指定
Docker Compose での設定
services:
app:
image: your-laravel-app
environment:
- APP_ENV=stagingNginx + php-fpm の場合
fastcgi_param APP_ENV staging;Apache の .htaccess
SetEnv APP_ENV staging実務でのヒントと応用
.env.localに開発専用の設定を記述MAIL_MAILER=logやAPP_DEBUG=trueなど、開発に必要な設定を集中管理
.env.stagingでステージング環境の確認を簡略化- 本番とほぼ同様の設定にしてリリース前のチェックがしやすくなります
- 自動テスト用に
.env.testingを用意- PHPUnit実行時に
APP_ENV=testingを指定すれば、テスト専用の環境構成も可能
- PHPUnit実行時に
注意点とベストプラクティス
.envファイルはバージョン管理しない
.gitignore に以下のように記述して、.env.* ファイルがGitに含まれないようにしましょう。
.env*.envを変更したらキャッシュ再生成を忘れずに!
php artisan config:clear
php artisan config:cacheLaravelは設定をキャッシュして動作するため、.envを変更した際は必ずキャッシュを再生成する必要があります。
.envからの脱却?より安全な運用に向けて
よりセキュアな運用を目指すなら、.envではなく以下のような外部の設定管理システムを使うのもおすすめです。
AWS Systems Manager Parameter Store (SSM) や Secrets Manager
.envファイルをサーバに置かず、外部の秘密情報管理サービスに一元化する- Laravelからは AWS SDK や Laravel専用パッケージで値を取得
ただし、初学者や中小規模のプロジェクトでは、.envによる環境分離運用がわかりやすく、十分実用的です。
まとめ
Laravelで .env.staging や .env.local などを使い分けることで、開発・ステージング・本番の環境管理が格段に安全かつ効率的になります。
特に APP_ENV による切り替えは簡単に導入でき、柔軟な運用に貢献します。
環境構築に不安がある方は、この記事のコードをそのままコピーして導入してみてください。
