root-cause-tracing について
呼び出し経路の深い箇所に現れるエラーを調査するデバッグスキルです。経路をさかのぼって最初の引き金を特定し、発生源で修正したうえで各層に検証を加えます。
主な機能
- 01呼び出し経路の逆追跡
- 02最初の引き金の特定
- 03発生源での修正
- 04各層への検証追加
活用シーン
- 01実行の深い箇所で起きるエラーの調査
- 02不正なデータの発生元の特定
- 03障害を引き起こすテストの追跡
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bobmatnyc/ claude-mpm-skills --skill root-cause-tracingインストール後、Claude Code で/root-cause-tracingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonreferences/advanced-techniques.mdexamples.mdintegration.mdtracing-techniques.md詳細
根本原因の追跡
概要
バグは、コールスタックの深い場所で現れることがよくあります(間違ったディレクトリでの git init、間違った場所へのファイル作成、間違ったパスでのデータベースのオープンなど)。エラーが現れた場所を修正したくなりますが、それでは症状への対処にすぎません。
基本原則: 呼び出しチェーンをさかのぼり、元のトリガーを見つけてから、発生源を修正します。
このスキルは、体系的なデバッグのワークフローにおける専門的な手法です。通常、深いコールスタックに対処する際、フェーズ 1(根本原因の調査)で適用します。
このスキルを使う場面
根本原因の追跡を使う場面:
- 実行の深い箇所でエラーが発生する(エントリポイントではない)
- スタックトレースに長い呼び出しチェーンが示されている
- 無効なデータがどこで発生したのか不明
- 問題を引き起こすテストやコードを見つける必要がある
- 症状が実際の原因から遠く離れた場所に現れる
体系的なデバッグとの関係:
- systematic-debugging:全体的なフレームワーク(フェーズ 1~4)
- root-cause-tracing:フェーズ 1 の調査で使う具体的な手法
- systematic-debugging のフェーズ 1 内で root-cause-tracing を使う
鉄則
NEVER FIX JUST WHERE THE ERROR APPEARS
ALWAYS TRACE BACK TO FIND THE ORIGINAL TRIGGER
症状を修正すると、根本的な問題を覆い隠す、その場しのぎの解決策になります。
基本原則
- さかのぼって追跡する:症状から発生源まで呼び出しチェーンをたどります
- 元のトリガーを見つける:不正なデータや状態がどこで発生したかを特定します
- 発生源を修正する:症状ではなく、根本原因に対処します
- 多層防御:発生源を修正した後、各層に検証を追加します
クイックスタート
5 ステップの追跡プロセス
- 症状を確認する:どのようなエラーメッセージですか?どの操作に失敗しましたか?
- 直接の原因を特定する:このエラーを直接引き起こしているコードは何ですか?
- これを呼び出したものを確認する:コールスタックを 1 レベル上にさかのぼります
- さらにさかのぼって追跡する:元のトリガーを見つけるまで続けます
- 発生源を修正して防御する:根本原因を修正し、各層に検証を追加します
判断ツリー
Error appears deep in stack?
→ Yes: Start tracing backward
→ Can identify caller? → Trace one level up → Repeat
→ Cannot identify caller? → Add instrumentation (see advanced-techniques.md)
→ No: May not need tracing (error at entry point)
追跡プロセス
例:間違ったディレクトリでの Git 初期化
Error symptom → execFileAsync('git', ['init'], { cwd: '' })
← WorktreeManager.createSessionWorktree(projectDir='')
← Session.create() → Project.create() → Test code
← ROOT CAUSE: setupCoreTest() returns { tempDir: '' } before beforeEach
各レベルで確認すること: この値はどこから来ましたか?ここが発生源ですか?
詳細な追跡方法については、追跡手法を参照してください。 実際の例については、例を参照してください。
根本原因を見つけた後
発生源を修正する(初期化前にアクセスされた場合は例外をスローする)とともに、多層防御を追加する(Project.create、WorkspaceManager、環境ガード、計装で検証する)。
これにより、同様のバグを防ぎ、問題を早期に検出できます。
ナビゲーション
詳細については、以下を参照してください。
- 追跡手法:追跡方法、パターン、判断ツリーの全容
- 例:追跡チェーン全体を示した、実際のデバッグシナリオ
- 高度な手法:スタックトレース、計装、テスト汚染の検出
- 連携:体系的なデバッグやその他のスキルとの併用方法
主な注意事項
- エラーが現れた場所だけを修正してはいけません
- 必ず元のトリガーを見つけるためにさかのぼって追跡してください
- テストでのデバッグには
console.error()を使ってください(logger は出力が抑制されている場合があります) - 危険な操作の後ではなく、実行前にログを記録してください
- ディレクトリ、cwd、環境、タイムスタンプなどのコンテキストを含めてください
- 発生源を修正した後、多層防御を追加してください
- 追跡しながら記録してください(呼び出しチェーンを書き留めます)
危険信号 — 中止
次のように考えたら、作業を中止してください。
- 「ここに検証を追加すればいいだけだ」(発生源を見つけずに)
- 「これでエラーを防げる」(症状への対処)
- 「さかのぼって追跡するのは難しすぎる」(代わりに計装を追加する)
- 「とりあえずの簡単な修正をする」(技術的負債を生む)
いずれの場合も、根本原因を見つけるために追跡を続けてください。
他のスキルとの連携
- systematic-debugging:フェーズ 1 で根本原因の追跡を行います
- defense-in-depth:根本原因の特定後に追加します
- verification-before-completion:ソースで修正が機能したことを検証します
- test-driven-development:症状ではなく、根本原因を対象としたテストを作成します
完全なワークフローの例については、Integration をご覧ください。
実社会への影響
デバッグセッション(2025-10-03)より:
- 5 段階の追跡で根本原因を発見しました
- ソース(getter の検証)で修正しました
- 4 層の防御を追加しました
- 1847 件のテストが合格し、汚染はゼロでした
- 時間の節約:症状を修正するアプローチと比べて 3 時間以上
**要点:**追跡には 15~30 分かかります。症状の修正には、モグラたたきのような対応で何時間もかかります。