41
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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. 同上

41
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?