.envファイルを開発環境と本番環境で自動で切り替える(PHP)
はじめに
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公開用ディレクトリ(通常はwww
やpublic_html
)を確認し、.htaccess
ファイルに以下のように追記します(.htaccess
ファイルがない場合は作ります)。
SetEnv APP_ENV production
.htaccess
を保存して、web公開用ディレクトリにアップロードします。
以上完了です。
.env
ファイルを書き換えせず、開発環境(XAMPP)と本番環境で、それぞれ動作を確認することができます。
補足
PHP初学者の僕が気になっていて放置していたポイントを整理しました。今後どなたかの参考になれば幸いです。
Discussion