ふとJetBrainsのブログを見ていたところ、
信頼できるベテランかコピペマスターか?という見出しで、dupFinderというツールを紹介されています。
これを用いることでC#もしくはVB.NETのソースに対して重複をチェックできます。
Resharperのコマンドラインツール一式をダウンロードするか、TeamCityのビルドステップで実施が可能です。
いずれにせよ、ライセンスフリーなのでお金はかかりませんので試さない手はないでしょう。
TeamCity
内蔵されているので、ビルドステップで、「Duplicates Finder(Resharper)」を選択すればオーケーです。
カンタンです。
あとは、以下のようにグラフィカルに確認できます。
私の200万行のコードは2380の重複が検索されました。
コマンドラインツールは?
xmlファイルとして出力されます。
このままでは何がなんだかわからないですね。xslを絡めるとhtmlで表示されることがわかるようですが。
dupFinder Command-Line Tool - Help | ReSharper
そこまではやらないかなーと言う感じです。
コマンドラインツールで行うのは全体的な統計データをみるくらいに私は考えてます。
- CodebaseCost ... 全体のコードサイズ
- TotalFlagmentsCost ... フィルタ適用後のコードサイズ
- TotalDuplicatesCost ... 重複した相対サイズ
本格的にやるなら、TeamCityでやるか、SonarQubeでやるかだと思います。
SonarQubeでもいいですが、TeamCityの方が重複箇所を見やすい印象です。
除外した方がいい項目
Designer.csについては、デザイナが自動生成するため、重複が発生しやすく警告メッセージで避けた方が良いとも出ます。
ですので、除外対象としても良いかと思います。
.Desiginer.csではなく**/.Desiginer.csとしないとサブフォルダ内のファイルが対象とされないようです。
その他
Resharperの標準機能となって、Visual Studioに統合されたウインドウとして表示されるといいですね。
また、NuGetからも取得が可能なようです。