設定のデバッグ
CLAUDE.md・設定・フック・MCP サーバー・スキルが効かないとき、/context や /doctor で実際に読み込まれた内容を確かめて原因を絞る手順と、よくある原因の一覧です。
Claude が指示を無視する、設定した機能が現れない、というときの原因は、たいていファイルが読み込まれていない、想定と別の場所から読み込まれた、別のファイルに上書きされた、のどれかです。このページでは、Claude Code が実際に何を読み込んだかを調べて、どれに当たるか絞る手順をまとめます。インストール・認証・接続の問題は インストールとログイン、性能や固まる問題は トラブルシューティング を見てください。
- まず
/contextで、CLAUDE.md・ルール・スキルの説明が文脈に入っているかを確かめます - 設定は管理・ユーザー・プロジェクト・ローカルで統合され、環境変数やフラグが上書きすることもあります
- フックは
/hooks、MCP サーバーは/mcpで状態を見ます - 切り分けには、カスタマイズをすべて無効にする
claude --safe-modeが使えます
文脈に何が読み込まれたか見る#
/context は、現在のセッションで文脈ウィンドウを占めているものを、カテゴリ別に出します。system prompt・システムのツール・MCP のツール・カスタムのサブエージェント(読み込み元つき)・メモリのファイル・スキル・会話のメッセージです。最初にこれを実行して、CLAUDE.md・ルール・スキルの説明が、そもそも入っているかを確かめます。/context のスキルの項には、/skills が出さない組み込みスキルも入ります。
特定のカテゴリの詳細は、専用のコマンドで見ます。
| コマンド | 表示するもの |
|---|---|
/memory |
ユーザーとプロジェクトのスコープにまたがるメモリファイルの場所。それぞれをエディタで開ける。auto memory のフォルダーと、auto memory の切り替えにも入れる |
/skills |
プロジェクト・ユーザー・プラグインから使えるスキル |
/hooks |
有効なフックの設定 |
/mcp |
接続した MCP サーバーとその状態 |
/permissions |
現在有効な、解決済みの許可・拒否のルール |
/doctor |
環境の点検。インストールの状態・不正な設定ファイル・使われていない拡張・同じディレクトリでのサブエージェント名の重複・コードベースから Claude が導ける、チェックイン済みの CLAUDE.md の内容を見て、修正案を出す |
/debug [issue] |
そのセッションのデバッグログを有効にし、ログの出力と設定のパスで診断するよう Claude に促す |
/status |
有効な設定の出どころ。管理設定が効いているかも分かる |
メモリのファイルが /context の内訳に無いときは、置き場所を CLAUDE.md とメモリ の読み込みの規則と照らします。サブディレクトリの CLAUDE.md は、起動時でなく、Claude がそのディレクトリのファイルに Read・Write・Edit ツールを使ったあとに、必要に応じて読み込まれます。
/context でファイルが読み込まれたと確認できたのに、特定の指示に従わないなら、読み込みでなく、指示の書き方が原因の可能性が高いです。CLAUDE.md は、新しいチームメイトに渡すような指針(プロジェクトの規約・ビルドのコマンド・ファイルの置き場所)に向きます。従う率が下がるのは、複数の解釈ができるほどあいまいな指示、2つのファイルの指示が食い違う、ファイルが長くなって個々のルールへの注意が薄れる、といったときです(具体性・サイズ・構成の型は CLAUDE.md とメモリ を見てください)。
補足
CLAUDE.md と権限は、別の問題を解きます。CLAUDE.md は、プロジェクトのやり方を伝えて、Claude に良い判断をさせるものです。権限ルール と フックのリファレンス は、Claude が何を決めても制限を強制します。「ここではこうする」は CLAUDE.md、セキュリティの境界や絶対に起きてはいけないこと(指針でなく保証が要るもの)は、権限かフックを使います。
解決後の設定を確かめる#
設定は、管理・ユーザー・プロジェクト・ローカルのスコープをまたいで統合されます。管理設定があれば、最初に適用されます。それ以外では、近いスコープが広いスコープを上書きします(ローカル、プロジェクト、ユーザーの順)。コマンドラインのフラグや 環境変数一覧 も、もう1つの上書きの層として使える設定があります。設定が効かないように見えるときは、設定した値が、別のスコープか環境変数に上書きされているのが普通です。
- 不正な設定ファイルを探すには、ターミナルで
claude doctorを実行します。セッションを始めずに、読み取り専用で、インストールと設定の診断を出します - 修正案を出して、適用前に確認する完全な点検には、セッション内で
/doctorを実行します /statusで、有効な設定の出どころ(管理設定が効いているか)を確かめます- あるキーにどのスコープが使われるかは、設定ファイルの仕組み を見てください
MCP サーバーを確かめる#
/mcp で、設定したすべてのサーバー・接続の状態・現在のプロジェクトで承認したかを確認します。サーバーが正しく定義されていても、ツールが出ないことがあります。
.mcp.jsonのプロジェクトスコープのサーバーは、一度だけの承認が要ります。プロンプトを閉じてしまうと、/mcpで承認するまで無効のままです- 起動に失敗したサーバーは、
/mcpで失敗と表示されます。よくある原因は、commandやargsの相対パスです。.mcp.jsonの場所でなく、Claude Code を起動したディレクトリを基準に解決されます - 接続済みなのにツールが0個のサーバーは、起動はしているが、ツールの一覧を返していません。
/mcpで「Reconnect」を選びます。0のままなら、claude --debug=mcpを実行し、デバッグログ~/.claude/debug/<session-id>.txtのサーバーの stderr を読みます
設定の場所とスコープの規則は MCP サーバーをつなぐ を見てください。
フックを確かめる#
/hooks で、現在のセッションに登録されたすべてのフックを、イベント別に確認します。定義したフックが出てこないなら、Claude Code が読み込んでいません。次の原因を確認します。
- フックを単独のファイルに定義している。フックは、設定ファイルの
"hooks"キーの下に書きます matcherの値が、1つの文字列でなく配列になっている。対話セッションの開始時とclaude doctorで、Claude Code はその項目を無効な設定として一覧します。配列がPreToolUseかPermissionRequestの下にあると、そのファイルのほかのフックも読み込まれません
フックが出ているのに動かないなら、たいてい matcher が原因です。次の間違いを確認します。
matcherは、"Edit|Write"のように|で複数のツール名をつなぐ、1つの文字列です。区切りに,を使っても同じ意味になり、"Edit,Write"は同じツールに一致します。v2.1.191 より前は、カンマが正規表現として評価されて何にも一致しなかったので、v2.1.191 より前なら|を使います- ツール名のつづりを間違えると、何にも一致しない matcher になり、フックは黙って動きません
settings.json を編集すると、少し待ってファイルが安定したあとに、実行中のセッションへ反映されます。ファイルや、プロジェクトの .claude/ フォルダー自体をセッション開始後に作った場合も同じで、再起動は要りません(v2.1.257 より前は、セッション開始後に作った .claude/ フォルダーの編集を検出しませんでした)。保存して数秒後も /hooks が古い定義のままなら、もう一度 /hooks を実行して表示を更新します。
/hooks にフックが出るのに動かないなら、次はフックの評価を実際に見ます。claude --debug でセッションを始め、ツールの呼び出しを起こします。デバッグログに、各イベント・確認された matcher・フックの終了コードと出力が記録されます。ログの形式は フックのリファレンス、よくある失敗のパターンは フックの使い方 を見てください。
クリーンな設定で試す#
まず claude --safe-mode を試します。CLAUDE.md・スキル・プラグイン・フック・MCP サーバー・カスタムのコマンドとエージェントを含む、すべてのカスタマイズを無効にして、セッションを始めます。認証・モデルの選択・組み込みのツール・権限は普通に動きます。
- safe mode で問題が消えるなら、それらのどれかが原因です。上の個別の確認で、どれかを探します
- safe mode でも、組織の管理されたフックと設定のポリシーは適用されます。管理されたプラグイン・スキル・CLAUDE.md・MCP サーバーは無効になります
- safe mode でも問題が残る、または設定そのものが疑わしいときは、普段の設定から何も読み込まないセッションと比べます。
CLAUDE_CONFIG_DIRを空のディレクトリへ向けて~/.claude以下をすべて迂回し、.claudeフォルダー・.mcp.json・CLAUDE.mdの無いディレクトリから起動して、プロジェクトの設定も飛ばします
cd /tmp && CLAUDE_CONFIG_DIR=/tmp/claude-clean claude
- クリーンなセッションには、ユーザーとプロジェクトの設定・フック・MCP サーバー・プラグイン・メモリがありません。初回の起動では、テーマの選択から始まる初回のセットアップ画面が出ます。出れば、クリーンな設定ディレクトリが効いています。同じディレクトリでの2回目以降は、オンボーディングの状態がそこに保存されるので、この画面は出ません
- 組織が管理設定を配っていれば、それは適用されます。Claude Code は、MDM プロファイル・レジストリのポリシー・
managed-settings.jsonを設定ディレクトリの外から読み、認証情報を得たあとのクリーンなセッションでも、サーバー管理設定を再取得します - もう一度ログインを求められます
ここで問題が消えるなら、原因は、実際の ~/.claude かプロジェクトの .claude のファイルのどこかにあります。一時ディレクトリへファイルをコピーするか、プロジェクトから起動して、1つずつ戻して探します。クリーンなセッションでも続くなら、原因はユーザーとプロジェクトの設定の外にあります。/status で管理設定が効いているかを確認し、Claude Code に影響する環境変数を探してから、トラブルシューティング を見ます。
よくある原因#
設定まわりの意外な挙動の多くは、場所と書式の少数の決まりに行き着きます。不具合と決めつける前に確認します。
フック#
| 症状 | 原因 | 対処 |
|---|---|---|
| フックが動かない | matcher が文字列でなく JSON の配列 |
複数のツールを | でつなぐ1つの文字列にする(例:"Edit|Write")。フックのリファレンス の matcher のパターンを見る |
| フックが動かない | v2.1.191 より前の版で、matcher の区切りに , を使っている |
v2.1.191 以降は、, を | と同じ区切りとして扱う。それ以前は、カンマを文字として評価し、"Edit,Write" は何にも一致しない。| を使うか、Claude Code を更新する |
| フックが動かない | matcher の値が小文字(例:"bash") |
一致は大文字小文字を区別する。ツール名は先頭が大文字:Bash・Edit・Write・Read |
| フックが動かない | settings.json でなく単独のファイルに定義した |
プロジェクトやユーザーの設定には、単独のフックのファイルが無い。settings.json の "hooks" キーの下に定義する。別の hooks/hooks.json を読むのは プラグインを作って配る だけ |
| セッション終了時の後始末が走らない | SessionEnd フックが設定されていない |
settings.json に SessionEnd フックを足す(フックのリファレンス のイベント一覧) |
設定とメモリ#
| 症状 | 原因 | 対処 |
|---|---|---|
| 全体に設定した権限やフックが無視される | 設定を ~/.claude.json に足した |
~/.claude.json はアプリの状態と UI の切り替えを持つ。permissions・hooks・env は ~/.claude/settings.json に置く。別の2つのファイル |
settings.json の値が無視されたように見える |
同じキーが settings.local.json にある |
settings.local.json が settings.json を上書きし、どちらも ~/.claude/settings.json を上書きする(設定ファイルの仕組み) |
サブディレクトリの CLAUDE.md の指示が無視されたように見える |
サブディレクトリのファイルは、起動時でなく必要に応じて読み込まれる | Claude が、そのディレクトリのファイルに Read・Write・Edit ツールを使ったあとに読み込まれる。起動時には読み込まれない。v2.1.288 より前は Read ツールだけが読み込ませた(CLAUDE.md とメモリ) |
サブエージェントが CLAUDE.md の指示を無視する |
組み込みの Explore と Plan のエージェントは CLAUDE.md を読まない。カスタムのサブエージェントは、定義で omitClaudeMd を設定していない限り、メインの会話と同じに読み込む |
Explore や Plan には、依頼のプロンプトで指示を言い直す。omitClaudeMd を設定したサブエージェントは、そのフィールドを外す。それ以外のカスタムのサブエージェントは、エージェントのファイルの本文(エージェントの system prompt になる)に重要な指示を置く(サブエージェント) |
スキル#
| 症状 | 原因 | 対処 |
|---|---|---|
スキルが /skills に出ない |
スキルのファイルが、フォルダーでなく .claude/skills/name.md にある |
フォルダーの中に SKILL.md を置く:.claude/skills/name/SKILL.md |
/skills に出るのに Claude が呼ばない |
frontmatter に disable-model-invocation: true がある、または説明が、依頼の言い回しに合っていない |
/skills のバッジを確認する。「user-only」の表示は、Claude が自分では起動しないという意味(スキル) |
MCP#
| 症状 | 原因 | 対処 |
|---|---|---|
.mcp.json の MCP サーバーが読み込まれない |
ファイルが .claude/ の下にある、またはサーバーが mcpServers でなく、VS Code の mcp.json のような最上位の servers キーの下にある |
プロジェクトの MCP 設定は、.claude/ の中でなくリポジトリのルートに .mcp.json として置き、サーバーは mcpServers キーの下に書く(MCP サーバーをつなぐ) |
settings.json の mcpServers に足したサーバーが出ない |
settings.json は mcpServers キーを読まない |
プロジェクトのサーバーはリポジトリのルートの .mcp.json に定義するか、ユーザースコープのサーバーは claude mcp add --scope user で足す |
| プロジェクトの MCP サーバーを足したのに出ない | 一度だけの承認プロンプトを閉じた | プロジェクトスコープのサーバーは承認が要る。/mcp で状態を見て承認する |
| 特定のディレクトリから MCP サーバーが起動しない | command や args が相対のファイルパス |
ローカルのスクリプトには絶対パスを使う。npx や uvx のように PATH にある実行ファイルは、そのまま使える |
| MCP サーバーが、期待する環境変数なしで起動する | サーバーの設定の項目に設定がなく、Claude Code が stdio サーバーに渡す環境(自身の環境から、サブプロセスで取り除く変数を引いたもの)にも無い | サーバーごとの env を、サーバーの .mcp.json の項目の中に設定する。起動時の環境やワークスペースの信頼に依存しない |
権限#
| 症状 | 原因 | 対処 |
|---|---|---|
Bash(rm *) の拒否ルールが /bin/rm や find -delete を止めない |
Bash のルールは、元の実行ファイルでなく、コマンド文字列そのものに一致する(権限ルール の Bash のルールの限界) | 確実に止めるには、PreToolUse フック(フックの使い方)か サンドボックス を使う |
関連するページ#
- .claude ディレクトリの中身:すべての設定ファイルの場所と、何が読むか
- 設定ファイルの仕組み と 設定キー一覧:どのファイルを使うか、Claude Code がどの値を使うか、全キー
- フックのリファレンス:イベント名・ペイロード・
--debugの出力形式 - MCP サーバーをつなぐ:サーバーの設定・承認・
/mcpの出力 - インストールとログイン:
command not found・PATH・認証の問題 - トラブルシューティング:性能・固まり・検索の問題
公式ドキュメント(英語)
2026年10月5日時点の内容をもとに、日本語でまとめています。