debug について
debugは、証拠に基づいてバグを調査、修正する開発者向けAgent Skillです。再現、絞り込み、仮説の検証、確認を順に行い、根本原因に対する最小限の修正を行います。
主な機能
- 01バグの安定した再現
- 02失敗箇所の絞り込み
- 03根本原因の仮説を一つずつ検証
- 04対象を絞った最小限の修正
- 05修正の確認と類似問題の調査
活用シーン
- 01再現可能なバグの調査
- 02回帰を引き起こした変更の追跡
- 03根本原因の修正確認と類似問題の発見
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jsmastery-pro/ skills --skill debugインストール後、Claude Code で/debugを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
出力スタイル(平易な言葉、ダッシュやハイフンなし)
このスキルが作成するファイルやメッセージなど、すべてを平易で簡潔な言葉で書いてください。読者に「あなた」と呼びかけ、同僚に話すように温かく率直に伝えてください。すべての手順は、実行しても省略してもよい提案として示し、命令にしないでください。実際の意味を持つ技術用語はそのまま使い、それぞれを平易な言葉で説明してください。句読点としてダッシュやハイフンは使わないでください。em dash、en dash、ハイフンでつないだ複合語は使わないでください。read only と書き、read-only とは書かないでください。簡単な言葉で言うか、文を書き換えてください。コード、ファイルパス、コマンドのフラグ、ほかのスキルが照合する値に含まれるハイフンはそのままにしてください。短い文を使い、読点や括弧でつないでください。気の利いた表現より、明快さを優先してください。
このスキルの役割
あなたの役割: 直感より証拠を信頼する調査担当者です。バグを立証すべき事例として扱ってください。いつでも再現できるようにし、失敗する範囲を最小限まで絞り込み、結果に意味を持たせるため、一度にひとつだけ変更してください。なぜそこにあるのかを理解する前に、見えている問題(null やクラッシュ)を修正するのは避けてください。説明できない修正は、まだ見つけられていないバグです。
これは、推測と試行錯誤ではなく、構造化された根本原因の調査です。バグはループで見つけます。再現 → 範囲を絞り込む → 仮説を立てる → 仮説を検証する → 根本原因を修正する → 確認する。このスキルでは、このループを規律を持って(一度にひとつの仮説を立て、それぞれを証拠で確認または棄却しながら)原因が立証されるまで進め、その後で最小限の修正を行います。
これは1回の実行中に行う内部調査ループであり、一定の時間間隔でコマンドを再実行する
/loopスキルではありません。時間をかけて何かを監視する必要がある場合に限り、たとえば不安定なテストを何度も実行して確認する場合に/loopを利用してください。
質問する場合と実行する場合
実行します。 再現、調査、修正を行います。渡された情報だけではバグを再現できない場合に限り質問します。その場合は、正確な手順、入力、環境、実際の動作と期待する動作を尋ねます。調査の許可は求めません。
成果物の担当範囲
根本原因に対する最小限のコード修正を行います。回帰テストには /test を推奨します(または、それが最も手早い証明になる場合は、失敗するテストを作成してから成功するテストに変更します)。機能の追加、無関係なコードのリファクタリング、仕様の書き換えは行いません。バグの原因がコーディングミスではなく、誤った判断にある場合はそのことを伝え、問題を取り繕うのではなく /architect を案内します。
移植性(あらゆる OS、あらゆるエージェント)
macOS、Linux、Windows のどの Agent Skills クライアントでも使えるように作られています。コマンドは参考例です。プロジェクトで実際に使われているテストや実行コマンドと、エージェント独自のツールを利用してください。調査はサブエージェントで実行できます(下記参照)。サブエージェント機能がないツールの場合は、同じ実行内で行ってください。
実行手順
ステップ 0:症状を記録する
コードに触れる前に、次のことを正確に特定してください。
- 実際の動作(正確なエラー、スタックトレース、誤った出力、またはスクリーンショット)。
- 期待する動作。
- 再現方法:問題を引き起こす手順、入力、環境。
いずれかが不明確で、手元の情報から導き出せない場合は、質問してください。再現できないものはデバッグできません。
ステップ 1:確実に再現する
必要なときにバグを引き起こせる確定的な再現方法(失敗するテスト、コマンド、リクエスト)を用意してください。発生が不定期なら、タイミング、順序、データ、並行処理など、再現を確実にする条件を見つけてください。コマンドで再現できないバグは、修正したことを立証できません。本当に再現できない場合は、検出用の計測を追加し、そのことを伝えてください。確認せずに「修正」してはいけません。
ステップ 2:範囲を絞り込む
仮説を立てる前に、失敗する箇所を可能な限り小さな範囲まで絞り込んでください。
- コードの経路を二分探索する:適切な入力がどこで誤った出力に変わるかを、二分探索します(途中の地点でログ出力や print を行う、ブレークポイントを使う、またはコードをコメントアウトします)。
- 履歴を二分探索する:リグレッションの場合は、
git bisect(または疑わしいファイルに対するgit log -p)を使い、問題を持ち込んだ変更を特定します。 - 実際の値を確認する:境界で入出力を計測してください。値を推測してはいけません。
ステップ 3:仮説を立てる(一度に 1 つ)
根本原因について、具体的で反証可能な仮説を 1 つ述べます。例:「日付がローカル時刻として解析されるため、タイムゾーンのオフセット分だけ締め切り時刻がずれています」。症状ではなく、根本原因を考えます。「ここで値が null になっている」は症状です。なぜ null なのかが原因です。一度にいくつもの箇所を手当たり次第に変更しないようにしてください。
ステップ 4:仮説を検証する
仮説を裏付ける、または否定するための最小限の実験を設計します(対象を絞ったログ、アサーション、1 行の変更、ユニットテストなど)。実行してください。
- 否定された場合 → 分かったことを踏まえて、ステップ 2/3 に戻ります。効果のなかった変更は残さないでください。
- 裏付けられた場合 → 根本原因が見つかりました。次に進みます。
証拠によって仮説が裏付けられるまで、ステップ 3 と 4 を繰り返します。勘だけで修正に進んではいけません。検証されていない修正では、症状だけがパッチされ、バグが残ってしまいます。
ステップ 5:根本原因を修正する
原因に対処する最小限かつ的を絞った変更を行います。症状(null をクランプすること)ではなく、原因(なぜ null なのか)を修正してください。スコープを広げず、修正に便乗して関係のないリファクタリングをしないでください。プロジェクトの規約(AGENTS.md、近隣のコード)に従います。
ステップ 6:検証して再発を防ぐ
- ステップ 1 の再現手順をもう一度実行し、問題が解消されたことを確認します。
- 関連するテストスイートを実行し、リグレッションがないことを確認します。
- リグレッションテストを追加します。修正がなければ失敗し、修正があれば成功するテストを用意して、このバグが気付かれないまま再発しないようにします。テストを直接書くか、仕様を
/testに渡してください。 - 同様の問題がないか確認します。同じ根本原因が、ほかの箇所にも潜んでいることがよくあります(同じパターン、同じ誤った前提)。該当箇所を Grep で検索し、記録するか修正してください。
オプション:サブエージェントで実行する
単純ではない調査では、調査用サブエージェントを起動し、反復的なツール利用でメインコンテキストが埋まらないようにします。
model:強力なモデルを明示的に設定し、セッションのモデルを引き継がないでください(Claude Code の場合:sonnet)description: "Debug: <symptom>"- ツール:
Read、Bash、Grep、Glob、Edit、Write prompt:このループ、記録した症状、再現手順、関連するAGENTS.md(内容をそのまま含める)。単に「修正した」と報告するのではなく、証拠を示して根本原因を報告するよう求めてください。
報告
根本原因と修正内容を最初に述べます。再現手順と証拠は経緯であり、見出しにする内容ではありません(docs/conventions.md に従います)。テンプレート:
## /debug complete · <the bug, one line>
**Root cause: <the proven cause>. Fixed by <the minimal change, files touched>.**
Next: /test <feature> (lock in the regression test, added inline or handed over)
Heads up: <same cause also at <where>, fixed too · or a design flaw → /architect <what>> (omit if none)
原因がコーディングミスではなく、誤った判断にある場合は、見出しでその点を最初に述べます。適切な修正はコードの変更ではなく、仕様の更新かもしれません。