finding-duplicate-functions
コードベース内で意味的に重複している関数――同じ処理を行いながら異なる名前や実装を持つ関数――を洗い出す際に使用します。既存の関数を再利用せず新しい関数を生成しがちなLLM生成コードベースのレビューに特に有効です。
description の原文を見る
Use when auditing a codebase for semantic duplication - functions that do the same thing but have different names or implementations. Especially useful for LLM-generated codebases where new functions are often created rather than reusing existing ones.
SKILL.md 本文
重複する意図の関数の検出
概要
LLM生成のコードベースは意味的な重複が蓄積します。同じ目的を果たすが独立して実装された関数が発生します。古典的なコピペ検出器(jscpd)は構文的な重複は見つけますが、「同じ意図で異なる実装」は見落とします。
このスキルは2段階のアプローチを使用します。古典的な抽出の後、LLMを活用した意図のクラスタリング。
使用時期
- コードベースが複数の貢献者(人間またはLLM)によって有機的に成長している
- ユーティリティ関数が複数回再実装されていると疑われる
- 主要なリファクタリングの前に、統合の機会を特定する
- jscpd が実行済みで、構文的な重複はすでに処理されている
クイックリファレンス
| フェーズ | ツール | モデル | 出力 |
|---|---|---|---|
| 1. 抽出 | scripts/extract-functions.sh | - | catalog.json |
| 2. 分類 | scripts/categorize-prompt.md | haiku | categorized.json |
| 3. 分割 | scripts/prepare-category-analysis.sh | - | categories/*.json |
| 4. 検出 | scripts/find-duplicates-prompt.md | opus | duplicates/*.json |
| 5. レポート | scripts/generate-report.sh | - | report.md |
プロセス
digraph duplicate_detection {
rankdir=TB;
node [shape=box];
extract [label="1. Extract function catalog\n./scripts/extract-functions.sh"];
categorize [label="2. Categorize by domain\n(haiku subagent)"];
split [label="3. Split into categories\n./scripts/prepare-category-analysis.sh"];
detect [label="4. Find duplicates per category\n(opus subagent per category)"];
report [label="5. Generate report\n./scripts/generate-report.sh"];
review [label="6. Human review & consolidate"];
extract -> categorize -> split -> detect -> report -> review;
}
フェーズ1: 関数カタログの抽出
./scripts/extract-functions.sh src/ -o catalog.json
オプション:
-o FILE: 出力ファイル(デフォルト: stdout)-c N: キャプチャするコンテキスト行数(デフォルト: 15)-t GLOB: ファイルタイプ(デフォルト:*.ts,*.tsx,*.js,*.jsx)--include-tests: テストファイルを含める(デフォルトでは除外)
テストファイル(*.test.*, *.spec.*, __tests__/**)は、テストユーティリティが統合の候補になりにくいため、デフォルトで除外されます。
フェーズ2: ドメイン別の分類
scripts/categorize-prompt.mdのプロンプトを使用してhaikuサブエージェントをディスパッチします。
プロンプトテンプレートの指定された場所にcatalog.jsonの内容を挿入します。出力をcategorized.jsonとして保存します。
フェーズ3: カテゴリに分割
./scripts/prepare-category-analysis.sh categorized.json ./categories
カテゴリごとに1つのJSONファイルを作成します。3つ以上の関数を持つカテゴリのみ分析する価値があります。
フェーズ4: 重複の検出(カテゴリごと)
./categories/内の各カテゴリファイルについて、scripts/find-duplicates-prompt.mdのプロンプトを使用してopusサブエージェントをディスパッチします。
各出力を./duplicates/{category}.jsonとして保存します。
フェーズ5: レポート生成
./scripts/generate-report.sh ./duplicates ./duplicates-report.md
信頼度別にグループ化された優先順位付きマークダウンレポートを生成します。
フェーズ6: 人間によるレビュー
レポートをレビューします。HIGH信頼度の重複については:
- 推奨される後継関数がテストを持つことを確認
- 呼び出し元を後継関数を使用するように更新
- 重複を削除
- テストを実行
高リスク重複ゾーン
これらの領域の抽出に最初に焦点を当てます—最速で重複が蓄積します:
| ゾーン | 一般的な重複 |
|---|---|
utils/, helpers/, lib/ | 再実装された汎用ユーティリティ |
| バリデーションコード | 複数の方法で書かれた同じチェック |
| エラーフォーマッティング | エラーから文字列への変換 |
| パス操作 | パスの結合、解決、正規化 |
| 文字列フォーマッティング | ケース変換、切り詰め、エスケープ |
| 日付フォーマッティング | 繰り返し実装された同じフォーマット |
| APIレスポンス整形 | 異なるエンドポイントの類似変換 |
よくある間違い
抽出しすぎる: エクスポートされた関数とパブリックメソッドに焦点を当てます。内部ヘルパーは複数ファイル間で重複する可能性は低いです。
分類ステップをスキップする: カタログ全体で直接重複検出に進むとノイズが多くなります。カテゴリは比較に焦点を当てます。
重複検出にhaikusを使用する: Haikuは分類にはコスト効率的ですが、微妙な意味的重複を見落とします。実際の重複分析にはOpusを使用します。
テストなしで統合する: 重複を削除する前に、後継関数が削除される関数のすべてのユースケースをカバーするテストを持つことを確認します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- obra
- リポジトリ
- obra/superpowers-lab
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/obra/superpowers-lab / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。