Rubocop Challenger 作者が教えるオススメの使い方。 〜 .rubocop_todo.yml 解消後も消さないで残しておくと良いことがあります!〜
1 ヶ月も前になってしまいましたが、クラッソーネの @yamat47 さんが拙作の rubocop_challenger を使って .rubocop_todo.yml
を解消した、というブログを書いて下さいました。
かつての自分と同じような課題を抱えていた方に自分の gem を役立てて頂けたのは本当に嬉しいです。 ブログ化までして下さった @yamat47 さん、本当にありがとうございます!
今年に入ってからちょっとずつ進めてたRuboCopのTodoとの戦いをまとめて記事にしました!こんな感じの、開発者向けの改善をするのもめちゃ好きです😀https://t.co/82F6xmAKko
— Takuya Yamaguchi (@yamat47) August 18, 2021
また、gem の README では Circle CI を使った方法しか紹介してなかったのですが、GitHub Actions を使った方法についても解説して頂いており、重ね重ね感謝感激です🙏 GitHub の README からもリンク貼らせて頂きました!
一方で、ひとつ気になったことが。。
自動で解消できるものがなくなって以降はRuboCop Challengerの仕組みが不要になったので、最後は削除してしまいました。
ありがとう、RuboCop Challenger...!!
待って! Rubocop Challenger は消さないで残しておくと良いことがあります!
Rubocop Challenger は v2.0.0 から bundle update 機能も兼ね備えています
本家 RuboCop の gem をアップデートする時、新しく追加された Cop によってエラーが出てしまった、という経験は無いでしょうか? このエラーの解消が億劫で gem のアップデートを放置してしまっている方もいるかも知れません。
Rubocop Challenger v1.0.0 のテーマは「負債の解消」だったんですが、 v2.0.0 からは「RuboCop との共生」だったりします。
誰にも話したこと無いので今始めて公表しました←
v2.0.0 以上の Rubocop Challenger では最初に RuboCop 関連の gem に対して bundle update
を実行するようになっています。
最新の RuboCop にアップデートした状態で Rubocop Challenge を実行するので、新しく追加された Cop に違反したコードがあった場合、その場で即 auto-correct
を実行し、以下のような PR を作成してくれます。
一方 dependabot も rubocop-rspec
v2.5.0 の bundle update の PR を作成してくれていますが、こちらは CI の RuboCop チェックでエラーになっています。
RuboCop の CI チェックをパスしないと merge 出来ない設定にしている場合も多いと思いますが、これを修正するのは地味に面倒です。
ちなみに違反したコードが存在しない場合は Re-generate .rubocop_todo.yml with RuboCop v1.21.0 のような PR が作成され、 bundle update
を実行しただけの PR が作成されます。
この機能は地味に便利なので、CI のスケジュール実行を使って週イチくらいで動かすのがオススメの使い方です。
v2.0.0 以降の RuboCop Challenger は Gemfile に含めない事をオススメします
v2.0.0
あたりから RuboCop Challenger を Gemfile に含めて実行すると、他の gem との互換性問題でエラーになるケースを確認しております🙏
現在では以下のように CI での実行時に gem install rubocop_challenger
を実行する方法をオススメしております。
# .circleci/config.yml version: 2 jobs: rubocop_challenge: docker: - image: circleci/ruby:3.0 working_directory: ~/repo steps: - checkout - run: name: Rubocop Challenge command: | gem install rubocop_challenger rubocop_challenger go \ --email=rubocop-challenger@example.com \ --name="Rubocop Challenger" workflows: version: 2 nightly: triggers: - schedule: cron: "30 23 * * 1,2,3" # 8:30am every Tuesday, Wednsday and Thursday (JST) filters: branches: only: - master jobs: - rubocop_challenge
こちらは完全に自分がやらかしたというか、会社で書いた以下のブログの内容が古いまま更新しなかったため、 Gemfile
に rubocop_challenger
を入れて使っている方が沢山 (?) いるかも知れません。
GitHub の README ですら間違っていたので、さっき慌てて修正しました。。
古い方法で使ってしまった皆さん、本当にすみません。。
rubocop_challenger
を Gemfile に含めるのが.rubocop_todo.yml
解消後にアンインストールしたくなる理由の一つだと思うので、これで使い続ける人が増えてくれると嬉しいです🙏
安全な auto-correct かどうかが分かります
特にアナウンスしていなかった気がするのでついでにご紹介しておくと、最新の Rubocop Challenger では「安全な auto-correct」かどうかが分かるようになっていて、 PR の本文に以下のような記述が入るようになっています。
RuboCop 公式によると「安全な auto-correct」の場合、元のソースコードが壊れる心配は無いとのことなので、 PR merge する際の判断材料にして頂ければ。