環境変数の管理
アプリケーションの設定値(APIキー、シークレットなど)を管理する方法を説明します。環境変数の管理には、CI/CDで管理する方法とAzure Portalで直接更新する方法の2つがあります。
2つの管理方法
方法1: CI/CDで環境変数を管理する(推奨)
環境変数ファイル(.env.dev, .env.prod)を暗号化してGitに保存し、GitHub Actionsで自動的にAzureに反映する方法です。
メリット:
- ✅ 変更履歴がGitで管理される
- ✅ チームで共有しやすい
- ✅ 自動的にAzureに反映される
- ✅ 暗号化されて安全
デメリット:
- 暗号化・復号化の手順が必要
方法2: Azure Portalで直接更新する
infra.config.ymlのdotenv_pathをコメントアウトし、Azure Portalで直接環境変数を更新する方法です。
メリット:
- ✅ 簡単に更新できる
- ✅ すぐに反映される
デメリット:
- ❌ 変更履歴が残らない
- ❌ チームで共有しにくい
- ❌ 手動で更新する必要がある
方法1: CI/CDで環境変数を管理する
手順1: 環境変数ファイルを作成
infra.config.ymlで指定されているファイルを作成します。
dev:
frontend:
dotenv_path: .env.dev # ← このファイルを作成
ファイルを作成:
# 開発環境用
cat > .env.dev << 'EOF'
# 外部サービスAPIキー
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
STRIPE_API_KEY=sk_test_xxxxxxxxxxxxx
# アプリケーション秘密鍵
NEXTAUTH_SECRET=your-development-secret-here
JWT_SECRET=your-jwt-secret-here
# 公開設定(ブラウザに公開される)
NEXT_PUBLIC_APP_NAME=My App (Dev)
NEXT_PUBLIC_APP_VERSION=1.0.0
EOF
# 本番環境用
cat > .env.prod << 'EOF'
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
STRIPE_API_KEY=sk_live_xxxxxxxxxxxxx
NEXTAUTH_SECRET=your-production-secret-here
NEXT_PUBLIC_APP_NAME=My App
EOF
⚠️ 注意:
- Terraformが提供する環境変数(
DATABASE_URL,MYSQL_*,BACKEND_URLなど)は記載不要です localhostや127.0.0.1を含むURLは設定しないでください
手順2: 環境変数を暗号化
環境変数ファイルを暗号化します。
# GX_SHARED_PRIVATE_KEYを設定(インフラチームから提供されたキー)
export GX_SHARED_PRIVATE_KEY="your-private-key-hex-string"
# 暗号化
infra env encrypt .env.dev
infra env encrypt .env.prod
# 成功メッセージ
✅ Successfully encrypted .env.dev
✅ Successfully encrypted .env.prod
暗号化前後の比較:
暗号化前(平文):
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
NEXTAUTH_SECRET=your-secret-here
暗号化後:
OPENAI_API_KEY="encrypted:BF8kSJ9X2mP..."
NEXTAUTH_SECRET="encrypted:7Hn3pL4vR2..."
手順3: Gitにコミット
暗号化されたファイルをGitにコミットします。
# ファイルを追加
git add .env.dev .env.prod
# コミット
git commit -m "Add encrypted environment variables"
# プッシュ
git push
⚠️ 重要: 必ず暗号化してからコミットしてください。平文の環境変数をコミットしないように注意!
手順4: GitHub ActionsでAzureに反映
環境変数をAzureに反映します。
- GitHubリポジトリのActionsタブを開く
- 「Infra: Environment Apply / 環境変数更新 (DEV)」を選択
- Run workflowをクリック
- パラメータを設定:
dry_run:false(実際に適用)services: 空白(全サービス)またはfrontend,backend
- Run workflowをクリック
通常1-3分で完了します。
環境変数を更新する場合
既存の環境変数を変更する場合:
# 1. 復号化
infra env decrypt .env.dev
# 2. 編集(お好みのエディタで)
vim .env.dev
# または
code .env.dev
# 3. 再暗号化(必ず実行!)
infra env encrypt .env.dev
# 4. Gitにコミット
git add .env.dev
git commit -m "Update OPENAI_API_KEY"
git push
# 5. GitHub Actionsで適用
# → 「Infra: Environment Apply / 環境変数更新 (DEV)」を実行
方法2: Azure Portalで直接更新する
手順1: dotenv_pathをコメントアウト
infra.config.ymlのdotenv_pathをコメントアウトします。
dev:
frontend:
target: container_apps
resource_group: rg-myapp-dev
container_app_name: ca-myapp-frontend-dev
# dotenv_path: .env.dev # ← コメントアウト
registry:
# ...
手順2: Azure Portalで環境変数を更新
-
Azure Portalを開く
- https://portal.azure.com にアクセス
-
Container Appを開く
- リソースグループ(例:
rg-myapp-dev)を選択 - Container App(例:
ca-myapp-frontend-dev)を選択
- リソースグループ(例:
-
環境変数を設定
- 左メニューから「設定」→「環境変数」を選択
- 「+ 追加」をクリック
- 環境変数名と値を入力
- 「保存」をクリック
-
変更を適用
- 「確認」をクリック
- 新しいリビジョンが作成され、環境変数が反映されます
環境変数を更新する場合
Azure Portalで直接編集します:
- Container Appの環境変数ページを開く
- 編集したい環境変数を選択
- 値を変更
- 保存
変更はすぐに反映されます。
どちらを選ぶべきか
CI/CDで管理する方法を選ぶ場合
以下の場合に推奨します:
- ✅ チームで開発している
- ✅ 変更履歴を残したい
- ✅ 環境変数の変更をGitで管理したい
- ✅ 自動的にAzureに反映したい
Azure Portalで直接更新する方法を選ぶ場合
以下の場合に推奨します:
- ✅ 個人で開発している
- ✅ 頻繁に環境変数を変更する
- ✅ すぐに反映したい
- ✅ 一時的な設定変更
よくある質問
Q1: Terraformが提供する環境変数はどこで管理されますか?
A: Terraformが自動的に提供する環境変数(DATABASE_URL, MYSQL_*, BACKEND_URLなど)は、どちらの方法でも管理できません。これらはインフラチームがTerraformで管理しています。
Q2: 環境変数ファイルに何を書けばいいですか?
A: アプリケーション固有の環境変数のみを記載してください:
✅ 記載すべき:
- 外部サービスのAPIキー(
OPENAI_API_KEY,STRIPE_API_KEYなど) - アプリケーションの秘密鍵(
NEXTAUTH_SECRET,JWT_SECRETなど) - 公開設定(
NEXT_PUBLIC_*で始まる環境変数)
❌ 記載してはいけない:
- Terraform提供の環境変数(
DATABASE_URL,MYSQL_*,BACKEND_URLなど) localhostや127.0.0.1を含むURL
Q3: ローカル開発ではどうすればいいですか?
A: ローカル開発用の環境変数ファイル(.env.local)を作成し、.gitignoreに追加してください:
# .env.local を作成(Gitにコミットしない)
cat > .env.local << 'EOF'
OPENAI_API_KEY=sk-xxxxxxxxxxxxx
NEXTAUTH_SECRET=local-dev-secret
DATABASE_URL=mysql://root@localhost:3306/myapp_dev
EOF
# .gitignoreに追加
echo ".env.local" >> .gitignore
Q4: NEXT_PUBLIC_で始まる環境変数は暗号化すべきですか?
A: はい、暗号化してください。ただし、これらの環境変数はビルド時にブラウザに公開されるため、機密情報を含めないでください。
# ✅ OK: 公開情報
NEXT_PUBLIC_APP_NAME=My App
NEXT_PUBLIC_API_URL=https://api.example.com
# ❌ NG: 機密情報をNEXT_PUBLIC_に含めない
NEXT_PUBLIC_DATABASE_PASSWORD=secret # ブラウザに公開される!
Q5: 暗号化キー(GX_SHARED_PRIVATE_KEY)はどこで取得できますか?
A: インフラチームから提供されます。設定方法:
# 一時的に設定
export GX_SHARED_PRIVATE_KEY="your-private-key-hex-string"
# 永続的に設定(.zshrc または .bashrc に追加)
echo 'export GX_SHARED_PRIVATE_KEY="your-private-key-hex-string"' >> ~/.zshrc
source ~/.zshrc
Q6: 環境変数が反映されない場合はどうすればいいですか?
A: 以下を確認してください:
-
ファイルが暗号化されているか
cat .env.dev
# "encrypted:" が表示されるか確認 -
GitHub Actionsが成功しているか
- Actionsタブでワークフローの実行結果を確認
-
Terraform提供の環境変数を上書きしようとしていないか
- Terraform提供の環境変数は上書きできません
.env.*ファイルから該当行を削除
セキュリティのベストプラクティス
✅ 推奨
-
必ず暗号化してからコミット(CI/CDで管理する場合)
infra env encrypt .env.dev
git add .env.dev -
GX_SHARED_PRIVATE_KEYを安全に管理
- ローカル環境変数として設定
- 決してコミットしない
-
NEXT_PUBLIC_に機密情報を含めない
# ❌ NG
NEXT_PUBLIC_API_SECRET=secret
# ✅ OK
API_SECRET=secret
❌ 避けるべき
-
平文の環境変数をコミット
# ❌ 絶対にやらない
git add .env.dev # 暗号化していない状態 -
GX_SHARED_PRIVATE_KEYをコミット
# ❌ 絶対にやらない
git add .env
# GX_SHARED_PRIVATE_KEY=xxx
関連ドキュメント
- リファレンス: Terraform提供の環境変数 - Terraformが提供する環境変数の一覧