環境変数(シークレット)
Environment Variables (Secrets)
APIキーやパスワードなどの機密データをコードの外部に保存し、安全に管理する仕組みです。
環境変数(シークレット)とは?
環境変数は、コードに直接書かずに、実行時にアプリケーションに渡される設定値です。シークレット(機密情報)として使う場合は、APIキーやパスワード、データベース認証情報をコードの外に保管します。 例えば、API_KEY = "abc123" とコードに書く代わりに、環境変数 API_KEY を参照する方法です。
ひとことで言うと: 家の鍵を玄関に貼り付けるのではなく、別の安全な場所に保管して、必要な人だけが取りに行く、という管理方法をコードに応用したものです。
ポイントまとめ:
- 何をするものか: APIキーやパスワードをコードの外部に保存・管理。
- なぜ必要か: GitHubなどにシークレットを誤ってアップロードするのを防止。
- 誰が使うか: すべての開発者、特にクラウド/インフラを扱う人。
なぜ重要か
開発者が誤ってAPIキーをコードに含めてGitHubにコミットしてしまうことがあります。するとハッカーはそのキーを発見して悪用でき、データが盗まれたり、攻撃者がサービスを使って料金が発生したりします。環境変数を使えば、コード内にシークレットが存在せず、安全です。
また、開発環境・テスト環境・本番環境で異なるAPIキーを使い分ける必要があります。環境変数なら、同じコードで環境ごとに異なるキーを自動的に適用できます。
仕組みをわかりやすく解説
環境変数の使い方は3ステップです。
ステップ1:設定ファイルまたはシステムに値を保存
ローカル開発では .env ファイルに OPENAI_API_KEY=sk-abc123 と記述します。本番環境ではAWS Secrets ManagerやAzure Key Vaultなどの専門ツールに保管します。
ステップ2:コードから参照
Node.jsなら process.env.OPENAI_API_KEY で参照でき、Pythonなら os.getenv('OPENAI_API_KEY') です。
ステップ3:アプリケーション起動時に自動注入 アプリケーション起動時に環境変数が読み込まれ、コードに渡されます。
実際の活用シーン
API統合 - OpenAI、Stripe、Google Cloudなどの外部サービスを使う時、APIキーを環境変数に保管。
データベース接続 - ユーザー名、パスワード、ホストをコードに書かず環境変数で管理。
機能フラグ - 特定機能をオン/オフするしきい値を環境変数で制御。
メリットと注意点
セキュリティ向上が最大メリット - シークレットがコードベースに含まれないため、漏洩リスクが大幅に減少。
環境ごとの設定管理が容易 - 同じコードで複数環境に対応。
一方、.env ファイルも安全に管理する必要 - ローカルで .gitignore に追加しないと、やはり漏洩します。
複雑な構造に弱い - 階層的な設定には不向きで、設定ファイル(YAML、JSON)の方が向く場合も。
関連用語
- シークレット管理 — 環境変数の拡張概念で、自動ローテーション機能など。
- クラウドセキュリティ — シークレット管理はクラウド環境の重要なセキュリティ対策。
- CI/CDパイプライン — デプロイ時に環境変数を自動注入。
- APIキー — 環境変数で管理される典型的なシークレット。
- YAML設定 — 複雑な設定管理に使用される形式。
よくある質問
Q: ローカル開発で .env ファイルをGitにコミットしてもいいですか?
A: いいえ。絶対に .gitignore に追加してコミットを避けてください。テンプレート .env.example を作成し、チームメンバーが値を埋める方法がおすすめ。
Q: 本番環境での環境変数管理はどうしますか? A: AWS Secrets Manager、Azure Key Vault、HashiCorp Vaultなど、エンタープライズ向けツールを使用。暗号化、監査ログ、自動ローテーション機能があります。
Q: 環境変数の値はいつ変更されますか? A: アプリケーション起動時に読み込まれるので、起動後に環境変数を変更しても反映されません。新しい値を使うにはアプリケーションを再起動する必要があります。