
AIにプログラムを作ってもらっていると、画面に「このコマンドを実行していいですか?」と確認が何度も出ます。そのたびに答えるのが面倒で、つい「次から聞かないで」を押したくなります。
その気持ちはよくわかります。ところがこのボタンが、パスワードを世界中にさらしてしまう入り口になることがあります。2026年11月に、そんな調査結果が報告されました。
この記事では、何が起きるのか、どうすれば防げるのかを、むずかしい言葉をできるだけ使わずに説明します。対象は、AIに頼んでパソコン上でプログラムを作らせるツール「Claude Code」です。
▶ Lステップのお申し込みをお考えの方へ初期設定・全機能の解説動画を無料でプレゼント中受け取り方を見る →
2026年11月上旬、セキュリティ会社Apiiroが、公開されている設定ファイルに秘密情報が大量に残っていたと報告しました(The Hacker Newsの報道による)。
調べたのは、GitHub(プログラムを置いて共有するサイト)に公開されていたClaude Codeの設定ファイル104,185件です。そのうち1,122件(約1.1%)に、本物のパスワードやキーが入っていました。
過去の履歴や会話の記録まで含めると、秘密情報は合計2,539件、1,994のリポジトリ(プログラムの保管場所)で見つかっています。設定ファイルの内訳には、データベースのパスワード379件、サーバーへのログイン情報(SSH)43件、AWSのキー23件などがあります。
落ち着いて読んでほしい点が2つあります。
つまり「全員が危ない」のではなく、「うっかりすると誰にでも起こりうる」話です。
原因は、「次から聞かない」を選んだときの、ツールの動きにあります。
たとえるなら、こんな話です。宅配ボックスを暗証番号で開けたあと、次から楽をしたくて「確認は省略」というメモを作りました。ところが、そのメモに暗証番号まで書いてあり、うっかり掲示板に貼り出してしまった。
実際の流れは、次の4ステップです。
.claude/settings.local.json)に保存されるここで大切なのは、保存されるのが「コマンド」だという点です。設定ファイルにもともとあるパスワードを覚えるわけではありません。コマンドの中にパスワードが書かれていたとき、それがコマンドごと残ってしまいます。
Claude Codeは、このファイルがGitHubに上がらないようにする工夫もしています。ただ、その保護は自分のパソコンの中だけです。すでに上げたファイルや、別のパソコンに取り込んだフォルダには効きません。プロジェクトの .gitignore(上げないものを指定するリスト)にも、自動では追加されません。
確認画面には、1・2・3の選択肢が出ます。表示は環境やバージョンで多少違うことがありますが、意味は同じです。
| 選択肢 | 意味 | 保存されるもの |
|---|---|---|
| 1. Yes | 今回だけ許可する | 何も保存されない |
| 2. Yes, and don’t ask again | 次から確認なしで許可する | コマンドが、そのまま保存される |
| 3. No | 実行を断る | 何も保存されない |
NGの例 コマンドの中に、パスワードの値が見えています。この画面では、必ず「1. Yes」を選びます。
psql -h example.com -U user --password=MyS3cret!
(「MyS3cret!」はダミーのパスワードです)
OKの例 見えているのは、変数名(「$」で始まる名前)だけです。値は書かれていないので、「2」を選んでも、保存されるのは名前だけです。
curl -H "Authorization: Bearer $MY_API_KEY" "$MY_API_URL/..."
パスワードと関係のない普通のコマンド(ファイルの一覧を見る「ls」など)なら、「2」を選んでも問題ありません。迷ったら「1」にしておけば、安全です。
覚えることは、3つだけです。
① パスワードやキーの値を、コマンドに直接書かない。 代わりに「変数」を使います。変数とは、値につけた「名前」のことです。名前で呼べば、コマンドにも確認画面にも、見えるのは名前だけで、値は表に出ません。
AIに頼むときは、「パスワードやキーは、値を直接書かず、環境変数 $DB_PASSWORD のように名前で指定して」と伝えます。
値の登録は、Macなら次の手順です。ホーム直下の ~/.zshrc というファイルの末尾に、次の1行を足して、ターミナルを開き直します。
export DB_PASSWORD="your-value-here"
「your-value-here」の部分には、実際の値を入れます。~/.zshrc はプロジェクトの外にあるので、GitHubには上がりません。
② 確認画面で値が見えたら、「2」を選ばない。 迷ったら、1回だけの「1. Yes」にします。
③ 設定ファイルを、GitHubに上げない。 プロジェクトの .gitignore に、次の1行を足します。
.claude/settings.local.json
AIにGitHubへの保存(コミット)を任せたときも、要注意です。調べられた1,105のリポジトリのうち539件では、このファイルを変更したコミットに、Claudeが共同作成者として入っていました。
危ないファイルがすでにないかは、1分で確認できます。Macの「ターミナル」を開き、次のコマンドをコピーして実行します。
find ~ -path "*/.claude/settings.local.json" -not -path "*/node_modules/*" 2>/dev/null | while read f; do n=$(grep -ciE 'password|passwd|token|secret|api[_-]?key|bearer|authorization|AKIA|sk-|ghp_' "$f"); echo "$n $f"; done
表示されるのは、数字とファイルの場所だけです。パスワードの値は出ません。結果の見方は次のとおりです。
API_KEY」のような名前だけなら問題ありません。パスワードやキーの値そのものが入っていたら、その行を削除します。ファイルは「.claude」という隠しフォルダの中にあります。Finderでは、「Cmd + Shift + .」を押すと隠しフォルダが表示されます。
最優先は、パスワードやキーの「再発行(変更)」です。ファイルを消すだけでは足りません。GitHubには変更の履歴が残り、コピー(フォーク)にも残るからです。
次の順番で進めます。
3つ目は、次のコマンドでできます。ファイルを消すのではなく、「Gitで追いかけるのをやめる」という意味です。
git rm --cached .claude/settings.local.json
順番が大切な理由は、先にパスワードを変えてしまえば、履歴に古いパスワードが残っていても使えないからです。
覚えておくのは、次の3つです。
.claude/settings.local.json)を、GitHubに上げない「次から聞かない」ボタンそのものは、作業を楽にしてくれる便利な機能です。仕組みを知って、パスワードを直接書かない習慣をつければ、安心して使い続けられます。