1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-27

Rubocopのバージョンアップ作業の改訂版です。

Rubocopは頻繁にルールが改定されれるため、バージョンアップの際には設定やソースコードを見直さなければなりません。

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

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

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

0. 事前準備

Rubocopのバージョンアップ前に以下を済ませましょう。

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

1. バージョンアップ

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

# 例
bundle update rubocop rubocop-performance rubocop-rails

2. rubocop --autocorrectで自動修正

コードの問題点を修正します。

bundle exec rubocop --autocorrect spec/

rubocop には自動修正オプションが2種類あります。

  • rubocop --autocorrectはスペースの使い方など比較的安全な修正のみを行います。
  • rubocop --autocorrect-allはより野心的な修正を行います。

また、テストコードのみを自動修正するか、本体のコードまで自動修正してしまうかという、選択もあります。プロジェクトのテスト体制に応じて塩梅します。

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

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

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

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

rubocop --regenerate-todo で再生成します。

bundle exec rubocop --regenerate-todo --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp

なお以下のオプションを使うと git diff が読みやすくなります:

  • --no-exclude-limit: 問題のファイルが多くても全ファイル名が.rubocop_todo.ymlに出力されます。
  • --no-offense-counts: 問題点の出現数を出力しない
  • --no-auto-gen-timestamp: 生成日時を出力しない

5. rubocop を実行する

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

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

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

6. コードレビュー&テスト

通常のコードレビュー・テストを行います。

1
1
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
1
1