プログラミングでやってはいけないことの一つにコピペがあります。場合によっては必要不可欠な時もありますが、基本的にコピペするなら関数にまとめたり、ライブラリ化することでコードの重複をなくすべきでしょう。 そこで使ってみたいのがcccvです。ソースコードを差分から洗い出して、コードの重複がないかチェックしてくれるソフトウェアです。

cccvの使い方

インストールはGoで行います。

$ go get github.com/artemave/cccv

使い方としてはDiffを渡す形です。

$ git diff master | cccv
Possible copy/paste sources:
app/controllers/sessions_controller.rb:
9:     if params[:rememberme]
10:       expiration = expire = Time.now.to_i + 1209600
12:       expiration = Time.now.to_i + 172800
13:       expire     = 0
app/helpers/application_helper.rb:
74:       expiration = Time.now.to_i + 172800
75:       expire     = 0

修正した部分と、元々のコードで重複する部分を洗い出してくれます。これにより、同じような修正であればリファクタリングできる可能性が高くなります。元々のソースコード全体を洗ってくれる訳ではないので、コミットログなどから全体を見直すと言ったような工夫が必要そうです。

cccvはGo製のオープンソース・ソフトウェア(MIT License)です。

artemave/cccv