環境変数の管理とセキュリティ|.envファイルの正しい使い方
開発

環境変数の管理とセキュリティ|.envファイルの正しい使い方

環境変数と.envファイルの正しい管理方法を解説。APIキー・パスワードの安全な取り扱い、.gitignoreへの追加、シークレット管理のベストプラクティスを紹介します。

「GitHubにAPIキーをコミットしてしまった」という事故は、開発者なら一度は耳にしたことがあるでしょう。環境変数の適切な管理はセキュリティの基本であり、プロジェクトを安全に保つための重要なスキルです。

環境変数とは何か

環境変数とは、プログラムが実行される環境(OS・サーバー)に設定される名前と値のペアです。アプリケーションのコードから参照することで、コードを変更せずに動作を設定できます。

環境変数で管理すべき情報

  • APIキー(外部サービスとの認証)
  • データベース接続文字列・パスワード
  • サードパーティサービスのシークレット
  • 本番・ステージング・開発の環境切り替えフラグ
  • ポート番号・ホスト名などの設定値

なぜコードに直接書いてはいけないのか

コードにシークレット情報を直接記述すると、Gitリポジトリにコミットした際に誰でも閲覧できるようになります(プライベートリポジトリでも、アクセス権のある全員が見られます)。GitHubには定期的なシークレットスキャン機能があり、誤ってコミットされたAPIキーを自動検出して通知する仕組みがあります。

環境変数チェッカーブラウザと環境情報確認

.envファイルの使い方

基本的な書き方

# データベース設定
DATABASE_URL=postgresql://user:password@localhost:5432/mydb

# APIキー
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
STRIPE_SECRET_KEY=sk_live_xxxxxxxx

# アプリケーション設定
NODE_ENV=development
PORT=3000
NEXT_PUBLIC_SITE_URL=https://example.com
  • #から始まる行はコメント
  • 値にスペースが含まれる場合はクォートで囲む
  • 大文字・アンダースコアで変数名を定義するのが慣例

ファイルの使い分け

ファイル名用途
.env全環境共通の基本設定(シークレット以外)
.env.local個人のローカル設定(Gitに含めない)
.env.development開発環境設定
.env.production本番環境設定
.env.exampleチームで共有する設定のテンプレート(実際の値は含めない)

.gitignoreへの追加(必須)

# .gitignore
.env
.env.local
.env.*.local

.env.exampleはGitに含めて、チームメンバーがどの変数を設定すべきかを共有します。

環境変数チェッカーブラウザと環境情報確認

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

1. シークレットの最小権限原則

APIキーは必要最小限の権限のみ付与します。読み取りだけで済む処理に書き込み権限のキーを使わない、特定のIPアドレスからのみ使用可能に制限する、といった設定を行いましょう。

2. APIキーのローテーション

長期間同じキーを使い続けるのは危険です。定期的(3〜6ヶ月ごと)にキーを再発行・ローテーションする運用が推奨されます。本番環境とテスト環境では別々のキーを使用します。

3. クライアントサイドへの機密情報露出を避ける

Next.jsなどのフレームワークでは、NEXT_PUBLIC_プレフィックスの変数はブラウザに公開されます。APIキーや秘密情報にNEXT_PUBLIC_を付けてはいけません。

4. 本番環境のシークレット管理

本番環境では.envファイルではなく、クラウドのシークレット管理サービスを使用することを推奨します:

  • AWS Secrets Manager / AWS Parameter Store
  • Google Cloud Secret Manager
  • HashiCorp Vault
  • Vercel Environment Variables(Vercelデプロイの場合)

5. シークレットのログ出力を禁止する

デバッグ時にうかがってconsole.log(process.env)を実行するとすべての環境変数がログに残ります。環境変数をログに出力する際は、値の一部をマスク(例:最初の4文字のみ表示)してから出力します。

よくある質問

Q: GitHubにAPIキーをコミットしてしまった場合、どうすればいいですか? A: **まず今すぐキーを無効化(Revoke)**してください。Gitの履歴からの削除(git filter-branchgit filter-repo)は必要ですが、誰かがすでにキーをコピーした可能性があるため、削除よりも無効化が最優先です。その後、新しいキーを発行し直してください。

Q: .envファイルを開発者間で共有する方法は? A: .env.exampleファイルをGitで管理し、実際の値は安全なチャンネル(パスワードマネージャー・1Password・Bitwarden・Notion(セキュア)など)で共有するのが一般的です。Slack/メールでの平文共有は避けましょう。

Q: Node.js以外の環境でも.envファイルは使えますか? A: はい。Pythonではpython-dotenv、Ruby/Railsではdotenv-rails、Javaではdotenv-javaなど、各言語・フレームワーク向けのライブラリが存在します。コンテナ環境(Docker)ではenv_fileオプションや--env-fileフラグで読み込み可能です。

まとめ

環境変数の管理はセキュリティの基本中の基本です。「.envを.gitignoreに追加する」「.env.exampleでチームと共有する」「本番環境はクラウドのシークレット管理サービスを使う」の3点を実践するだけで、多くのセキュリティリスクを防ぐことができます。

関連記事