くりにっき

フルスタックキュアエンジニアです

rubocopでcop単位でコミットする

「rubocopでauto correct(自動修正)したものをコミットする時はまとめてコミットするのではなくてcop単位でコミットした方が後から履歴が見やすい」って言われたことがあったので実践してみました

rubocop --auto-correctしたものをまとめてコミットした時

こんな感じ

https://github.com/sue445/rubicure/commit/debe943

f:id:sue445:20170713000023p:plain

各cop単位で --auto-correct したものをコミットした時

こんな感じ

https://github.com/sue445/rubicure/compare/338f230...760c2d2

f:id:sue445:20170713000434p:plain

f:id:sue445:20170713115718p:plain

どのcopでどんな修正がされるかがコミットを見るだけで一発で分かると思います

面倒くさいので自動化した

rubocop実行後にコンソールに出力されたcop名に対して手動で rubocop --auto-correct --only ~ しつつコミットするのは意外に面倒くさいです

そこで rubocop --auto-correct --only ~git commit を自動化するためのスクリプトを作りました。ご査収ください

gist.github.com

使い方

アプリのディレクトリに移動して下記のようにスクリプトを実行するだけです

bundle exec ruby /path/to/rubocop_auto_correct_commit.rb

さっきのコミットもこのスクリプトでcommitしています

小ネタ

今回のポイントは rubocop --format=jsonjson出力しているところです

rubocopの実行結果をjsonで出せば他のツールから使いやすくて便利。

jsonの仕様はここを参照

https://github.com/bbatsov/rubocop/blob/v0.49.1/manual/formatters.md#json-formatter

追記

公開直後に有識者からの マサカリ 熱い反応><

id:onk

id:Pocke

2020/3/24追記

このスクリプトはgem化してるので使いたい人はこちらをご覧ください

sue445.hatenablog.com

github.com