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:todo
は rubocop: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
それでは、良きコーディングライフを。