環境変数でシークレットを守る
API キーやパスワードをコードから追い出す
⏱ 想定 ~7 分
01 · 読む
会社に何百万ドルもの損害を出すミス: API キーやパスワードをソースに直接コミットすること 。
シークレットが git の履歴に入ると、永遠にそこに残ります。次のコミットで消しても、リポジトリをクローンした人なら誰でも履歴から見つけられます。 GitHub をスキャンしてうっかりコミットされたキーを探し、数分で悪用するボットが動いています。
解決はシンプル: 環境変数 です。シークレットをコードに書く代わりに、絶対にコミットしない .env ファイルに保存します。プログラムは実行時に値を読み、シークレットは安全に保たれます。
💡 想像してみてください環境変数はオフィスの金庫だと思ってください。パスワードをモニタに貼ったりしません(それがコードへの直書き)。金庫( .env ファイル)に入れて、必要なときに取り出します。当然、金庫の中身をコピーしてみんなに配ったりしません( git にコミット)。
02 · 読む
深刻な問題を抱えた Node.js app を引き継ぎました: シークレットがソースにハードコード されています。まず見つけて、それから設定を直してシークレットを安全に保管しましょう。
03 · ターミナル演習
まずコードの中のハードコードされたシークレットを探します。 grep で API キーやパスワードらしき文字列を探しましょう。
(このセクションはインタラクティブです — JavaScript を有効にしてください。)
04 · ターミナル演習
次に .env ファイルを作って安全にシークレットを保管します。このファイルに実際の値を置き、絶対に git にコミットされないようにします。
(このセクションはインタラクティブです — JavaScript を有効にしてください。)
05 · ターミナル演習
もっとも重要なステップ: .env を .gitignore に追加 して、絶対にコミットされないようにします。これをしないと git add . で次のコミットにシークレットが入ってしまいます。
(このセクションはインタラクティブです — JavaScript を有効にしてください。)
06 · コード例
修正後の app.js はこんな見た目になります。値をハードコードする代わりに、 .env を読み込んだあと process.env から取得します。
app.js —— 環境変数を使用(修正後)
require('dotenv').config();
const express = require('express');
const app = express();
// Secrets come from .env, not hardcoded
const API_KEY = process.env.API_KEY;
const DB_PASSWORD = process.env.DB_PASSWORD;
const PORT = process.env.PORT || 3000;
console.log('API key loaded:', API_KEY ? 'Yes' : 'No');
// NEVER log the actual key value!
process.env は dotenv が読み込んだ .env から取得します。 || 3000 は PORT が設定されていないときの既定値で、 .env がなくても app が動くようにする定番パターンです。
07 · クイズ
次のうち 絶対に git にコミットすべきでないものは?
- package.json
- API キー入りの .env
- index.html
- README.md
08 · 空欄補充
Node.js で dotenv を使うとき、 API_KEY という環境変数には process._____.API_KEY でアクセスします。
09 · チェックリスト
環境変数の安全チェックリスト。この 3 つはどのプロジェクトでも体に染み込ませましょう。
- .env が .gitignore に入っている
- 実際のシークレット値を絶対にログ出力しない
- プレースホルダ値の .env.example を作った
⚠ 全機能のインタラクティブ体験には JavaScript が必要です。JavaScript を有効にして再読み込みしてください。
※ このサイトは独立した教育プロジェクトで、Anthropic の公式製品ではありません。Claude™ は Anthropic, PBC の商標です。