【.env】環境に応じて読み込む.envを変更する
こんにちは、フリーランスエンジニアの太田雅昭です。
.envの読み込み
.envは環境に応じて値を変更する際などに使用します。Next.jsでは自動でやってくれたりもしますが、development,,test,productionにしか対応しておらず、stagingには使えなかったりします。このあたりどういう議論がされているのか、まだ読めていないのですが、ともかくそういう方向性だそうです。
そこでNext.jsのみならず何にでも使える、.envの読み分けを実装したいと思います。
仕様
以下のような感じで使えるのを目指します。
APP_ENV=staging sh ../../load-env.sh pnpm run dev
上記の場合、../../.env.stagingと../../.envを読み込みます。もちろん、.env.staging優先です。このように、別ディレクトリにあるスクリプトを読み込めば、好きな環境での.envを読み込めるようにします。
コード
以下のようになりました。ChatGPT大先生は、枯れた技術にはとても心強いです。
load-env.sh
# 許可された環境のリスト
ALLOWED_ENVS=("development" "staging" "production")
# スクリプトのディレクトリを取得
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# APP_ENVのセキュリティチェック
if [[ -z "${APP_ENV}" ]]; then
echo "Error: APP_ENV is not set."
exit 1
fi
# APP_ENVが許可された値かどうかを確認
if [[ ! " ${ALLOWED_ENVS[@]} " =~ " ${APP_ENV} " ]]; then
echo "Error: APP_ENV '${APP_ENV}' is not allowed."
exit 1
fi
# .env.${APP_ENV}から環境変数を読み込む
set -a # 自動エクスポートを有効化
source "${SCRIPT_DIR}/.env"
source "${SCRIPT_DIR}/.env.${APP_ENV}"
set +a # 自動エクスポートを無効化
# 渡されたコマンドを実行
exec "$@"