Rails 7.2で生成コードをRuboCop適用済みにする

Rails 7.2 から RuboCop がデフォルトになることから、以下の PR のとおり、今年の正月に DHH とやりとりして作ったちょっとした小技機能の紹介です。

github.com

Rails 7.2 の config/environments/development.rb でコメントアウトされている apply_rubocop_autocorrect_after_generate! を有効にすると bin/rails g したコードに対して自動で autocorrect が掛かるようになります。これはデフォルトでコメントアウトによって無効にされている設定です。

 # config/environments/development.rb
 Rails.application.configure do
   (snip)
   # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
-  # config.generators.apply_rubocop_autocorrect_after_generate!
+  config.generators.apply_rubocop_autocorrect_after_generate!
 end

rubocop-rails-omakase をそのまま使うケースがどの程度あるかは今後だと思うのですが、現状で多数派であろう RuboCop のルールをカスタム、あるいはほぼほぼデフォルト使用している方は有効にしておくと便利です。

なお、デフォルト無効の理由は rails/rails#51782 では、bin/rails new からのデフォルトである rubocop-rails-omakase で使う分には autocorrect が必要なコード生成がされるわけではないのに、冗長な RuboCop のログが表示されることと、RuboCop の処理による速度面によるものです。そのあとに rails/rails#51808 で RuboCop での冗長なログは行わないようにしましたが、処理速度に関してはなんとも判断が難しい部分があったため、特にコメントアウトを外す提案とはしませんでした。

これによって3年半ほど前に以下の記事に記した Rails 6.1 以降で以下の設定は不要になり、この apply_rubocop_autocorrect_after_generate! が公式のものになりました。

koic.hatenablog.com

個人的には bin/rails g はテスト実行などに比べて頻繁に使うものではないため、コード生成後に RuboCop のオートコレクト適用を自動で行うための処理速度のトレードオフは受け入れられるかなと思っているのですが、状況や個人差があると思います。bin/rails g 後に RuboCop の適用漏れのまま、PR を開いてしまう機会がある方にはとりわけおすすめです (bin/rails g migration ... で生成したファイルに frozen string literal マジックコメント漏れあるある) 。

いずれにしても rubocop-rails-omakase をそのまま使うなどのユースケースでなければ、有効にしてそれほど損はないかなと思っています。