systematic-debugging について
Systematic Debuggingは、再現、根本原因の追跡、仮説の個別検証を重視する開発者向けのデバッグガイドです。修正に3回失敗したら、アーキテクチャを見直すよう促します。
主な機能
- 01問題把握と再現のチェックリスト
- 02根本原因の逆追跡
- 03仮説を一つずつ検証
- 04失敗するテストを先に書く修正手順
- 05修正に3回失敗した後の設計見直し
活用シーン
- 01再現可能なバグの調査
- 02誤った値の発生源の追跡
- 03修正失敗が続いた後の設計再評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bbeierle12/ skill-mcp-claude --skill systematic-debuggingインストール後、Claude Code で/systematic-debuggingを入力して読み込まれたか確認します。
同梱ファイル_meta.json
詳細
体系的なデバッグ
基本原則
推測せず、体系的に調査してください。
修正を3回試しても失敗したら、いったん止まり、アーキテクチャを見直してください。
フェーズ1:問題を理解する
情報を集める
- 期待される動作は何ですか?
- 実際の動作はどうなっていますか?
- いつから失敗し始めましたか?
- 最近、何が変わりましたか?
一貫して再現する
- 最小限の再現ケースを作成する
- 再現するための手順を正確に記録する
- 決定論的に発生するのか、断続的に発生するのかを特定する
まずは簡単な点を確認する
- 接続されていますか?(サービスの実行状況、依存関係のインストール状況)
- 正しい環境にいますか?
- ファイルを保存しましたか?
- キャッシュをクリアしましたか?
フェーズ2:根本原因をたどる
逆方向にたどる手法
- 問題のある値はどこに現れますか?
- どこからこの値が渡されましたか?
- 原因が見つかるまで上流へたどり続けます
- 症状ではなく、原因を修正してください
正常に動作する例を探す
- 同じコードベース内で、似た正常動作するコードを見つける
- 壊れているものと似ていて、正常に動作するものは何ですか?
- 参照例と比較する
違いを特定する
- 正常に動作するものと壊れているものでは、何が違いますか?
- どんなに小さくても、すべての違いを列挙する
- 「関係ないはず」と決めつけない
フェーズ3:仮説を立てる
科学的手法
- 仮説を1つだけ立てる
- 仮説が正しければ、何が確認できるかを予測する
- 検証するためのテストを設計する
- テストを実行する
- 仮説が誤っていたら、新しいデータに基づいて新たな仮説を立てる
複数の仮説を同時に立てない
- 一度に扱う仮説は1つだけにする
- 次に進む前に、仮説を完全に検証する
- デバッグのアプローチを混在させない
フェーズ4:修正を実装する
まず失敗するテストを書く
- バグを再現するテスト
- 修正前にはテストが失敗すること
- 修正後にはテストが成功すること
一度に1つだけ修正する
- 変更は1つだけ
- 「ついでに」改善しない
- リファクタリングをまとめて行わない
完全に検証する
- 元のテストが成功する
- ほかのテストが壊れていない
- 問題が実際に解決している
- エッジケースが網羅されている
フェーズ5:修正がうまくいかない場合
失敗するたびに
- いったん止まる
- 数える:修正を何回試しましたか?
- < 3 の場合:フェーズ1に戻り、新しい情報をもとに再分析する
- ≥ 3 の場合:いったん止まり、アーキテクチャを見直す
修正を3回以上試して失敗した場合
アーキテクチャ上の問題を示すパターン:
- 修正のたびに、ほかの場所で新しい問題が見つかる
- 修正に「大規模なリファクタリング」が必要になる
- 修正のたびに新たな症状が発生する
いったん止まり、次の点を確認してください:
- このパターンは根本的に妥当ですか?
- これは適切な抽象化ですか?
- 設計し直すべきですか?
デバッグツール
ログ戦略
// Add context to logs
console.log('[ComponentName] methodName:', {
input,
state: relevantState,
timestamp: Date.now()
});
二分探索デバッグ
- 問題が疑われるコードの中間地点にログを追加する
- バグがその前にあるか後にあるかを判断する
- 特定できるまで繰り返す
ラバーダックデバッグ
問題を声に出して説明する:
- 何が起きるべきですか?
- 実際には何が起きていますか?
- 何を試しましたか?
- どんな前提を置いていますか?
よくある落とし穴
こうした間違いを避ける
- 一度に複数のことを変更する
- 原因が分かっていると思い込む
- 根本原因ではなく症状を修正する
- 修正が実際に機能することを検証しない
- 回帰テストを追加しない
危険信号
- 「自分のマシンでは動く」
- 「昨日は動いていた」
- 「何も変更していない」
- 「それが問題のはずはない」
コメント
Markdown 対応