.env ファイルとシークレットファイルの Git での無視
API キーやシークレットを保護するための .env ファイルの安全な git 無視方法。.env.local、.env.production、フレームワーク固有の環境ファイル処理を解説します。
Pattern
詳細な説明
環境ファイルは .gitignore で最もセキュリティ上重要なパターンの1つです。データベース認証情報や API キーを含む .env ファイルを1つコミットしただけで、特に公開リポジトリではデータ漏洩につながる可能性があります。
.env ファイルとは何か?
.env の規約(dotenv ライブラリで普及)は、キーと値のペアとして設定を保存します:
DATABASE_URL=postgres://user:password@host:5432/db
STRIPE_SECRET_KEY=sk_live_abc123
JWT_SECRET=my-super-secret-key
これらのファイルは実行時に process.env にロードされます。コードの変更なしに、異なる環境(開発、ステージング、本番)で異なる設定を使用できます。
推奨される無視パターン:
.env
.env.local
.env.*.local
.env.development.local
.env.production.local
コミットすべきものと無視すべきもの:
多くのフレームワーク(Next.js、CRA、Vite、Laravel)は env ファイルの階層構造をサポートしています。一般的な規約:
- コミットする
.env.example— すべての必要な変数名を含むがプレースホルダー値のテンプレート。実際のシークレットを公開せずに、アプリが必要とする環境変数を文書化します。 - コミットする
.env.development— 機密性のない開発用デフォルト値(例:API_URL=http://localhost:3000)。 - 無視する
.env.local— ローカルテスト用の実際の API キーを含む可能性がある個人的なオーバーライド。 - 無視する
.env.production— 本番シークレットはホスティングプラットフォームの環境変数設定から取得すべきであり、コミットされたファイルからではありません。
誤ってシークレットをコミットした場合の対処:
- 直ちに漏洩した認証情報をローテーションします(新しい API キー、新しいデータベースパスワード)。
- ファイルを削除します:
git rm --cached .env .gitignoreに追加してコミットします。- 削除後も古いコミットでアクセス可能なため、
git filter-branchや BFG Repo-Cleaner を使って git 履歴からシークレットを削除することを検討してください。
予防策: git-secrets や、コミット前に API キーに似たパターンをスキャンする pre-commit フックなどのツールを使用しましょう。
ユースケース
スタートアップが公開 GitHub リポジトリで AWS 認証情報が露出していることを発見し、将来のシークレット漏洩を防ぐために適切な .env 処理を設定する必要があります。