Repolode
Rafaelpta

Rafaelpta/dupehound

識別子が変更されたAIエージェントのコピーコードも検出できる、ローカルで動作する決定論的な重複コード検出ツールです。

スター
101
フォーク
10
未解決の Issue
3
最終コミット
2 か月前

これは何?

dupehoundは、コードの大部分をAIエージェントが書くようなコードベース向けの、コマンドライン重複コード検出ツールです。tree-sitterで各関数を解析し、識別子とリテラルを正規化してコード構造のフィンガープリントを作成するため、名前が変更されたコピーも元のコードと照合できます。

3つのコマンドを備えています。scanは重複コードのまとまりとリポジトリ単位のslopスコアを報告し、historyはgitの履歴全体で重複の推移をグラフ化して、増加した時期を示します。checkは変更によって既存コードとの重複が生じた場合にCIやpre-commitを失敗させ、再利用すべき関数名を示します。APIキーやAIモデルは不要で、完全にオフラインで動作し、実行するたびに同じ結果を返します。

コーディングエージェントが編集中にcheckやscanを呼び出せるよう、MCPサーバーモードも提供しています。対応言語はTypeScript、Python、Rust、Go、Java、C#、Kotlinなど多数です。

主な機能

  • 01テキストではなくコード構造のフィンガープリントを使い、名前が変更されたコピーも検出
  • 02scanで重複コードのまとまりとリポジトリ単位のslopスコアを報告
  • 03historyコマンドでgitのコミット履歴全体にわたる重複の推移をグラフ化
  • 04checkコマンドで新たな重複がある場合にCIとpre-commitを失敗させる
  • 05AIやネットワーク接続なしで、オフラインかつ決定論的に動作
  • 06checkとscanをMCPツールとしてコーディングエージェントに公開

ユースケース

  • リポジトリにすでに存在する関数をAIコーディングエージェントが再実装するのを防ぐ
  • CIでプルリクエストをチェックし、新たな重複コードをマージ前に検出する
  • 大規模なコードベースで、履歴を通じて重複がどのように増えていくかを追跡する

クイックスタート

  1. 1

    cargoでインストールする

    cargo install dupehound
  2. 2

    ディレクトリ内の重複をスキャンする

    dupehound scan [path]

使う前に知っておきたいこと

  • historyコマンドとcheckコマンドを使うには、gitがPATH上にある必要があります。
  • --include-classesフラグと--containmentフラグは実験的な機能で、明示的に有効にする必要があります。

収録されている特集

トピック

よくある質問

dupehound とは?
識別子が変更されたAIエージェントのコピーコードも検出できる、ローカルで動作する決定論的な重複コード検出ツールです。 dupehoundは、コードの大部分をAIエージェントが書くようなコードベース向けの、コマンドライン重複コード検出ツールです。tree-sitterで各関数を解析し、識別子とリテラルを正規化してコード構造のフィンガープリントを作成するため、名前が変更されたコピーも元のコードと照合できます。
dupehound は無料で使えますか?ライセンスは?
dupehound は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
dupehound は今もメンテナンスされていますか?
半年以内に更新あり。dupehound の最終コミットは 2026年9月21日 です。
dupehound は何に使えますか?
リポジトリにすでに存在する関数をAIコーディングエージェントが再実装するのを防ぐ CIでプルリクエストをチェックし、新たな重複コードをマージ前に検出する 大規模なコードベースで、履歴を通じて重複がどのように増えていくかを追跡する
dupehound のインストール方法は?
cargoでインストールする: cargo install dupehound ディレクトリ内の重複をスキャンする: dupehound scan [path]
dupehound はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/Rafaelpta/dupehound

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト