Claude Code の /doctor が別物になっていた ― 自分の環境が「草むしり検定」にかけられる
こんにちは。ちいかわが好きなエンジニアです。(※本記事は『ちいかわ』の非公式ファンコンテンツです。詳しい注記は末尾に置きました。)
ちいかわの世界には草むしり検定という資格があります。合格すると草むしりができるエリアが広がって、報酬が増える。ちいかわは5級を目指して3回目でようやく受かりました(ちなみにうさぎは2級です。強い)。
この検定、何を問われるか作中の描写から推測すると、単に「草を引っこ抜く」だけではなく、植物の鑑別や現場でのリスク管理に関する専門知識が問われる試験です。
つまり草むしり検定は、「たくさんむしれる人」を認定する試験ではなく、「これは抜いていい/これは絶対に抜くな」を見分けられる人を認定する試験なんですね。
……なぜこの話から入ったかというと、Claude Code の /doctor が、まったく同じことをしてきたからです。
1. /doctor は、私が知っているものではなくなっていた
/doctor、以前から知っている方も多いと思います。インストールがおかしくなったときに打つコマンドです。バージョンとインストール方法と PATH を見て、変なところがあれば教えてくれる、あの読み取り専用の診断画面。
それが変わっていました。公式ドキュメントのコマンド一覧(Anthropic「Claude Code commands reference」https://code.claude.com/docs/en/commands 2026年9月6日参照)を見ると、/doctor には Skill の印がついています。
Skill. Run a setup checkup that diagnoses issues and can fix them. Checks installation health, including duplicate or leftover installs,
PATHproblems, and unparseable settings files. Finds unused skills, MCP servers, and plugins versus their context cost, flags slow hooks, and checks for a newer version on your release channel. …(スキル。 問題を診断し、修正もできるセットアップ検査を実行します。重複・残骸インストール、
PATHの問題、パースできない設定ファイルを含むインストールの健全性を確認します。未使用のスキル・MCP サーバー・プラグインを、そのコンテキストコストと対比して洗い出し、遅いフックを指摘し、リリースチャンネル上の新バージョンを確認します。/和訳・強調は筆者)
説明はこのあと CLAUDE.md の重複排除や、コードベースから導ける内容を削る trim、常時読み込みのガイダンスをスキルやネストした CLAUDE.md へ移行させる話まで続きます。さらに、auto モードを既定にすることや、よく拒否している読み取り専用コマンドの事前承認まで提案してくると書かれています(今回の私の環境では出ませんでしたが、これは後半で注意点として回収します)。
そして、同じ行(同上)の末尾にこう書いてあります。
Before v2.1.205,
/doctoropened a read-only diagnostics screen and pressingfsent the report to Claude(v2.1.205 より前の
/doctorは読み取り専用の診断画面を開き、fを押すとレポートが Claude に送られました/和訳は筆者)
私が知っていたのは、この「前」の方でした。壊れているかどうかを見るコマンドが、散らかっているかどうかを見るコマンドになっている。
(スキル版になったのは v2.1.205 から、CLAUDE.md の trim チェックが入ったのは v2.1.206 からです。それ以前のバージョンで打つと、昔の読み取り専用画面が出ます。)
というわけで、打ってみます。

(/checkup という別名でも呼べます。あと、ターミナルから claude doctor と打つ方は今も読み取り専用のままで、セッションを開かずに診断だけ出ます。)
2. まず、読み取り専用で全部見て回る
(以降、引用ブロックのうち出所を明記していないものは、すべて筆者の環境での /doctor の出力です。)
/doctor と打つと、いきなり直しにはきません。

/doctorを実行します。まず読み取り専用で全チェックを走らせます。
which -a claude でインストールの重複を見て、readlink -f で実体を辿り、設定ファイルを1つずつパースしていく。この段階では何も書き換えません。
検定でいえば、実技の前に草を並べているところです。並べ終わるまでは、誰も何もむしっていない。
この「まず全部見る、直すのはあとで聞いてから」という順番が、実は今回いちばん効いていた設計でした。理由は後半で回収します。
3. 計量される
しばらく待つと、結果が出ます。

サマリはこうでした。
設定はおおむね健全です。インストール・バージョン・権限モードはすべて正常で、直す必要のあるものはありません。片付ける価値があるのは MCP サーバー(外部ツールへの接続)3つ — 過去30日・30セッション一度も呼ばれておらず、うち1つは接続自体が壊れています。加えて、グローバル
CLAUDE.mdに1ブロック、常時読み込まれているのに自動生成のスキル一覧と重複している箇所があります。どちらも後から元に戻せます。
そして下に詳細表が続きます。ここが本題です。
| コンポーネント | 種別 | 累計利用(インストール以降) | 期間内の利用 | 常駐トークン(概算) | 判定 |
|---|---|---|---|---|---|
| context7 | MCP サーバー | n/a(カウンタなし) | ✅ 17回 | deferred (0) | 維持 |
| gcloud | MCP サーバー | n/a(カウンタなし) | ❌ 0回 | deferred (0) | 無効化推奨 |
| gcp-observability | MCP サーバー | n/a(カウンタなし) | ❌ 0回 | deferred (0) | 無効化推奨 |
| google-dev-knowledge | MCP サーバー | n/a(カウンタなし) | ❌ 0回(接続失敗) | deferred (0) | 無効化推奨 |
| Google Drive / Gmail / Calendar | claude.ai コネクタ | n/a | Drive のみ3回 | deferred (0) | 対象外(claude.ai 側管理) |
| python-project-layout | スキル | 0 | ❌ | ~106 | 維持(該当プロジェクト稼働中・低コスト) |
| gcp-network-vpcsc | スキル | 0 | ❌ | ~98 | 維持(tech/vpc-sc 稼働中) |
| azure-network-design | スキル | 0 | ❌ | ~90 | 維持 |
(スコープ列など、一部の列は省略しています。)
自分の環境が、1件ずつ判定欄をつけられている。
ここで先に、この表の性格をはっきりさせておきます。/doctor はバンドルスキル、つまり中身は Claude に渡されるプロンプトです。専用の計測機構が回っているわけではありません。表の見出しは「常駐トークン**(概算)」ですし、MCP サーバーの行は累計利用が全部「n/a(カウンタなし)」と正直に書いてあります。17回 や 0回 は、Claude がログを読んで数えた推定値**です(スキルの方は 0 と数字が入っているので、こちらは別の根拠がありそうです)。
なので MCP の「0回」を機械の計測結果として鵜呑みにするのは危険です。月に一度しか使わないサーバーは、30日の窓の切り方ひとつで 0 回になります。判定はあくまで議論の叩き台として読むのが正しい。
そのうえで面白いのは、❌ が付いているのに「維持」になっているものがあることです。python-project-layout も gcp-network-vpcsc も期間内の利用は0。でも「該当プロジェクトが稼働中」「常駐コストが100トークン前後と安い」という理由で、残す側に振られている。
使っていない=抜く、ではない。 これはまさに「絶対にむしっちゃいけない草」の判別です。量ではなく、どれを抜いてどれを残すかを見ている。
(なお claude.ai コネクタの「対象外」は /doctor の守備範囲の話で、Claude Code から触れないという意味ではありません。/mcp のパネルからプロジェクト単位で切れますし、disableClaudeAiConnectors を使えば Claude Code が取りにいくコネクタをまとめて止められます。)
もうひとつ、常駐トークン の欄です。MCP サーバーは全部 deferred (0) になっています。これは tool search が効いていて、ツール定義が呼ばれるまでロードされない状態を指します。ただし公式ドキュメントの言い方は "minimal impact" であって、ゼロではありません。
Only tool names and server instructions load at session start
(セッション開始時にロードされるのは、ツール名とサーバーの instructions だけです/和訳は筆者。Anthropic「Connect Claude Code to tools via MCP」https://code.claude.com/docs/en/mcp 2026年9月6日参照)
ツール名とサーバー instructions は起動時に載ります。 instructions は1サーバーあたり最大 2KB(超えた分は切り詰められます)なので1つ1つは軽いのですが、饒舌なサーバーを10も20も並べれば普通に効いてきます。「MCP はいくつ入れてもタダ」ではありません。
さらに注意が要るのは、この deferred 表示自体が環境依存だということです。社内プロキシなどで ANTHROPIC_BASE_URL を非 first-party なホストに向けている場合や、一部のホスティング環境、ENABLE_TOOL_SEARCH=false の場合などは、MCP のツール定義が起動時に全部ロードされます。その環境では、未使用サーバーを切ることは普通にトークン削減になります。つまりこの記事の結論は、読者の環境によっては逆向きになる。自分がどちらなのかは、ENABLE_TOOL_SEARCH の設定値と、/context に出る MCP tools の内訳の大きさで見当がつきます。
では、deferred (0) の私の環境で、それでも「無効化推奨」が付いているのはなぜか。次の章にその答えがありました。
4. 提案には、理由が付いてくる

チェック0 — セットアップ健全性: 問題なし
native インストール(
~/.local/bin/claude→2.1.263)、PATH 通過済み、npm の残骸なし、installMethod: nativeと一致。設定ファイル5点すべて JSON パース OK。エージェント定義2件(tech-reviewer/legal-reviewer)・スキル9件の frontmatter すべて正常、名前衝突なし。
昔の /doctor がやっていたのは、このチェック0だけです。今はこれが「3つあるうちの最初の1つ」に格下げされています。
npm の残骸なし が地味に効きます。native インストールへ移行したあとに npm 側の claude が残っていると、which -a に別々のパスが2つ出てきて、意図しない方が起動する事故が起きます。
ちなみに今回の which -a claude は、同じパスが2行出ていました(PATH に同じディレクトリが重複して入っている状態)。実体は1つなので実害はありませんが、こういうものも読み取り専用のまま拾い上げてくれます。
チェック1 — 未使用の MCP サーバー3件
ここに、さっきの疑問への答えが書いてありました。
30日間で一度も呼ばれていません。MCP ツールは遅延読み込み(deferred)なのでコンテキストは消費していません — トークン削減目的ではなく、接続・認証・更新の維持対象を減らすための整理です。
この一文がとても良かった。
「使っていないものは消しましょう、軽くなります」と言われたら、私は反射的に「別に重くないが?」と返すタイプの人間です。実際コンテキストは0なので、その反論は正しい。でも /doctor の主張はそこではなかったわけです。
置いてあるだけの MCP サーバーにも、認証の期限は切れるし、接続先の URL は変わるし、バージョンは上がる。実際、google-dev-knowledge は今まさに壊れていました。
/mcp disable google-dev-knowledge— このサーバーは今セッションでも接続に失敗しています(ENDPOINT_NOT_FOUND: 設定 URL にエンドポイントが存在しない)
壊れているのに30日間気づかなかった。 一度も呼んでいないから当然です。使わないものは、静かに壊れる。
そして、戻し方とスコープまで書いてあります。
いずれも
~/.claude.jsonの本プロジェクト項目のdisabledMcpServersに記録され、/mcp enable <名前>で戻せます。この無効化は blog プロジェクト限定です(/mcp disableはプロジェクト単位)。他プロジェクトでも切りたい場合は、そちらでも同じコマンドが必要です。
「他のプロジェクトには影響しません」ではなく「他でも切りたいなら、そっちでも打ってください」と書いてあるのが正確で助かります。
チェック2 — CLAUDE.md の重複
~/.claude/CLAUDE.mdとblog/CLAUDE.mdの間に重複・矛盾はありません。ただし1点、グローバルファイル 105〜115行目のこのブロックは、セッション開始時に自動挿入されるスキル一覧(より詳しい説明つき)と内容が重複しています
(余談ですが、この行番号はレポート内で「105〜115行目」と「区切り線含む104〜115行目」の2通りに揺れていました。実際に削られたのは区切り線を含む12行です。細かい話ですが、レポートの数字をそのまま信じずに差分で確認する癖はつけておいた方がよさそうです。)
これは完全に私の負けです。グローバルの CLAUDE.md の末尾に「スタック別の規約(スキルとして遅延読み込み)」という見出しで、持っているスキルの一覧と一行説明を自分で書いていました。
ところが Claude Code は、セッション開始時に利用可能なスキルの一覧を自動で入れてくれます。しかも私の手書きより詳しい説明つきで。つまり私は、毎セッション、同じ情報を2回読ませていたわけです。
自分で書いた親切が、そのまま無駄になっていた。 これを人間が自力で見つけるのはほぼ無理です。自動挿入される側の中身を、普段は見ないので。
5. 「何も変更しない」が、ちゃんとある
提案が出たあと、確認が入ります。

- すべて整理する(推奨)
- 個別に選ぶ — MCP サーバーの無効化と CLAUDE.md の整理を、それぞれ実行するか選ぶ
- 何も変更しない — 現状のまま維持します。レポートだけ残ります
- Other
3つ目が用意されているのが良いところです。検査だけ受けて帰れる。 健康診断で結果票だけもらって、生活は何も変えずに帰る、あれができる。
選択肢の説明文も具体的でした。
30日間まったく使われていない MCP サーバー3つ(うち1つは接続が壊れています)を、このプロジェクトで無効化します。あわせて、グローバル CLAUDE.md から自動生成のスキル一覧と重複している1ブロックを削除し、毎セッション約175トークンを節約します。どちらも後から元に戻せます(無効化は
/mcp enable、削除箇所はレポートに全文引用済み)。
「削除箇所はレポートに全文引用済み」。消す前に、消すものを画面に残してある。 私は「すべて整理する」を選びました。
ただし、ここは環境によって選択肢の中身が変わります。 前述のとおり /doctor はauto モードを既定にすることや、よく拒否している読み取り専用コマンドの事前承認まで提案してくることがあります。今回の私の環境では出ませんでしたが、これは設定ファイル1つの掃除より影響が大きい。権限に関わる項目が並んでいたら、反射で「すべて整理する(推奨)」を押さずに「個別に選ぶ」で中身を見てください。
6. そして、事故が報告される

変更は2件でした。
~/.claude.json(レポート上は 58,643 → 58,804 バイト)—disabledMcpServersに3件追加~/.claude/CLAUDE.md(7,448 → 6,805 バイト、115行 → 103行)— 重複ブロックを削除
(1 のバイト数は参考程度に見てください。~/.claude.json は起動回数などの無関係なキーも常時書き変わるので、差分がそのまま追加内容のサイズになるわけではありません。)
それぞれに「元に戻すには」が付いています。1 は /mcp enable <名前>、2 は「上のレポートに全文を引用してあります」。
……で、その下です。
「途中で起きたこと」
jq --argsの引数解釈を誤り、一度~/.claude.jsonを 0 バイトにしてしまいました。事前に取っていたバックアップから即座に完全復元し、書き方を修正したうえで適用しています。現在のファイルは JSON として正常で、installMethodなどの既存キーも保持されていることを確認済みです(mcpServersの定義自体は消していません — 無効化フラグを足しただけです)。
58KB の設定ファイルを、0 バイトにしている。
~/.claude.json は、プロジェクトごとの設定も MCP サーバーの定義も入っている、いわば全財産です。それが一瞬、空になった。
むしっちゃいけない草を、むしっています。
ただ、ここで効いてくるのが事前にバックアップを取ってから触っていたことです。ゼロになったことを検知して、その場で戻して、書き方を直して、やり直している。そして——黙っていない。
私は正直、この報告を読んだときに一瞬ヒヤッとして、次の瞬間に「これを書いてくるのか」と感心しました。だって、書かなくてもバレなかったんですよ。結果として設定ファイルは正常で、内容も期待どおりなので、私は最後まで気づかない。それでも「途中で起きたこと」という見出しを立てて報告してくる。
インシデント対応として、これは正しい形をしています。復旧したかどうかと、事故があったかどうかは別の報告事項です。「直したので問題ありません」で済ませないのは、人間のエンジニアでもできない人がいます。
そして2章の末尾で保留にした話に戻ります。まず読み取り専用で全部見て、直すのは確認を取ってから、という順番。もし検査と修正が混ざっていて、検査の途中でこの事故が起きていたら、何を見て何を直したのかが分からなくなっていました。壊す可能性のある操作を、全部あとに寄せてあるから、事故が起きても「適用フェーズの中の出来事」として切り分けられる。
注意: .bak は消える場所にある
もうひとつ、見落とすと痛い一文がありました。
バックアップも
…/CLAUDE.md.bakにあります(セッション用の一時領域なので、恒久的に残したい場合は別の場所へコピーしてください)
.bak があるから安心、ではありません。レポート自身が「セッション用の一時領域」と言っている場所です。今回は削除内容がレポートに全文引用されているので実害はありませんが、.bak を頼りにするつもりなら、その場でどこかへコピーしておく必要があります。
そもそも**.bak が必ず作られるという保証もありません**。0 バイトになった ~/.claude.json の方については、レポートに「事前に取っていたバックアップ」とあるだけで、どこに置かれたかは書かれていませんでした。頼るなら、自分で取ったものを頼るべきです。
最後に、こう書かれていました。
変更を反映するには Claude Code の再起動が必要です。
はい。
7. 何に効いて、何に注意するか
効く場面
-
半年くらい継ぎ足しで使ってきた環境。私がまさにこれでした。MCP を試しに入れて、そのまま忘れる。CLAUDE.md に思いつきを足して、そのまま忘れる。忘れたことを一覧にしてくれる相手が要ります
-
壊れているのに気づいていないもの。
google-dev-knowledgeの接続失敗は、使っていないから誰も気づかない類の故障でした -
CLAUDE.md が育ちすぎたとき。自動で入る情報と手書きが重複していないかは、人間の目では見つけにくい
-
環境を他人に説明するとき。判定つきの一覧が出るので、「うちのセットアップはこうです」の資料がそのまま出てきます
-
スキルだけ棚卸ししたいときは、
/skill-doctorという軽い別コマンドもあります(v2.1.252 以降)。スキルのコンテキストコストと利用頻度に絞って見てくれます
注意しておくこと
- 実行前に、自分でバックアップを取る。今回 0 バイト事故から救ったのはツール側が取っていたバックアップですが、それが常に取られる保証はありません。
cp ~/.claude.json ~/.claude.json.manual-bakとcp ~/.claude/CLAUDE.md ~/.claude/CLAUDE.md.manual-bakを先に打っておくだけで、話がだいぶ変わります - 書き込みが走る。読み取り専用は最初のフェーズだけで、「整理する」を選んだ先では実際に設定ファイルが書き換わります。不安なら「何も変更しない」でレポートだけ受け取って、自分の手で直せます
- 権限に関わる提案が混ざることがある。auto モードの既定化や、拒否したコマンドの事前承認が並んでいたら「個別に選ぶ」で判断すること
- 無効化はプロジェクト単位。全プロジェクトで切れたと思わないこと
.bakは一時領域。残したいなら自分でコピー- 判定は提案であって命令ではない。しかも MCP の回数は Claude がログから数えた概算です。「無効化推奨」が付いていても、来月使う予定があるなら残していい。今回もスクリーンショットに写っている範囲だけで、❌ が付いたまま「維持」になったスキルが3つありました
まとめ
| 項目 | 内容 |
|---|---|
| 正体 | バンドルスキル(/checkup でも可)。スキル版は v2.1.205 以降、CLAUDE.md の trim は v2.1.206 以降 |
| 流れ | 読み取り専用で全チェック → サマリ + 詳細表 → 提案 → 確認 → 適用 |
| 見るもの | インストール健全性、未使用の MCP / スキル / プラグイン、遅いフック、CLAUDE.md の重複と trim、常時読み込みガイダンスのスキルへの移行、新バージョン、auto モードや事前承認の提案 |
| 判定基準 | 利用回数と常駐トークンの対比。ただし MCP の回数はログからの概算で、使っていなくても安ければ「維持」 |
| 元に戻す | /mcp enable <名前> / レポートに全文引用された削除箇所 / .bak(一時領域) |
| ターミナル版 | claude doctor は読み取り専用のまま |
/doctor という名前から想像するのは「壊れたときに呼ぶもの」ですが、実際に来たのは健康診断と大掃除を同時にやる人でした。壊れていない状態でこそ、打つ価値があります。
そして今回の収穫は、「使っていない=要らない」ではないと機械の側から言われたことでした。0回でも残すものがあり、0回だから壊れていることに気づけないものがある。むしっていい草と、むしっちゃいけない草を見分けるというのは、たぶんそういう作業です。
ちいかわは草むしり検定に3回目で受かりました。私の環境は今回1回で「おおむね健全」と言われたので、そこは素直に喜んでおきます。……検査した本人が、途中で私の設定ファイルを0バイトにしていた件を除けば。
*(※本記事は2026年9月時点の Claude Code v2.1.263 での挙動に基づく個人の利用体験であり、Anthropic 社とは関係ありません。/doctor の挙動や出力内容は環境・バージョンによって異なります。設定ファイルを書き換える操作を含むため、実行前にご自身でバックアップを取ることをおすすめします。**本記事の内容に従った操作によって生じたいかなる損害についても、筆者は責任を負いかねます。*掲載したスクリーンショットは筆者の作業環境のもので、パス等の個人情報にあたる箇所はマスクしています。Claude、Claude Code は Anthropic PBC の商標です。その他記載の製品名・サービス名は各社の商標または登録商標です。)
(※『ちいかわ』への言及部分について。本記事は非公式のファンコンテンツであり、『ちいかわ』に関する権利は権利者に帰属します。当サイトは権利者・関係各社とは一切関係ありません。本記事では作品の画像・セリフは引用しておらず、論評に必要な範囲で内容に言及するにとどめています。作品はぜひ公式Xや単行本でお楽しみください。)