より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

重複を検出するツールdupFinder

ふとJetBrainsのブログを見ていたところ、

blog.jetbrains.com

信頼できるベテランかコピペマスターか?という見出しで、dupFinderというツールを紹介されています。

これを用いることでC#もしくはVB.NETのソースに対して重複をチェックできます。

Resharperコマンドラインツール一式をダウンロードするか、TeamCityのビルドステップで実施が可能です。

いずれにせよ、ライセンスフリーなのでお金はかかりませんので試さない手はないでしょう。

TeamCity

confluence.jetbrains.com

内蔵されているので、ビルドステップで、「Duplicates Finder(Resharper)」を選択すればオーケーです。

カンタンです。

f:id:rimever:20190129225831p:plain

あとは、以下のようにグラフィカルに確認できます。

私の200万行のコードは2380の重複が検索されました。

f:id:rimever:20190129232937p:plain

コマンドラインツールは?

xmlファイルとして出力されます。

f:id:rimever:20190129234113p:plain

このままでは何がなんだかわからないですね。xslを絡めるとhtmlで表示されることがわかるようですが。

dupFinder Command-Line Tool - Help | ReSharper

そこまではやらないかなーと言う感じです。

コマンドラインツールで行うのは全体的な統計データをみるくらいに私は考えてます。

  • CodebaseCost ... 全体のコードサイズ
  • TotalFlagmentsCost ... フィルタ適用後のコードサイズ
  • TotalDuplicatesCost ... 重複した相対サイズ

本格的にやるなら、TeamCityでやるか、SonarQubeでやるかだと思います。

SonarQubeでもいいですが、TeamCityの方が重複箇所を見やすい印象です。

除外した方がいい項目

Designer.csについては、デザイナが自動生成するため、重複が発生しやすく警告メッセージで避けた方が良いとも出ます。

ですので、除外対象としても良いかと思います。

f:id:rimever:20190130220924p:plain

.Desiginer.csではなく**/.Desiginer.csとしないとサブフォルダ内のファイルが対象とされないようです。

その他

Resharperの標準機能となって、Visual Studioに統合されたウインドウとして表示されるといいですね。

また、NuGetからも取得が可能なようです。

www.nuget.org