
環境変数の管理とセキュリティ|.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-branchやgit 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点を実践するだけで、多くのセキュリティリスクを防ぐことができます。


