.rubocop.yml における対象バージョンの指定は省略できる
Ruby のプロジェクトではおなじみの Rubocop では、.rubocop.yml で基本的な設定を記述していると思います。
その中に対象となる Ruby のバージョンを指定する項目(TargetRubyVersion)があるのですが、これは省略できるという話です。
なぜ省略できるのか
バージョンを指定していない場合、Rubocop が別のファイルをたどって参照してくれるからです。
公式の説明は以下です。
If a
TargetRubyVersionis 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, andGemfile.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 のリポジトリにある設定ファイル内のコメントを見ると以下のようになっています。
TargetRailsVersion が指定されていない場合、Gemfile.lock または gems.locked ファイルを解析して Rails のバージョンを探してくれるようです。
自分が携わっているプロジェクトでも Gemfile.lock に Rails のバージョンが記載されているため TargetRailsVersion を省略することができました。
おわりに
.rubocop.yml において Ruby と Rails のバージョンの指定を省略できることを紹介しました。
TargetRubyVersion TargetRailsVersion を使用している場合は一度確認してみるとよいかもしれません。
Discussion