API キーやパスワードをコードに書かないのはなぜですか

コードに書いた秘密はリポジトリの履歴に残って広がる、と答える問い。環境変数などに分けて置くこと、漏れたら無効にして作り直すことまで話します。

こう聞かれます

  • 「API キーやパスワードをコードに書かないのはなぜですか」
  • 「外部の API のキーは、アプリのどこに置いていますか」
  • 「キーを GitHub に上げてしまったら、どうしますか」

面接官が見ている点

  • 一度コミットした物は、消しても履歴に残ると分かっているか
  • 秘密をコードと分けて置く方法を、自分の作った物で話せるか
  • 漏れたときに、まずキーを無効にする順番を言えるか

短い答え

  • コードに書いた秘密は、リポジトリを見られる人全員に渡り、あとで消しても Git の履歴に残るからです。
  • 秘密は環境変数や、サーバーの秘密を置く仕組みに分けて置き、コードはそこから読むだけにします。
  • 漏れたときは、まずそのキーを無効にして新しく作り直し、そのあとで履歴の掃除や影響の確かめをします。

少し詳しい答え

なぜコードに書かないか

  • 履歴に残る Git は過去のコミットを全部持っています。最新のコードから消しても、前のコミットを見れば読めます
  • 広がる公開のリポジトリなら誰でも読めます。非公開でも、手元の写しや、貸した相手のパソコンに広がります
  • 環境ごとに変えられない開発と本番で違うキーを使うには、コードの外に置く必要があります

どこに置くか

手元の開発では、秘密を .env のようなファイルに書いて環境変数として読み、そのファイルを .gitignore に入れてコミットしないようにします。本番では、使っているサービスの秘密を置く仕組みに入れます。キーの権限は要る操作だけに絞ります。

ブラウザで動く JavaScript に入れた値は、利用者が誰でも読めます。秘密のキーはブラウザに渡さず、サーバーの側で使います。

漏れたら

  1. そのキーを無効にし、新しいキーを作って差し替えます
  2. 漏れていた間に使われていないかを、サービスの記録で確かめます
  3. 必要なら履歴からも消します。ただし、すでに写しを取られていれば消えないので、1 番が先です

作った物と結ぶなら、たとえば「天気のアプリで、外部の API のキーを .env に置いて .gitignore に入れ、ブラウザからはサーバーの API を通して呼ぶ形にした」のように話します。

よくある間違い

  • 「最新のコードから消したので大丈夫」と言う過去のコミットに残っています。キーを無効にして作り直します
  • 「非公開のリポジトリだから書いてよい」と言う見られる人が増えたり、写しが広がったりします。秘密はコードと分けます
  • 「環境変数にすればブラウザに入れてもよい」と言う 作るときにブラウザ向けの JavaScript に埋め込まれれば、誰でも読めます

深掘りの問い

  • 「コミットする前に秘密に気づくには」コミットの前に秘密らしい文字を調べる道具や、GitHub の秘密を見つける仕組みを使う、と答えます
  • 「開発と本番でキーを分けるのはなぜですか」開発のキーが漏れても本番に届かないようにし、それぞれの権限を絞れるから、と答えます
  • 「チームで秘密を渡すには」チャットに貼らず、チームで使う秘密の置き場や、権限を分けられる仕組みを使う、と答えます

確認日 2026年10月23日

技術面接問題の一覧へ戻る