メインコンテンツまでスキップ

環境変数の管理

アプリケーションの設定値(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.ymldotenv_pathをコメントアウトし、Azure Portalで直接環境変数を更新する方法です。

メリット:

  • ✅ 簡単に更新できる
  • ✅ すぐに反映される

デメリット:

  • ❌ 変更履歴が残らない
  • ❌ チームで共有しにくい
  • ❌ 手動で更新する必要がある

方法1: CI/CDで環境変数を管理する

手順1: 環境変数ファイルを作成

infra.config.ymlで指定されているファイルを作成します。

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など)は記載不要です
  • localhost127.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に反映します。

  1. GitHubリポジトリのActionsタブを開く
  2. 「Infra: Environment Apply / 環境変数更新 (DEV)」を選択
  3. Run workflowをクリック
  4. パラメータを設定:
    • dry_run: false(実際に適用)
    • services: 空白(全サービス)または frontend,backend
  5. 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.ymldotenv_pathをコメントアウトします。

infra.config.yml
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で環境変数を更新

  1. Azure Portalを開く

  2. Container Appを開く

    • リソースグループ(例: rg-myapp-dev)を選択
    • Container App(例: ca-myapp-frontend-dev)を選択
  3. 環境変数を設定

    • 左メニューから「設定」→「環境変数」を選択
    • + 追加」をクリック
    • 環境変数名と値を入力
    • 保存」をクリック
  4. 変更を適用

    • 確認」をクリック
    • 新しいリビジョンが作成され、環境変数が反映されます

環境変数を更新する場合

Azure Portalで直接編集します:

  1. Container Appの環境変数ページを開く
  2. 編集したい環境変数を選択
  3. 値を変更
  4. 保存

変更はすぐに反映されます。

どちらを選ぶべきか

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など)
  • localhost127.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: 以下を確認してください:

  1. ファイルが暗号化されているか

    cat .env.dev
    # "encrypted:" が表示されるか確認
  2. GitHub Actionsが成功しているか

    • Actionsタブでワークフローの実行結果を確認
  3. Terraform提供の環境変数を上書きしようとしていないか

    • Terraform提供の環境変数は上書きできません
    • .env.*ファイルから該当行を削除

セキュリティのベストプラクティス

✅ 推奨

  1. 必ず暗号化してからコミット(CI/CDで管理する場合)

    infra env encrypt .env.dev
    git add .env.dev
  2. GX_SHARED_PRIVATE_KEYを安全に管理

    • ローカル環境変数として設定
    • 決してコミットしない
  3. NEXT_PUBLIC_に機密情報を含めない

    # ❌ NG
    NEXT_PUBLIC_API_SECRET=secret

    # ✅ OK
    API_SECRET=secret

❌ 避けるべき

  1. 平文の環境変数をコミット

    # ❌ 絶対にやらない
    git add .env.dev # 暗号化していない状態
  2. GX_SHARED_PRIVATE_KEYをコミット

    # ❌ 絶対にやらない
    git add .env
    # GX_SHARED_PRIVATE_KEY=xxx

関連ドキュメント