LoginSignup
15
11

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-05-20

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. 自動テストが未整備、万一の場合の影響が大きい、上司が怖いなど。 

15
11
0

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
15
11