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