CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-05-12中級

APIキーを誤って git commit してしまった時の緊急対応手順 — Claude Code を使った履歴削除とキーローテーション

.envファイルのAPIキーをgit commitしてしまった時の緊急対応手順。Claude Codeを使ったgit履歴からの完全削除、APIキーのローテーション、再発防止まで実践的に解説します。

troubleshooting61security9git16envapi-key2claude-code129emergency

「まずい、.env をそのまま commit してしまった」——気づいた瞬間、手が止まる経験をされた方は多いのではないでしょうか。

2014年から個人でアプリを開発し続けてきた私にとって、これは他人事ではありません。AdMob のキー、Stripe の本番キー、Anthropic の API キー。複数のサービスを組み合わせて動かす個人プロダクトでは、.env ファイルの管理が少しでも緩むと、一瞬で全ての認証情報が公開リポジトリに乗ってしまうリスクがあります。

ここではすでにコミットしてしまった後に取るべき手順を、時間順に整理してお伝えします。発覚から30分以内に全て完了できるよう、各ステップを具体的にまとめました。

最初の5分でやること — キーのローテーション

履歴の書き換えより先に、必ずこちらを済ませてください。git の歴史を消しても、コミットしていた間に誰かがキーをコピーしていた可能性はゼロではありません。

Anthropic API キーを漏洩した場合:

  1. console.anthropic.com にログイン
  2. 「API Keys」→ 該当キーを「Revoke」
  3. 新しいキーを発行してローカルの .env を更新

Google AdMob / Firebase キーを漏洩した場合:

  1. console.firebase.google.com → プロジェクト設定 → 「サービスアカウント」または「APIキー」
  2. 該当キーを無効化し、新しいキーを発行

Stripe キーを漏洩した場合:

  1. dashboard.stripe.com → Developers → API keys
  2. 本番キーは「Roll」(ローテーション)で即座に無効化できます

キーのローテーションが完了したら、次のステップに進みます。

被害範囲を確認する

コミット履歴を確認し、漏洩したキーがどのコミットに含まれているか把握します。

# APIキーが含まれているコミットを探す
git log --all --full-history -- .env
 
# 特定の文字列がいつから含まれているか確認
git log -S "sk-ant-" --all --oneline

リポジトリがすでにリモート(GitHub等)に push されている場合は、Settings → Secrets scanning → Alerts を確認してください。GitHub は自動的にAnthropic APIキーなどの形式を検出してアラートを出します(検出されている = すでにスキャンされた可能性がある)。

git 履歴から完全に削除する

方法1: git-filter-repo(推奨)

# git-filter-repo のインストール(pip または Homebrew)
pip install git-filter-repo --break-system-packages
# または
brew install git-filter-repo
 
# .env ファイルを履歴から完全削除
cd /path/to/your-repo
git filter-repo --path .env --invert-paths --force
 
# リモートに強制push
git remote add origin https://github.com/your-user/your-repo.git
git push origin --force --all
git push origin --force --tags

--invert-paths で「指定パス以外を残す」という意味になります。.env ファイルそのものが履歴から消え、過去の全コミットからも除去されます。

方法2: git filter-branch(古い環境向け)

git-filter-repo が使えない環境では、従来の filter-branch を使います。

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch .env" \
  --prune-empty --tag-name-filter cat -- --all
 
# リモートに強制push
git push origin --force --all

Claude Code に依頼する場合

Claude Code に頼む場合は、以下のように明示的に指示してください。

.envファイルをgit履歴から完全に削除してください。
git filter-repoを使い、--invert-pathsオプションで.envを除外します。
その後、リモートにforce pushしてください。
リポジトリのURLは https://github.com/your-user/your-repo.git です。

「コミット履歴が変わるので確認が必要」という形で途中で止まる場合があります。その時は「確認不要です、実行してください」と追加で伝えると進みます。

協力者への連絡(チームがいる場合)

git push --force は他の開発者の手元のブランチと履歴が食い違う原因になります。force push 後に全員が以下を実行する必要があります。

# チームメンバーが実行すること
git fetch origin
git reset --hard origin/main

一人で開発している場合は不要です。

.gitignore.env を追加する

履歴削除が完了したら、再発防止の設定を確認します。

# .gitignoreに.envが含まれているか確認
cat .gitignore | grep -E "^\.env$"
 
