mcpField
R
reuse-first

reuse-first

github.com/bhagyamudgal開発2109 回インストール5 日前に更新
リポジトリ

reuse-first について

Reuse firstは、新たな実装を作る前に既存コードを探す開発スキルです。名前・振る舞い・参照の三層で検索し、プロジェクトの指針に沿った再利用と重複の判断を促します。

主な機能

  1. 01三層でのコード検索
  2. 02名前と振る舞いによる検索
  3. 03参照とインポートの追跡
  4. 04実装前に検索結果を記録
  5. 05重複を避けるための指針

活用シーン

  1. 01ヘルパー追加前に既存実装を確認
  2. 02コードベース内の再利用可能な処理を発見
  3. 03新規モジュールの重複を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bhagyamudgal/skills --skill reuse-first

インストール後、Claude Code で/reuse-firstを入力して読み込まれたか確認します。

同梱ファイルreferences/artifact-guide.mdreferences/sweep-mode.md

詳細

まず再利用する

重複があるたびに、将来の乖離が生じます。一方のコピーで修正したバグは、もう一方では壊れたままです。

検索できるコードベースがまだない新規プロジェクトの場合は、まず project-discovery を実行してから、ここに戻ってきてください。

3 層検索

正確な名前だけでは見つからないことが多いため、次の 3 段階で検索します。

  1. 名前の層:grep -r "functionName"、正確な名前に加えて、camelCase と snake_case のバリエーションも検索します
  2. 動作の層:その処理内容を表す語句を grep で検索します。format.*date、validate.*email、parse.*currency などです
  3. 参照の層:探しているものを使う機能を見つけます。それを開いて、インポートをたどります

各層で見つかったものを表示し終えたら完了です。ほかのことを書く前に、次の 3 行を書いてください。

Name layer:      <variants grepped> -> <hits, or none>
Behavior layer:  <3+ keywords> -> <hits, or none>
Reference layer: <feature file opened> -> <imports followed>

この 3 行が成果物です。これを書かずにファイルを作成すると、このスキルが防ごうとしている失敗になります。その後も見過ごされたままになります。新しいコードはコンパイルされ、レビューに通り、リリースされますが、その後の工程で同じ問いが再び投げかけられることはないからです。すでに成果物を書いてしまった場合も、検索を実行し、見つかったものを適切な場所に収めてください。コピーを正当化しないでください。

検索は成果物ごとに 1 回であり、まとめて 1 回ではありません。一度に 6 つのモジュールを作成するなら、検索も 6 回必要です。まとめて一目で済ませると、共有定数を見落とします。それを見つけるはずの検索で、そのキーワードが使われていないからです。

これから書こうとしているものについて、動作を表すキーワードを 3 つ挙げられないなら、それを検索するのに十分な理解がありません。それが明らかになった点であり、検索ではありません。

見つけたものへの対処

今すぐ ${CLAUDE_SKILL_DIR}/references/artifact-guide.md を読み込んでください。許容される重複のセクションを確認するのは、3 つの層すべてで検索結果が返ってからにしてください。

フォークが起きそうな兆候

  • 名前に接尾辞を付けている:formatDate2、userServiceV2、validateInputNew、parseFooHelper
  • 類似の動作に別々の名前を付けている:formatPrice、formatCurrency、priceFormatter が共存している場合、乖離が進行中です
  • 「あればよさそう」と感じるものをインラインで再実装している:たいてい、その感覚は正しいです
  • 30 行未満の新しい utils/ または lib/ 内のファイルは、既存のファイルに含めるべき可能性があります
  • Zod スキーマから推論される型と同じ型エイリアスを新たに定義している:代わりに z.infer を使ってください
  • 認証チェック、エラーマッピング、レスポンス整形などのボイラープレートを複数のファイルにコピーしている:共通ヘルパーに切り出してください
  • constants/ に似た名前の定数がすでにあるのに、新しい定数をインラインで定義している

スイープモード:タスク完了を宣言する前に

作成前の検索で確認できるのは、これから書こうとしていたものだけです。今すぐ ${CLAUDE_SKILL_DIR}/references/sweep-mode.md を読み込み、タスク完了を宣言する前に、説明されている全体スイープを実行してください。

コメント