発端:GitHub侵入事件の報道
2026年5月18日にGitHub関連のサプライチェーン攻撃報道が出た。npm経由・拡張機能経由で悪意あるコードが入り込んでいた、という筋の話だ。
ニュースを流し読みしていて手が止まった。手元のVS Codeは拡張機能を自動更新する設定のままだ。もし自分が入れている拡張のどれかが乗っ取られて悪意あるバージョンを配信されたら、自分は何もせずに迎え入れることになる。
Claude Codeに最初に投げた一言はシンプルだった。
「VS Codeの拡張機能の自動更新を一括でオフにしたい」
返ってきたのは settings.json をいじる方法だった。extensions.autoUpdate と extensions.autoCheckUpdates を false にすれば、自動更新も更新チェックも止まる。
直感:「自動更新オン=今は危険なのでは」
ここで一拍置いた。普段なら「自動更新オン=最新のセキュリティパッチが入る=安全」というのが定石のはずだ。なのに今は逆の感覚が来ている。
「自動更新オン=悪い拡張が自動で入ってくるリスクの方が今は怖い」
自分の直感はそう告げていた。これが正しいのか、ただの被害妄想なのか。Claude Codeに裏取りを頼んだ。
報道と最近のサプライチェーン攻撃事例を当たってもらった結果、直感の方が現実に近かった。乗っ取られた拡張のアップデートが配信された瞬間に全ユーザーが即時感染する、というのが今回の手口の核だ。脆弱性パッチを待つよりも、悪意ある更新を踏まないことの方が、現時点では優先度が高い。
自動更新は止める、という判断で運用に入った。月一くらいで手動アップデートに切り替える。
ローカルチェック:settings.json と拡張一覧
「設定を変えました」で終わらせると意味がない。今この瞬間の自分のローカルが汚染されていないかも確認したい。
Claude Codeに settings.json を覗いてもらった。秘密値が漏れていないか、知らない設定が混ざっていないか。結果はクリーンで、APIキーの直書きもなければ、見覚えのないリモート参照もなかった。
次にインストール済みのVS Code拡張を一覧化してスキャンしてもらった。「軽微な注意」レベルの拡張が3つ引っかかった。
- 個人開発者で更新が止まっている拡張
- 似た名前の本物と紛らわしい命名の拡張
- 必要な権限以上を要求している拡張
3つとも、たまにしか使っていない or 代替がある類のものだった。
「3つとも消して」
VS Code CLI から code --uninstall-extension {ID} を3連発で打ってもらって即時削除。
ここで自分から追加質問を投げた。
「拡張機能の表示タイトル何?」
ID(パブリッシャー.拡張名)だけ並べられても直感的に分からない。表示名・パブリッシャー・用途を表にして返してもらって、ようやく「ああ、あれか」と腑に落ちた。
Chrome拡張も棚卸し:53拡張からスタート
VS Codeを片付けたら次はChromeだ。Chromeの方が拡張機能経由のリスクは大きい。常時起動していて、銀行も会計ソフトも開いている。
複数のChromeプロファイルを横断して、アクティブな拡張機能を全部スキャンしてもらった。総数53。
良い兆候もあった。サイドロード(Chrome Web Store外から手動で入れた拡張)はゼロ。全てWeb Store公式配信経由だった。少なくとも「素性の知れない拡張を野良で入れていた」という最悪の事態ではない。
ただ、53は多すぎる。Claude Codeに「使ってない or 第三者製で広い権限」のものを優先度付きでリストアップしてもらった。7つピックアップされた。
Chrome CLIで削除できない罠
「じゃあVS Codeと同じくCLIで7つ消して」と頼んだら、ここで詰まった。
Chromeは CLI からの拡張削除をサポートしていない。拡張フォルダを直接削除しても、Chrome同期で次回起動時に復活する。同期が無効でも、拡張設定DBに残骸が残って挙動が怪しくなる。
Claude Codeの提案は、chrome://extensions/?id={拡張ID} という個別の削除ページURLをワンクリックで開く動線を出すことだった。コマンド一発でURLリストが出てきて、自分はそれをポチポチ開いて削除ボタンを押すだけ。半自動だが現実的に一番早い。
想定の5つどころか22個削減
ここで自分のスイッチが入った。提示された7つだけでなく、自分の判断で「これ最近開いてないな」「これ別の拡張で代替できるな」というのも巻き込んで消し始めた。
ポチポチを終えて、もう一度Claude Codeに再スキャンを頼んだ。
結果:53 → 31拡張(22個削減)
想定の5つどころではない数字になった。ニュース1本きっかけで、ずっと放置していた拡張機能のレイヤーが一気に薄くなった。
Vimiumは戻す、Power Automateは要らない
整理が終わって数時間後、ブラウザを使っていて手が止まった。Vimiumを消したのを忘れていて、いつものキーバインドでスクロールしようとして反応しなかった。
「Vimium戻したい。あとPower Automateは要らない」
この依頼をClaude Codeに並列で投げた。
- Vimiumの Chrome Web Store インストールページを開く
- Power Automate の削除ページを開く
両方が同時にChromeに開いて、自分はクリックするだけ。一度引いた線を、必要なものだけ戻す、という運用に落ち着いた。
学び:直感の言語化をAIに頼める時代
今回の流れを振り返ると、自分の役割と Claude Code の役割がきれいに分かれていた。
- 自分:「自動更新オン=今は危険なのでは」という違和感を拾った
- Claude Code:その直感を報道調査・設定変更・拡張棚卸し・削除動線提示で裏取り&実行した
普段のセキュリティ運用だと、「なんとなく危ない気がする」で終わりがちな違和感を、AIに裏取りさせて事実に落とせるようになった。設定変更も拡張棚卸しも、本来なら腰が重い作業だ。それを「ニュースを見た日のうちに」終えられた。
税理士・会計士の業務に置き換えるとこうなる。クライアントの会計データを開く側のブラウザに、よくわからない拡張機能が入っていないか、半年に一度くらいは見直したい。サイドロード拡張ゼロを確認するだけでも、内部統制上の説明力が上がる。
残課題
- VS Code拡張は月1で手動アップデート(カレンダーに登録した)
- Chrome拡張のリストを月1で再スキャン(53に戻らないように)
- サイドロード拡張がゼロのままか、四半期で確認する