# 含まれていなければ追加
echo ".env" >> .gitignore
echo ".env.local" >> .gitignore
echo ".env.*.local" >> .gitignore
 
# .gitignoreをコミット
git add .gitignore
git commit -m "chore: add .env to gitignore"
git push origin main

すでに .gitignore.env を書いていたのに commit されてしまったという場合は、ファイルがすでに git の追跡対象になっていた可能性があります。その場合はキャッシュを削除します。

# gitのキャッシュから.envを除去(ファイル自体は残る)
git rm --cached .env
git commit -m "chore: remove .env from tracking"

GitHub のシークレットスキャンニングアラートを解除する

GitHub が自動検出してアラートを出している場合、履歴から削除してキーをローテーションした後で「Close alert」をクリックして対応済みにしてください。

Anthropic、AWS、GCP、Stripe、OpenAIなどの主要サービスのキー形式はパターンが登録されており、push した瞬間に検出されます。

私自身、壁紙アプリのバックエンドで使っていた Stripe のテストキーを誤ってコミットした時、GitHub からメールが来るより前に Stripe 側がキーの漏洩を検知してアラートを送ってきたことがあります。検知は本当に早いので、キーのローテーションは発覚後すぐが大切です。

再発防止のための仕組み

.env.example の運用

実際のキーが入った .env はリポジトリに含めず、キー名だけを書いた .env.example をコミットしておく方法が定番です。

# .env.example(コミットする)
ANTHROPIC_API_KEY=your_api_key_here
STRIPE_SECRET_KEY=your_stripe_key_here
ADMOB_APP_ID=your_admob_id_here
 
# .env(コミットしない)
ANTHROPIC_API_KEY=sk-ant-api03-xxxxx
STRIPE_SECRET_KEY=sk_live_xxxxx
ADMOB_APP_ID=ca-app-pub-xxxxx

pre-commit フックでチェックする

Claude Code の hooks 機能を使ったり、シンプルな git pre-commit フックを書いたりして、コミット前に検知できます。

# .git/hooks/pre-commit に書く(実行権限が必要: chmod +x)
#!/bin/bash
if git diff --cached --name-only | grep -q "^\.env$"; then
  echo "❌ .envファイルがコミットに含まれています。git rm --cached .envを実行してください。"
  exit 1
fi

このフックがあれば、誤って git add .env をしてしまった時にコミット時点で止められます。

Claude Code に CLAUDE.md で伝える

プロジェクトの CLAUDE.md に以下を明記しておくと、Claude Code が .env を扱う際に適切に判断してくれます。

## セキュリティ上の注意
- `.env` ファイルは絶対に git に追加しないこと
- API キーやシークレットは環境変数またはシークレット管理ツール経由で渡すこと
- `git add .` でステージングする前に、`.env` が含まれていないことを確認する

発覚した直後は焦りますが、キーのローテーション → 履歴の削除 → .gitignore 設定という順で進めれば、ほとんどの場合は手戻りなく対処できます。

まず最初に取るべき行動は「キーをローテーションすること」です。履歴の書き換えはその次で構いません。焦って git 操作を先にしてしまうと、その間も古いキーが有効なままになります。

同じ失敗を経験した方の参考になれば幸いです。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Claude Code2026-06-10
git add -A が .bak バックアップまで巻き込む — in-place 修正スクリプトと自動コミットの落とし穴
sed -i や自作の --fix スクリプトが残す .bak バックアップを git add -A が無言で取り込み、本番リポジトリに混入させてしまう問題。なぜ気づきにくいのか、scoped add と .gitignore でどう塞ぐかを実例で整理します。
Claude Code2026-06-03
Claude Code で git push が「成功」したのに反映されない — commit が無音で失敗する罠
git push がエラーを出さず Everything up-to-date と表示されるのに、変更がリモートに反映されない。clone 直後の identity 未設定で commit が無音失敗する原因と、SHA 照合で確実に検証する方法を解説します。
Claude Code2026-06-01
Claude Code から git push すると 403 Write access to repository not granted が出るときの対処
Claude Code の自動化で GitHub に push すると 403『Write access to repository not granted』が出る原因を、classic PAT と fine-grained PAT の違いから整理し、リポジトリアクセス・Contents 権限・組織承認の確認手順を解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →