Claude Code の許可確認で「Yes, and don’t ask again」を選ぶと、承認したコマンドが設定ファイルに保存され、コマンドに含めたパスワードなどの秘密情報もそのまま残る——Apiiro がこう報告し、公開 GitHub 上の .claude/settings.local.json のうち 1,122 ファイルに実在の秘密情報(キーの形式や接続先から判定したもので、有効かどうかは確かめていない)があったとしています。Apiiro の記事は 11 月上旬に公開され、11 月 8 日に追記されました。
これに対し、Anthropic の Claude Code チームの Boris Cherny 氏(Apiiro は Claude Code の責任者と紹介)が、2026 年 11 月 7 日(日本時間 8 日朝)に Hacker News のコメントで、防ぐために何ができるかを検討していると答えています。Claude Code を使う開発者は、自分のリポジトリと PC のファイルを一度見ておきたい話です。
結論を先に書くと、やっておきたいことは次の 3 つです。
- 自分の GitHub で
.claude/settings.local.jsonと.claude/settings.jsonを探し、削除済みでも git の履歴を確かめる - 見つかったら、まずそのファイルが持っていた資格情報をすべて変更(ローテーション)し、片付けはその後にする
- コマンドに秘密情報を直接打たず、使っているシークレット管理の仕組みから
$VARの形で参照する
何が起きた?「don’t ask again」で秘密情報が残る仕組み
公式ドキュメント(Claude Code Docs: Settings、Permissions)によると、Bash コマンドの許可確認で「Yes, and don’t ask again」を選ぶと、その承認は allow ルールとして .claude/settings.local.json に保存されます。git リポジトリの中では、リポジトリのルートにあるこのファイルが使われます(git リポジトリの外や Windows など、一部の場合は別の場所に保存されます)。
Apiiro の調査によると、保存されるルールは承認したコマンドの文字列そのものです。たとえば PGPASSWORD= の後ろにパスワードを書いたコマンドを承認すると、パスワードごとファイルに残ります。Apiiro は、これはモデルではなく Claude Code 自体の動作で、Opus 5.5 と Fable 5.1 でも再現したとしています。
たとえるなら、レシピのメモに金庫の暗証番号まで書き写して、そのノートをみんなで回し読みするようなもの。メモ自体は便利でも、書いた中身が問題になります。
公開 GitHub で見つかった秘密情報の数(Apiiro 調査)
Apiiro は 2026 年 11 月 1〜3 日に、読み取り専用の GitHub のコード・コミット検索でデータを集めました。主な数字は次のとおりです。
| 項目 | Apiiro の数字 |
|---|---|
公開 GitHub 上の .claude/settings.local.json |
104,185 件(103,617 リポジトリ) |
| うち実在の秘密情報を含むファイル | 1,122 件(1.1%) |
| 異なる秘密情報の数 | 1,379 件(プロバイダー形式のキー 636、公開ホスト向けのパスワード/トークン 743) |
| 内訳の一部 | データベースのパスワード 379、Supabase の service-role キー 122、Supabase アカウントトークン 103、公開サーバーへの SSH ログイン 43、GitHub・GitLab・npm のトークン 42、AWS キー 23、秘密鍵 6 |
履歴・共有用 settings.json・会話記録まで含めた数 |
異なる実在の秘密情報 2,539 件・1,994 リポジトリ |
ここでいう「実在の秘密情報」は、有効だと確かめたものではなく、既知のキーの形式に一致するか、公開ホストを指しているものです。Apiiro は資格情報を使ったりテストしたりはしていません。ただし、通知を受けた 1 組織は、キーが有効だったと確認したそうです。秘密情報の大半は個人の開発者のもので、影響を受けた組織は 63 だとしています。
ほかにも、次のような数字が出ています。
- 消しても残る: ファイルの過去の版には、今のどのコピーにも無い秘密情報が 734 件(509 リポジトリ)。フォーク 211 件(74 リポジトリ)にも同じ秘密情報が残っていた
- スキャナーの見逃し: Apiiro が 2 つのシークレットスキャナーを使ったところ、秘密情報を含む 1,122 ファイルのうち、一方のスキャナーが検出したのは 564、TruffleHog は 643、どちらも検出しなかったのが 215。Apiiro は、見逃しの多くは
PGPASSWORD=、sshpass -p、mysql -pの後ろなど、コマンドの中のパスワードだとしています - Claude 自身のコミット: 秘密情報があったと追跡した 1,105 リポジトリのうち 539 件では、Claude を共同著者とするコミットがこのファイルを変更していた
なぜ git に入ったのか、双方の主張
ここは Apiiro と Anthropic 側で説明が分かれています。
| 立場 | 主張 |
|---|---|
| 公式ドキュメント | Claude Code は、まだ除外されていない git リポジトリでこのファイルを初めて書くとき、どの階層の .claude/settings.local.json にも当てはまる除外の行を、ユーザーのグローバルな git 除外ファイルに追加する。手で作った場合は、自分で .gitignore に追加するよう書かれている |
| Apiiro | グローバルな除外は一般的なケースはカバーするが、後から git リポジトリになったフォルダ、別の PC での clone、すでにコミット済みのファイルはカバーしない。リポジトリ自身の .gitignore には追加されない |
| Cherny 氏 | settings.local.json はローカルに置くファイルで、ソース管理に入れるものではない。Claude が作るときは自動で gitignore するので、今回のファイルは手で作られてコミットされたものだ、という見方 |
どちらの説明が今回の 1,122 ファイルに当てはまるのかは、双方の主張として受け止めておくのがよさそうです。どちらの場合でも、公開リポジトリにコミットされたファイルは誰でも読めるので、自分のリポジトリを確かめる価値は変わりません。
なお Apiiro によると、この仕組みは 2025 年 8 月から GitHub の issue(#5544 など 4 件)で報告されていましたが、Anthropic からの返信はなく、3 件は inactive または duplicate として自動でクローズされたとしています。
Anthropic 側の対応と、秘密情報スキャンの勧め
Cherny 氏は Hacker News のコメントで、これまで Claude Code は秘密情報の除去(secret scrubbing)をしてこなかったが、防ぐために何ができるかを検討していると述べました。あわせて、許可ルールより auto mode を使うほうが安全だとして auto mode を勧め、どのエージェントを使う場合でも、GitHub などが提供するシークレットスキャンを有効にしておくべきだとしています。
続くコメントでは、auto mode でこれを検出できるようにする、基本的なシークレットスキャンを組み込む、といった案を挙げ、何かを出荷する前にいくつか試作してトレードオフを確かめると述べています。修正版の提供時期やバージョンは公表されていません。
Apiiro の調査は、Hacker News にも投稿されています。
秘密情報を守るためにやっておきたいこと
Apiiro が勧める確認手順は次の 3 つです。
- 公開されていないか: GitHub の組織で
.claude/settings.local.jsonと.claude/settings.jsonを検索する - 一度でもコミットしたか: 今は消えていても、各リポジトリの git 履歴にこのファイルがないか確かめる
- 中身は何か: 自分の PC にあるこのファイルの allow リストを読み、パスワード・トークン・キー・接続文字列がないか見る
見つかったら、Apiiro の言葉どおり「まずローテーション、片付けは後」です。ファイルを消しても、履歴やフォーク、clone には残るためです。
開発者向けには、次の 5 つが挙げられています。
| やること | 内容 |
|---|---|
| 追跡を外す | リポジトリで追跡されていれば、下のコマンドで外し、リポジトリ自身の .gitignore に追加する |
| 資格情報を変える | ファイルが一度でも持っていた資格情報を、すべてローテーションする |
| ルールを消す | コミットしていなくても、ファイルを開いて秘密情報を含むルールを削除する |
| 直接打たない | コマンドに秘密情報を直接書かず、$VAR の形で参照する |
| パターンで承認 | 個別のコマンドではなく、Bash(npm run:*) のようなパターンで承認する |
追跡を外すコマンドは次のとおりです。
git rm --cached .claude/settings.local.json
このコマンドは git の追跡を外すだけで、過去のコミットに残った秘密情報は消えません。先に資格情報を変えておくのが順番です。ほかの技術の話は、技術ネタの記事一覧からどうぞ。
まとめ
- Apiiro によると、「Yes, and don’t ask again」で承認したコマンドは文字列のまま
.claude/settings.local.jsonに保存され、コマンド内の秘密情報も残る - 公開 GitHub 上では 104,185 件のうち 1,122 件に、Apiiro のいう実在の秘密情報(有効性は確かめていない)があった
- git に入った理由は、Apiiro(グローバル除外がカバーしないケースがある)と Cherny 氏(手で作られてコミットされたものという見方)で主張が分かれている
- Anthropic 側は防止策を検討中で、修正版の時期・バージョンは公表されていない
- まずは自分のリポジトリと PC のファイルを確かめ、見つかったら資格情報の変更を先に
2026 年 11 月 9 日時点の情報です。
参考:
- Claude Code Docs: Settings
- Claude Code Docs: Permissions
- Hacker News: Boris Cherny 氏のコメント
- Hacker News: Apiiro の調査の投稿
ITもごはんも、腹八分目が長続きのコツ!


コメント