pockestrap

Programmer's memo

Gemfileでバージョン指定している時にコメントを強制するRuboCopの設定

TL;DR

Bundler/GemComment:
  Enabled: true
  OnlyFor:
    - git
    - github
    - version_specifiers

目的

私はGemfileではなるべくバージョンを指定せず、bundle updateによって常に最新のgemが使われることを意識しています。

# Gemfile

# bad
gem 'rubocop', '0.93.1'

# bad
gem 'rubocop', '~> 0.93'

# good
gem 'rubocop'

ところが、なにかしらの理由で最新のgemを使えないケースもあります。 そのような場合には仕方なくバージョンを指定したり、forkしたgitリポジトリを直接指定したりします。

つまり、バージョンを指定しているケースには全て理由があります。(それも、ほとんどはworkaround的な理由です)

その理由が失われないようにするため、Gemfileでバージョンやgitリポジトリを指定する際には必ずコメントを書くようにしたいと考えています。 これは記事冒頭のRuboCopの設定をすると実現できます。

設定の解説

簡単に設定を解説します。 冒頭の設定を再掲します。

Bundler/GemComment:
  Enabled: true
  OnlyFor:
    - git
    - github
    - version_specifiers

まず、Bundler/GemComment copはデフォルトでは無効であるため、Enabled: trueを指定して有効にする必要があります。

また、このCopはデフォルトでは全てのgemメソッド呼び出しに警告を出します。 これを「バージョン指定があるもの、もしくはgitリポジトリ指定があるもの」に限定するため、OnlyForを設定しています。


以上の設定で、Gemfileでバージョン指定しているけどコメントがない場合に、RuboCopが警告するようになります。 似た方針でGemfile内でバージョン指定を行っている方は、この設定をしてみてはいかがでしょうか。

なお、古いバージョンのBundler/GemComment copにはバグがあるため、RuboCop v0.90.0 以上の使用をおすすめします。