Help us understand the problem. What is going on with this article?

Rubocopのバージョンアップ作業

Rubocopは、バージョン毎に新しいCop(Lintのルール)が追加されたりCopの名前が変わったりします。そのためバージョンアップ後には、大抵は設定やソースコードを見直さなければなりません。

だいたい2週間に1回は行う作業なので、スムーズに作業できるよう手順を書き出しておきます。

0. 事前準備

普通の作業環境なら起きないはずですが・・・

  • ユニットテストが整備されていること
  • 現バージョンの rubocop を実行して通ること
  • gitツリー上に変更したファイルが無いこと(git status で確認できる)
  • 適切なgitブランチがチェックアウトされていること(git branch で確認できる)

1. バージョンアップ

rubocop や関連ライブラリのバージョンを上げます。

bundle update rubocop rubocop-performance rubocop-rails

2. ファイルを一括修正

rubocop --auto-correct で、バージョンアップで追加されたCopによる問題点を修正します。

  • .rubocop_todo.yml があるとチェックがスキップされるので一旦削除します。
  • アプリ本体のコードに--auto-correctを適用することができない場合1は、例えばspec/ のみを修正対象にします。
echo '---' > .rubocop_todo.yml
bundle exec rubocop --auto-correct spec/

3. 設定ファイルを修正する

以下のようなCop名が変更された事によるエラーが出ることがあるので、.rubocop.ymlを修正します。

Error: The `Layout/FirstParameterIndentation` cop has been renamed to `Layout/IndentFirstArgument`.

4. .rubocop_todo.yml を再生成する

rubocop --auto-gen-configで再生成します。

bundle exec rubocop --auto-gen-config --exclude-limit 99999 --no-offense-counts --no-auto-gen-timestamp

なお、オプションはお好みでつけてください:

  • --exclude-limit 99999: 問題のファイルが多くても全ファイル名が.rubocop_todo.ymlに出力されます(通常はファイル数が多いと.rubocop_todo.ymlには出力されなくなる)。
  • --no-offense-counts: 問題点の出現数を出力しない。出現数があるとgit diffが増えるため。
  • --no-auto-gen-timestamp: 生成日時を出力しない。日時があるとgit diffが増えるため。

5. rubocop を実行する

問題点が見つからないことを確認します。

bundle exec rubocop # => 問題が指摘されない

問題点が見つかったら、修正します。

6. テストする

--auto-correct などでコードを変更している場合は、もちろんテストします。Rubocop はたまに間違った修正をすることがあるので。


  1. 自動テストが未整備、万一の場合の影響が大きい、上司が怖いなど。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away