Posted at

RuboCopは自動修正のみ使うと捗る

More than 1 year has passed since last update.


RuboCopの解析結果をPull Requestにコメントするのをやめた

弊社ではprontoというライブラリを使って、RuboCopによる静的解析の結果をPull Request(以下PR)にコメントして自動コードレビュー的なことをしていた1。これをつい最近やめた。理由は下記の2つ。


理由1: フィードバックに意味がない

RubocopがPRのページに残す「メソッドの行数が長すぎる」などの指摘は、今のチームでは多くの場合トレードオフを踏まえた意図的な判断であり、改めてそれをコメントで指摘する意味はさほどない2


理由2: 人間が指摘を受けて直すのは無駄

RuboCopは多くの違反を自動修正できる。弊社ではこの機能を使い、Jenkinsから定期的に自動修正をかけてPRを出している。自動で修正できるにも関わらずコードフォーマットに対する指摘を人間が修正することは、その行為に副次的な価値が有る場合を除き時間の無駄である3


自動修正のやり方

下記のスクリプトをJenkinsから定期実行している。要hub

#! /bin/bash -xe


bundle
bundle exec rubocop --auto-correct $(git ls-files | grep -E -v "^(db|bin)" | grep "\.rb$") || true
git diff --exit-code && exit 0
git add .
timestamp=`date +'%Y%m%d%H%M'`
commit_comment="rubocop --auto-correct $timestamp"
git commit -m "$commit_comment"
git checkout -b rubocop-auto-correct-$timestamp
branch_name=`git name-rev --name-only HEAD`
git push -u origin $branch_name
hub pull-request -m "$commit_comment" -h proper-inc:$branch_name


まとめ

ということで、RuboCopでPRにコメントするのはやめて、RuboCopの自動修正のみ活用するようになった。自動修正でコードのお行儀的には及第点まで持っていける感触です。コードフォーマットが揃っているとノイズが少なくて読むのがかなり楽になる。ちなみにESlintCSScombも同じように使ってお行儀を維持しています。


おまけ





  1. 設定はonkcopをカスタマイズしたもの。 



  2. 教育的な効果が必要な場合はあるかも。 



  3. 同上