8
2

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 3 years have passed since last update.

RubyAdvent Calendar 2021

Day 10

RuboCop のエラーを全て todo に放り込んで安寧を得る

Last updated at Posted at 2021-12-09

RuboCop のエラーが多すぎて何から手をつければいいかわからない!という事態が、発生するところでは発生するらしいです。
主に、RuboCop のメンテがうまく行っていない場合に。

そんな時に、ある程度の作業をもって RuboCop を正常終了させるやり方を記載します。

前提

  • RuboCop がアプリケーションに導入されている
  • RuboCop が開発環境に install されている
  • bundle exec rubocop を実行するとエラーが大量に発生して、正直手をつけられない

ゴール

  • bundle exec rubocop が正常終了すること
  • 既存コードの問題はスルーされて、新規の違反があった時だけ指摘されるようにすること

試したバージョン

  • rubocop: 1.22.3

やり方

光の技術

光の技術は、実施するだけで皆が拍手で歓迎してくれるような作業です。

layout 系の自動修正

下記コマンドを実行して layout 関連の変更を自動で適用します。

$ bundle exec rubocop --fix-layout

自動修正でも少し layout が変になることがあるので、その場合は手動で修正します。
layout 関連の変更なので、基本的に安全な変更になります。

lint 系の自動修正

下記コマンドを実行して lint 系の変更を自動で適用します。

bundle exec rubocop -l -a

-a オプションで実行するので、基本的に安全な変更になります。
https://docs.rubocop.org/rubocop/usage/auto_correct.html#safe-auto-correct

罪の技術

ここからは罪を背負いながら行う作業です。

rubocop_todo.yml の作成

下記コマンドで、 rubocop_todo.yml を自動生成します。
https://docs.rubocop.org/rubocop/configuration.html#automatically-generated-configuration

$ bundle exec rubocop --auto-gen-config --exclude-limit 999999

--exclude-limit 999999 を指定することで、 RuboCop の exclude の default 値である 15 を超えたファイルを exclude に指定できるようになります。

rubocop:todo コメントの一括追加

rubocop --auto-gen-config では、 Metrics/AbcSize などで違反しているファイルを exclude に指定してくれません。
そのため、違反している箇所に直接 rubocop:todo を記載します。
rubocop:todorubocop:disable のエイリアスです。
https://docs.rubocop.org/rubocop/configuration.html#disabling-cops-within-source-code

個別に対応するのは大変なので下記コマンドで、 rubocop:todo コメントを一括追加します。

$ bundle exec rubocop --auto-correct --disable-uncorrectable

確認

RuboCop を実行して、正常終了するかを確認します。

$ bundle exec rubocop

違反が見つかった場合は、手動で rubocop:todo コメントをつけるなどで違反を解消します。
RuboCop の実行が正常終了すると、作業終了です。

罪の意識を対価に安寧を得ます。

おまけ

罪の意識に苛まれて、贖罪のために書きました。
(書くことで、自分と同じ気持ちになる人を生み出す可能性もあるのですが、気づかなかったことにします)

生み出されてしまった、 rubocop_todo.yml に関しては、 RuboCop Challenger を使用して解消していく手法が紹介されています。安心ですね。
https://tech.crassone.jp/posts/resolve-rubocop-todos-step-by-step

それでは、良きコーディングライフを。

8
2
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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?