開発環境やステージング・本番環境でDBサーバーへの接続先等を切り替えたいと思い、.envファイル
を環境ごとに分けました。
今回は下記参考サイトを参考に、紹介されてる中の方法2
の対応で実施した内容をメモします。
環境
- 開発環境
- docker desktop
- php
- 7.4.14
- laravel
- 8.25.0
完成イメージ
最終的にフォルダ構成はこのように変わります。
.envファイル
をenvディレクトリ
下に、環境毎に用意します。
指定条件はbootstrap > app.php
に記述します。
対応前
※ []
はディレクトリ
[Laravel] // Laravelプロジェクトフォルダ
├── [app]
├── [bootstrap]
│ └──app.php
├── .env
└── ...
対応後
[Laravel]
├── [app]
├── [bootstrap]
│ └──app.php
├── [env]
│ ├──.env.dev
│ ├──.env.stg
│ └──.env.prod
└── ...
手順
1) .envファイルを用意する
プロジェクトフォルダ直下にenvディレクトリ
を作成してください。.envファイル
を移動してください。
既存の.envファイル
を複製し、本番(prod)開発(dev)などすぐわかるような名前分けをしてenvディレクトリ
に置いてください。
[env]
├── .env.dev // 開発(ローカル)環境
├── .env.stg // ステージング環境
└── .env.prod // 本番環境
また、プロジェクトフォルダ直下にある既存の.envファイル
は削除してください。
2) 切り替え処理
.envファイル
の読込先は下記ファイルで指定しています。
サーバー情報からホスト名を取得して切り替えています。
下記の例では、開発環境はdockerを使ったローカル環境なのでlocalhost
を指定しています。
-
修正対象
- [プロジェクト]/src/bootstrap/app.php
bootstrap/app.php
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
// ↓ 追加
switch ($_SERVER['HTTP_HOST'] ?? 'localhost') {
// 開発環境
case 'localhost':
$app->loadEnvironmentFrom('env/.env.dev');
break;
// テスト環境
case 'staging.maydomain.com':
$app->loadEnvironmentFrom('env/.env.stg');
break;
// 本番環境
case 'prod.maydomain.com':
$app->loadEnvironmentFrom('env/.env.prod');
break;
}
3) configのキャッシュ再生成
最後にキャッシュを更新し、各環境で正常に画面が表示されることを確認してください。
php artisan config:cache