finding-duplicate-functions
作成者 obrafinding-duplicate-functions skill を使って、意味的に重複している関数を見つけます。つまり、名前や実装は違っても同じ役割を果たす関数を特定します。LLM 生成コードや急速に拡大する JavaScript / TypeScript のコードベース向けに設計されており、Code Review、統合計画、リファクタリング前の整理における finding-duplicate-functions を支援します。
この skill の評価は 78/100 で、意味的に重複する関数を繰り返し洗い出したいディレクトリ利用者にとって、有力な掲載候補です。リポジトリには明確な用途、複数ステップのプロセス、汎用的なプロンプトよりも迷いを減らせる補助スクリプトが揃っています。一方で、やや用途は限定的で、インストール手順や運用全体のドキュメントは十分ではありません。
- 明確なトリガー: 特に LLM 生成コードベースを対象に、意味的な重複関数の監査用途がはっきりしている。
- 具体的なワークフロー: extract -> categorize -> split -> detect -> report の流れがあり、各段階に対応するスクリプトが用意されている。
- 運用の指針がある: 分類には haiku、意味解析には opus を使うなどのヒントと、期待される出力が示されている。
- 対象範囲が狭い: TypeScript / JavaScript の関数解析に特化しているため、非 JS コードベースには合わない場合がある。
- SKILL.md にインストールコマンドや広いセットアップ手順がないため、スクリプトをどうワークフローに組み込むかは利用者側で判断する必要がある。
finding-duplicate-functions skill の概要
finding-duplicate-functions skill は、名前や実装は違っていても同じ役割を果たす関数を見つけるのに役立ちます。特に、LLM が生成したコードや、急速に肥大化しているコードベースで、コピー&ペースト由来の重複より先に意味的な重複が蓄積していく場面で有効です。finding-duplicate-functions for Code Review を探しているなら、この skill はスタイル上の細かな指摘ではなく、統合すべきかどうかの判断に向いています。
この skill の用途
この finding-duplicate-functions skill は、「意図は同じだがコードが違う」ケースを特定するために作られています。たとえば、役割が重なる helper、再実装された utility、ファイルをまたいで散在するほぼ同等のロジックなどです。リファクタリングの前、整理作業の最中、あるいは jscpd のような構文レベルの重複検出ツールで完全一致のコピーを処理した後に、特に役立ちます。
どんな人が導入すべきか
JavaScript や TypeScript のリポジトリで、多数の小さな utility、生成ファイル、複数の貢献者がいるレビュー担当者なら、finding-duplicate-functions skill の導入をおすすめします。関数を統合すべきか、分けたままにすべきか、さらに調査が必要かを、再現性のある基準で判断したいときに相性が良いです。
何が違うのか
この skill の最大の差別化ポイントは、2 段階のワークフローにあります。まず関数を抽出し、その後 LLM 分析で意図ごとにクラスタリングします。つまり、単に一致する行を探すのではなく、意味的な重複に関する推測を減らすための skill です。実務上の利点は、「このコードは冗長に見える」という感覚から、レビュー可能な統合案までを短い手順で持っていけることです。
finding-duplicate-functions skill の使い方
インストールしてワークフローを把握する
skill ディレクトリにあるインストールパスを使います: npx skills add obra/superpowers-lab --skill finding-duplicate-functions。インストール後は、まず skills/finding-duplicate-functions/SKILL.md を開き、そのあと skills/finding-duplicate-functions/scripts/ にあるヘルパースクリプトを読みます。実際の分析手順はそこに定義されているからです。finding-duplicate-functions のガイドとしては、概要文よりもスクリプトのほうが重要です。
この skill に必要な入力
この skill は、ソースディレクトリと具体的なレビュー目標を与えたときに最も力を発揮します。良い入力には、対象コードの範囲、分析の理由、除外条件が含まれます。たとえば、「認証フローを統合する前に packages/api/src の重複バリデーション helper を調べ、テストファイルは除外し、高確度の候補だけ報告してほしい」のような指定です。これは「重複を見つけて」より優れています。なぜなら、範囲、意図、出力期待値が明確だからです。
まず読むべきファイル
scripts/extract-functions.sh、scripts/categorize-prompt.md、scripts/find-duplicates-prompt.md、scripts/prepare-category-analysis.sh、scripts/generate-report.sh を優先して読みます。これらのファイルを見ると、finding-duplicate-functions の正確な使い方が分かります。つまり、関数一覧を抽出し、カテゴリ分けし、カテゴリごとに分割し、意味比較を実行し、最後にレポートを生成する流れです。1 つだけ読むなら、SKILL.md と scripts/extract-functions.sh を読めば、入力の形と除外条件を理解しやすくなります。
結果を左右するワークフローのコツ
カテゴリ分けは後回しにする工程ではなく、フィルターとして扱ってください。カテゴリが一貫していて、比較対象の関数数が十分にあるほど、この skill の精度は上がります。なぜなら、重複検出はカテゴリごとに実行されるからです。テストをデフォルトで除外するのは、本番コードの整理ではたいてい正しい判断です。ただし、共有テスト utility や fixture helper がレビュー対象なら、テストも含めるべきです。生成されたレポートは、自動リファクタリング計画ではなく、人間がレビューするための候補リストとして使ってください。
finding-duplicate-functions skill の FAQ
通常のプロンプトより優れているのか?
はい。単発のブレインストーミング回答ではなく、duplicate-function の意図を再現可能なワークフローで探したいときに向いています。通常のプロンプトでは、範囲制御、ファイル選定、信頼度のしきい値が抜け落ちることがあります。finding-duplicate-functions skill は、コードレビューで繰り返し使いやすいワークフローと出力構造を提供します。
構文レベルの重複ツールの代わりになるのか?
いいえ。補完関係です。構文ツールはコピーされたコードを見つけ、この skill は実装が違っていても意味的に近い関数を見つけます。すでに完全一致のコピー問題があるなら、先にそれを処理して、意味ベースの分析がその後に集中できるようにしてください。
初心者にも使いやすいか?
ソースツリーを指定でき、何をレビューすべきか説明できるなら、初心者にも使いやすいです。初心者が理解しておくべき最重要点は、重複検出はカテゴリベースで行われ、入力の境界設定が結果に大きく影響することです。迷うなら、リポジトリ全体ではなく、まず 1 つの package か 1 つの機能領域から始めてください。
使わないほうがよいのはどんなときか?
広いアーキテクチャ助言がほしい場合、単発のバグ修正をしたい場合、コードベース全体の一般的な要約がほしい場合には向きません。また、リポジトリの大半が非 JS/TS コードなら相性が悪いです。抽出スクリプトが JavaScript と TypeScript の関数パターンを前提としているためです。目的が完全一致のコピー検出だけなら、よりシンプルな copy-paste detector で十分です。
finding-duplicate-functions skill を改善する方法
スコープを絞り、判断したい対象を明確にする
品質を最も大きく上げるのは、レビュー範囲を狭めて、ほしい判断をはっきり書くことです。すべての重複を尋ねるのではなく、「src/utils における統合候補を、高確度のマージ優先で抽出してほしい」のように指定してください。そうすると、finding-duplicate-functions の使い方が改善します。モデルが、実際に競合関係にある関数同士を比較しやすくなるからです。
比較すべきケースを具体的に渡す
すでに怪しい組み合わせがあるなら、候補としてプロンプトに含め、その違いの可能性も添えてください。たとえば、「parseUserInput、normalizeInput、sanitizeInput を比較してほしい。重なる部分はあるかもしれないが、1 つは HTML escaping を扱う」といった形です。これにより、skill は真の重複と、語彙だけ似ている隣接 helper を区別しやすくなります。
よくある失敗パターンに注意する
主な失敗パターンは、似た名前の関数をビジネスルールの違いごと丸めてしまう過剰グループ化です。もう 1 つは、わずかな wrapper を別物として扱い、実際には引数の形や命名が違うだけなのに重複として拾えない過小グループ化です。どちらの場合も、入力、出力、期待動作に関する文脈を追加してください。表面的な類似ではなく、意図を判断できるようにするためです。
レポートからリファクタリングへ反復する
最初の実行後は、レポートを使って 1 つのカテゴリを選び、信頼度の高いグループからソースコードで手動確認します。境界的なグループがあれば、カテゴリを絞るか、より良いコンテキスト行と、より明確なしきい値で再実行してください。finding-duplicate-functions の最良の使い方は反復型です。最初の出力で範囲を整え、次のコード領域に対して再度実行します。
