「rubocopでauto correct(自動修正)したものをコミットする時はまとめてコミットするのではなくてcop単位でコミットした方が後から履歴が見やすい」って言われたことがあったので実践してみました
- rubocop --auto-correctしたものをまとめてコミットした時
- 各cop単位で --auto-correct したものをコミットした時
- 面倒くさいので自動化した
- 追記
- 2020/3/24追記
rubocop --auto-correctしたものをまとめてコミットした時
こんな感じ
https://github.com/sue445/rubicure/commit/debe943
各cop単位で --auto-correct したものをコミットした時
こんな感じ
https://github.com/sue445/rubicure/compare/338f230...760c2d2
どのcopでどんな修正がされるかがコミットを見るだけで一発で分かると思います
面倒くさいので自動化した
rubocop実行後にコンソールに出力されたcop名に対して手動で rubocop --auto-correct --only ~
しつつコミットするのは意外に面倒くさいです
そこで rubocop --auto-correct --only ~
と git commit
を自動化するためのスクリプトを作りました。ご査収ください
使い方
アプリのディレクトリに移動して下記のようにスクリプトを実行するだけです
bundle exec ruby /path/to/rubocop_auto_correct_commit.rb
さっきのコミットもこのスクリプトでcommitしています
小ネタ
今回のポイントは rubocop --format=json
でjson出力しているところです
rubocopの実行結果をjsonで出せば他のツールから使いやすくて便利。
jsonの仕様はここを参照
https://github.com/bbatsov/rubocop/blob/v0.49.1/manual/formatters.md#json-formatter
追記
公開直後に有識者からの マサカリ 熱い反応><
実行順によっては更に offence が増える可能性があるので 2 回回してください。この辺の取り回しどうすべきかなぁって悩んでるんだよねぇ orz
— Takafumi ONAKA (@onk) 2017年7月13日
RuboCop は offense の内部状態としてAuto-Correct可能かどうかを持っていて、なんでそれが使われていないのだろうと見てみたらJSON formatter でその状態を出力していないっぽい / “ruboc…” https://t.co/NBmUolXarz
— Pocke(ぽっけ) (@p_ck_) 2017年7月13日
2020/3/24追記
このスクリプトはgem化してるので使いたい人はこちらをご覧ください