🟪

.rubocop.yml における対象バージョンの指定は省略できる

2024/10/02に公開

Ruby のプロジェクトではおなじみの Rubocop では、.rubocop.yml で基本的な設定を記述していると思います。
その中に対象となる Ruby のバージョンを指定する項目(TargetRubyVersion)があるのですが、これは省略できるという話です。

なぜ省略できるのか

バージョンを指定していない場合、Rubocop が別のファイルをたどって参照してくれるからです。
公式の説明は以下です。

https://docs.rubocop.org/rubocop/configuration.html#setting-the-target-ruby-version

If a TargetRubyVersion is not specified in your config, then RuboCop will check your project for a series of other files where the Ruby version may be specified already. The files that will be checked are (in this order): *.gemspec, .ruby-version, .tool-versions, and Gemfile.lock.

TargetRubyVersion でバージョンが指定されていない場合、*.gemspec, .ruby-version, .tool-versions, Gemfile.lock. の順に参照してくれるようです。

自分が携わっているプロジェクトでは .ruby-version でもバージョンを指定していたため TargetRubyVersion で指定しなくとも正しい Ruby のバージョンが Rubocop に認識されました。
これにより TargetRubyVersion の記載を省略でき、 Ruby のバージョンアップの際、変更対象のファイルを減らすことができました。

参照先のファイルの中に Ruby のバージョンを指定しているファイルがない場合や、Rubocop が対象とするバージョンとプロジェクトで使用しているバージョンをあえて別にしたい場合などは TargetRubyVersion を使うことになりそうです。

TargetRailsVersion も省略できる

Rails のプロジェクトで Rubocop を使用する場合、Rubocop の拡張機能である rubocop-rails をいれていることがあると思います。
その際、Ruby のバージョンと同様に対象の Rails のバージョンを指定する項目(TargetRailsVersion)があるのですが、こちらも同様に省略することができます。
rubocop-rails のリポジトリにある設定ファイル内のコメントを見ると以下のようになっています。

https://github.com/rubocop/rubocop-rails/blob/f9272b31dfa076f8b930503ef7e7b34eb539e46f/config/default.yml#L20-L27

TargetRailsVersion が指定されていない場合、Gemfile.lock または gems.locked ファイルを解析して Rails のバージョンを探してくれるようです。

自分が携わっているプロジェクトでも Gemfile.lock に Rails のバージョンが記載されているため TargetRailsVersion を省略することができました。

おわりに

.rubocop.yml において Ruby と Rails のバージョンの指定を省略できることを紹介しました。
TargetRailsVersion TargetRailsVersion を使用している場合は一度確認してみるとよいかもしれません。

SocialPLUS Tech Blog

Discussion