LoginSignup
2
1

More than 3 years have passed since last update.

Laravel8で環境ごとに使用する.envファイルを切り替える

Last updated at Posted at 2021-03-07

開発環境やステージング・本番環境で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
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1