はじめに
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=log
2. 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=staging
Nginx + 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:cache
Laravelは設定をキャッシュして動作するため、.env
を変更した際は必ずキャッシュを再生成する必要があります。
.envからの脱却?より安全な運用に向けて
よりセキュアな運用を目指すなら、.env
ではなく以下のような外部の設定管理システムを使うのもおすすめです。
AWS Systems Manager Parameter Store (SSM) や Secrets Manager
.env
ファイルをサーバに置かず、外部の秘密情報管理サービスに一元化する- Laravelからは AWS SDK や Laravel専用パッケージで値を取得
ただし、初学者や中小規模のプロジェクトでは、.env
による環境分離運用がわかりやすく、十分実用的です。
まとめ
Laravelで .env.staging
や .env.local
などを使い分けることで、開発・ステージング・本番の環境管理が格段に安全かつ効率的になります。
特に APP_ENV
による切り替えは簡単に導入でき、柔軟な運用に貢献します。
環境構築に不安がある方は、この記事のコードをそのままコピーして導入してみてください。
コメント