jscpd – 不具合防止に。コードの重複をチェック!
DRY(Don’t repeat yourself)という概念があります。つまり同じコードは繰り返すなということです。もし繰り返す必要があるならば、それは関数にするなどまとめるようにしなければなりません。 DRYをなくしていくことでコードの可読性を高めたり、メンテナンスしやすくなります。そんなコードの改善を手助けしてくれるのがjscpdです。
jscpdのインストール
npmなのでインストールは簡単です。
$ npm install jscpd -g
jscpdの使い方
例えば以下のように使います。 –path でパスを指定し、 –languages でチェックする言語を指定します。
$ jscpd --path ~/Dropbox/markry --languages js,coffee
info: jscpd - copy/paste detector for programming source code, developed by Andrey Kucherenko
warn: File /Users/nakatsugawa/Dropbox/markry/.cpd.yaml not found in current directory
info: Files search time: { duration: '2370ms' }
info: Scaning for duplicates time: { duration: '0ms' }
info: Scaning... done!
info: Start report generation...
info: Found 0 exact clones with 0 duplicated lines in 0 files
100.00% (0 lines) duplicated lines out of 0 total lines of code.
info: Generate report time: { duration: '1ms' }
info: All time: { duration: '2379ms' }
特に重複するコードはなかったようです。別なケースで試してみます。
$ jscpd --path ~/some/path --languages ruby
info: jscpd - copy/paste detector for programming source code, developed by Andrey Kucherenko
warn: File /some/path/.cpd.yaml not found in current directory
info: Files search time: { duration: '36281ms' }
info: Scaning 302 files for duplicates...
info: Scaning for duplicates time: { duration: '3296ms' }
info: Scaning... done!
info: Start report generation...
info: Found 38 exact clones with 402 duplicated lines in 13 files
- .../app/controllers/articles_controller.rb:186 -197
.../app/controllers/articles_controller.rb:233 -244
:
- .../vendor/plugins/search_do/recipes/mode_maintenance.rb:2 -26
.../vendor/plugins/search_do/recipes/mode_maintenance.rb:28 -52
3.12% (402 lines) duplicated lines out of 12881 total lines of code.
info: Generate report time: { duration: '15ms' }
info: All time: { duration: '39607ms' }
なんと3.12%も重複するコードがあったようです。二つのファイルが並びますので、これをチェックしていくことでコードの重複をなくしていけるという仕組みです。
言語は以下に対応しています。
- Javascript
- CoffeeCcript
- PHP
- Python
- LESS
- Ruby
- Java
- C/C++
- C#
重複がなければ不具合がないという訳ではありませんが、その芽を先んじて摘むことはできるはずです。自分たちのプロジェクトでぜひ試してみてください。
jscpdはnode/JavaScript製のオープンソース・ソフトウェア(MIT License)です。