duck-triage について
duck-triageは、バグの重大度を評価し、テストのカバレッジ不足を見つけるエージェントスキルです。既存テストと証拠を確認して実行可能なチェックを提案し、実装の判断はユーザーに委ねます。
主な機能
- 01バグ重大度の分類
- 02テストカバレッジ不足の分析
- 03証拠を起点とするトリアージ
- 04最小限の実行可能なチェックの提案
- 05テスト品質と境界値のチェックリスト
活用シーン
- 01報告されたバグの優先順位付け
- 02プルリクエスト前のテスト計画
- 03エラー経路や境界値テストの不足確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sprngr/ rubber-duck --skill duck-triageインストール後、Claude Code で/duck-triageを入力して読み込まれたか確認します。
同梱ファイルreferences/GUARDRAILS.md
詳細
テストカバレッジとバグのトリアージ 🦆。テストで見逃されているものを見つけます。重要なバグを分類します。簡潔で実用的な表現を保ちます。
目的
最小限の実行可能なチェックで、バグの重大度を分類し、不足しているテストカバレッジを明らかにします。
方針のガードレール(スキル固有)
references/GUARDRAILS.md の共通ガードレールを引き継ぎます。
スキル固有の追加事項:
- 重大度とテストの方向性を提案します。実装やテスト作成を行うかどうかはユーザーが決定します。
起動条件
テストカバレッジの計画、バグの重大度のトリアージ、PR 前のテストに関する提案に使用します。
手順
1. コンテキストの確認(再現手順や仕様がない場合)
-
コンテキストが不完全な場合は、的を絞った確認質問を1〜3個します
-
根拠が不足している場合は、前提を明示します
-
再現手順や仕様が不足している場合は、まず的を絞った確認質問を1つします。
根拠が不足している場合は、次の明示的なマーカーを含めます:
missing evidence:に続けて、不足している情報(ログ/再現手順/リリース期間/影響範囲)を簡潔に列挙します
2. ダックラダーを適用する(テスト計画)
新しいテストを求める前に、次を確認します:
- この動作は、すでに信頼できるテストでカバーされていますか?
- 新しいファイルやテストスイートを作らずに、既存のテストを拡張できますか?
- 回帰時に失敗する、最小限の実行可能なチェックは何ですか?
3. トリアージのワークフロー
バグの重大度を判定する場合:
- まず証拠を集めます:再現用の成果物、失敗する経路、既存のテストカバレッジの一覧。
- 報告された動作を再現します。
- 重大度マトリックス(以下)に基づいて分類します。
- 回帰か、以前から存在する問題かを確認します。
- 既存のテストカバレッジがあるか確認します。ない場合は、カバレッジ不足を要因として明記します。
- 出力:重大度+簡潔な根拠+追加すべきテスト。
バグの重大度分類:
| レベル | 基準 | 対応 | 例 |
|---|---|---|---|
| 🔴 P0 — Critical | データ損失、セキュリティ侵害、全ユーザーが利用不能 | 直ちにホットフィックス | 金額の誤送信、API 認証の回避 |
| 🟠 P1 — High | 主要機能の故障、回避策あり | スプリントの優先課題 | 特定のロケールで検索が機能しない |
| 🟡 P2 — Medium | 機能の一部が故障、UX が低下 | 次のイテレーション | アイコンの位置ずれ、クエリの遅延 |
| 🔵 P3 — Low | 表示上の問題、エッジケース、誤字 | バックログ | カンマの欠落、ラベルの大文字・小文字 |
| ⚪ P4 — Informational | あると便利だが、バグではない | 検討 | 提案、機能強化 |
テストカバレッジを分析する場合:
次のテストが不足している場合に指摘します:
- テストのないパブリック API
- 検証されていない副作用関数
- エラーパス(ハッピーパスだけでなく、分岐カバレッジも確認)
- 外部依存関係(モックなし)
- コントラクトテストのないパブリックインターフェース
テスト品質チェックリスト:
- テストが実装ではなく動作を検証している
- テストが決定的である(乱数や時刻に依存しない)
- テストが独立している(暗黙の実行順序に依存しない)
- テスト名が関数ではなくシナリオを表している
- アサーションが具体的である(「真」ではなく「42と等しい」)
- エラーパスをテストしている(「例外をスローする」「拒否される」「エラーを返す」)
エッジケースを見つけるためのフレームワーク(すべての入力/出力で確認):
- 空(ゼロ、""、[])
- Null/undefined/欠落
- 要素が1つ(境界)
- 最大値/最小値
- 無効な型
- 並行アクセス
- キャッシュ状態(ヒット、ミス、古いデータ)
- タイムアウト/境界値
提案するテストシナリオ:
- ハッピーパス(機能ごとに1つ)
- 最初の失敗ケース
- 境界ケース(0、最大値、null、空)
- 並行ケース(2つの呼び出しを同時に実行)
- 復旧ケース(失敗 → 再試行 → 成功)
- 回帰ケース(既存のバグに修正がある場合)
最小限の実行可能なチェックのルール:
- 分岐、ループ、パーサー、金銭、セキュリティ関連の経路など、単純でないロジック変更には、実行可能なチェックを1つ残す必要があります:
- 対象を絞ったテストを1つ、または
- テストフレームワークの導入が大掛かりな場合は、アサーション形式の自己チェック/デモを1つ。
- 既存のテストカバレッジがある場合、単純な1行の変更には新しいテストが不要なこともあります。
- 簡潔さを理由に、重要な保護策を決して取り除いてはいけません:
- 変更によって信頼境界の検証、セキュリティ制御、データ損失防止、アクセシビリティ要件、または明示的なユーザー要件が弱まる場合は、その変更を拒否し、制約を維持する安全な代替案のみを提示します。
4. 出力
重大度+簡潔な根拠+追加すべき具体的なテスト。
関連するテストのパスを含めるか、存在しない場合は明示的に「needs test」と記載してください。
書式ルール(固定):
- テストを提案する場合は、明示的に
needs test:を付けた行を使用します(シナリオごとに1行)。 - 既定の対象範囲は、リスクと変更範囲に応じて
needs test:を1~3行とします(高リスクまたは複数の領域にまたがる変更の場合のみ3行)。 - 不確実なケースでは、重大度を見直すために必要な最小限の資料を示す
missing evidence:の行を1行含めます。
バグ報告の形式:
- 1行のタイトル:「コンポーネント:発生する問題」
- 再現手順(実行可能な手順を番号付きで記載)
- 期待される結果と実際の結果(それぞれ1行)
- 重大度+根拠
- 関連テスト(パス)または「needs test」
PR 前と PR 内:
- PR 前:テストすべき内容を提案します(
duck-triageの範囲)。 - PR 内:不足しているテストをインラインで注記します(
duck-reviewの 🧪 test: プレフィックス)。
境界
- トリアージでは対応方針を推奨します。実装やテストの作成には、範囲を限定したうえでユーザーの明示的な承認が必要です(引き継ぎが承認に代わることはありません)。
- PR 内のインラインレビューコメントは
duck-reviewを通じて行います。