🔑

.envファイルを開発環境と本番環境で自動で切り替える(PHP)

2024/12/04に公開

はじめに

PHP初学者がDB接続を学び、開発環境(XAMPP)と本番環境で秘匿情報の.envファイルってどうればいいんだろう? 開発環境から本番環境に切り替える際、コードを書き換えるの?
という疑問からようやくたどり着いた現時点でのベストプラクティスを残します(フレームワーク等は未着手)。

アウトライン

①.envファイルを2つ用意(開発用・本番用)
②2つの.envファイルの読み込みを切り替える記述
③ローカル(XAMPP)および本番サーバーで環境変数の設定

手順

①.envファイルを2つ用意(開発用・本番用)

開発DB情報を記載した.env.developmentファイルを用意(ここではルートディレクトリに配置します)。

APP_ENV=development
DB_HOST=localhost
DB_NAME=dev_db
DB_USER=dev_user
DB_PASSWORD=dev_password

本番環境DB情報を記載した.env.productionファイルを用意(ここではルートディレクトリに配置します)。

APP_ENV=production
DB_HOST=your.production.db.host
DB_NAME=prod_db
DB_USER=prod_user
DB_PASSWORD=prod_password
②2つの.envファイルの読み込みを切り替える記述

APP_ENV環境変数を使って、現在の環境(開発環境または本番環境)に応じて適切な.envファイルを読み込む処理を作成します。

// 環境変数に基づいて読み込む .env ファイルを決定
$envFile = '.env.development';  // 暫定でデフォルトを開発環境用を読み込む

// 本番環境の場合(APP_ENV が 'production' の場合)は .env.productionを使用
if (getenv('APP_ENV') === 'production') {
    $envFile = '.env.production';
}

// .env ファイルの読み込み
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, $envFile);
$dotenv->load();

// ここで環境変数にアクセスする
$host = $_ENV['DB_HOST'];
$dbname = $_ENV['DB_NAME'];
$user = $_ENV['DB_USER'];
$password = $_ENV['DB_PASSWORD'];

//$_ENV['DB_HOST'];はgetenv('DB_HOST');と書いても問題ない。
③ローカル(XAMPP)および本番サーバーで環境変数の設定

XAMPP の場合、APP_ENVをdevelopmentに設定するために、Apacheの設定ファイルで設定を追加することができます。
以下にあるhttpd.confファイルを編集します。

/Applications/XAMPP/xamppfiles/etc/httpd.conf

以下の記述がある箇所を見つけて

<Directory "/Applications/XAMPP/xamppfiles/htdocs">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

以下の1行を追記します。

<Directory "/Applications/XAMPP/xamppfiles/htdocs">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    SetEnv APP_ENV development
</Directory>

これで、開発環境(XAMPP)ではAPP_ENV.env.developmentの方を読み込みます。

続いて、本番環境(本番サーバー)側の設定です。
APP_ENV.env.productionに設定するには、サーバーの環境設定や .bashrc、.htaccess などに設定を追加することができます。
本番環境のサーバーのweb公開用ディレクトリ(通常はwwwpublic_html)を確認し、.htaccessファイルに以下のように追記します(.htaccessファイルがない場合は作ります)。

SetEnv APP_ENV production

.htaccessを保存して、web公開用ディレクトリにアップロードします。

以上完了です。
.envファイルを書き換えせず、開発環境(XAMPP)と本番環境で、それぞれ動作を確認することができます。

補足

PHP初学者の僕が気になっていて放置していたポイントを整理しました。今後どなたかの参考になれば幸いです。

Discussion