環境変数とシークレット
あなたのコードはAPIキー、データベースURL、トークンを必要とします。これらは絶対にリポジトリにコミットしてはいけません。シークレットがいったんgit履歴に入ると、事実上永遠に公開されたものになります。後のコミットでその行を消しても履歴からは消えませんし、ボットは新しい公開リポジトリを数分以内に漁って漏れた鍵を探します。2つのルールが大いに助けてくれます。
- シークレットはローカルでは
.envファイルに保管し、.envが.gitignoreに入っていることを確認する。 - 本番用には、同じ値をホストのダッシュボード(またはCLI経由)で環境変数として設定する。
# .env (ローカル専用 — 絶対にコミットしないこと)
DATABASE_URL=postgres://localhost:5432/app
STRIPE_SECRET_KEY=sk_test_xxx
SESSION_SECRET=change-me
# ホスト側で本番の同等物を設定する
wrangler secret put STRIPE_SECRET_KEY
vercel env add STRIPE_SECRET_KEY production
すべての変数の名前(値ではない)を列挙した .env.example をコミットしておきましょう。そうすれば未来の自分とAIの両方が、アプリが何を期待しているかを知れます。上の sk_test_ という接頭辞に注目してください。テスト用キーと本番用キーをはっきり区別できるようにし、本番用キーをチャットに貼りかねないローカルの .env には決して置かないこと。もしチャットにシークレットを貼ったり、誤ってコミットしたりしたら、漏洩したものとして扱い、即座にローテーションしましょう。プロバイダーのダッシュボードで新しい鍵を生成し、あらゆる場所で更新し、古い鍵を無効化します。ローテーションには5分かかりますが、漏れたデータベースURLはデータベースの中身すべてを失わせかねません。