Laravelで.env.stagingや.env.localなど環境ごとの.envファイルを安全に使い分ける方法

Laravel Laravel

はじめに

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 を指定すれば、テスト専用の環境構成も可能

注意点とベストプラクティス

.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 による切り替えは簡単に導入でき、柔軟な運用に貢献します。

環境構築に不安がある方は、この記事のコードをそのままコピーして導入してみてください。

関連リンク

コメント

タイトルとURLをコピーしました