Gitの差分だけにRubocopを適用するGem、「Diffcop」を作ってRugyGemsに公開しました。
https://rubygems.org/gems/diffcop
githubプロジェクトはこちら
https://github.com/yohira0616/diffcop
いつもながら説明文の英語は適当です。ノリと直観にまかせて書きました。
なぜ作ろうと思ったか
ある程度最初からプロジェクト構成がかっちりしたプロジェクトであれば、ソースコードの品質を維持するために、コードレビューに加え何らかの静的解析ツールを入れ、静的解析の結果臭いコードが0件の状態を維持することはおそらく常識となっているかと思います。
しかしながら、スタートアップの立ち上げプロダクト等、最初のフェーズで勢いを重視してこのようなソースコードの品質維持の体制を作っていなかった場合、ある程度プロダクトが成長してきて「そろそろソースコード全体の品質を維持していこう」となったときに、この静的解析ツールが効果をなさないことがあります。
なぜかというと、「警告が10000個あるため直しきれない。14325個の警告が、14326個のエラーになったところで誰も気づかない」いわゆる「割れ窓理論」という状況が発生しうるからです。
この場合、後から静的解析ツールを入れたとしても誰もその警告状況に注意を払うことはありません。つまり入れても意味をなさない、ということになるわけです。
もちろん、大量の警告を一度に処理できるわけもないので、取れる次善策は「徐々に改善していく」という手段となります。
そこで、「せめて自分の修正した範囲くらいは静的解析も通そうよ」という思いをこめてこのツールを作り公開しました。地道な改善の上にしか、技術的負債を返済していく方法はないと思っています。
使い方
Gemfileに
gem 'diffcop' require: false
追記して(開発用ツールなのでrequireオプションはfalseで大丈夫)
bundle exec diffcop
するだけ。--auto-correct オプションをtrueにしてるので勝手に修正します。(起動オプションを指定できるように修正したい)