| name | dry-check |
| description | 関数を新規定義・変更したときに使用。同等ロジックを手書きしている重複箇所を検出する。 |
| argument-hint | [関数名と主要操作, 例: 'show_main_and_emit: show() + set_focus() + emit(window-shown)'] |
| allowed-tools | ["Read","Grep","Glob"] |
$ARGUMENTS に関連する DRY 違反を検査する。
$ARGUMENTS が空の場合は、会話の直近の変更内容から対象を推定する。
背景
関数を作ることと、既存コード全体にその関数を適用することは別の作業。関数より前に手書きされた重複コードは、関数が内包する振る舞い(例: emit() 呼び出し)を欠いたまま残りやすい。
Step 1 — 関数の分析
$ARGUMENTS から以下を抽出する:
- 関数名
- 関数が行う主要操作(grep 可能なパターンのリスト)
例:
関数: show_main_and_emit
主要操作:
- .show()
- .set_focus()
- emit("window-shown")
$ARGUMENTS に操作が明示されていない場合は、先に関数本体を読む。
Step 2 — 各主要操作を grep
コードベース全体で各操作を個別に検索する。
関数自身の内部のマッチは除外する。
Step 3 — 手書き重複の特定
以下の条件を満たす呼び出し箇所を候補とする:
- 主要操作のうち2つ以上を手動で実行している、かつ
- 当該関数を呼び出していない
各候補について十分なコンテキストを読んで理解する。
Step 4 — 各候補の評価
候補: <file>:<line> — <説明>
現状: <手動で行っている処理>
欠落: <関数が追加する処理のうち手動版にないもの>
判定: [置換] <関数呼び出し> に置き換える
[維持] 理由: <置換が不適切な理由>
出力
根拠の規律: 全判定に根拠(file:line または grep 結果)を付ける。コードを確認せずに下した判定は [置換]/[維持] とせず [要確認] として報告する。
全候補を判定と根拠付きで列挙する。
違反が見つからなかった場合: 「手書き重複は見つかりませんでした。」(Step 2 で実行した grep パターンを添える)