rubocop gem の設定を調整するのが大変だと思っていたので、 standard gem の設定を元にすることにしました。 standardrb コマンドは今回は使いませんでした。

動作確認バージョン

1.0.0 は今日リリースされていました。

基本設定

RuboCoping with legacy: Bring your Ruby code up to Standard — Martian Chronicles, Evil Martians’ team blog を参考にすると最低限の設定は、以下のようになりそうです。

inherit_mode:
  merge:
  - Exclude

require:
- rubocop-performance
- standard/cop/semantic_blocks

inherit_gem:
  standard: config/base.yml

inherit_mode はなくても良さそうですが、後で使うために付けています。

rubocop デフォルトとの主な違い

Style/StringLiteralsLayout/SpaceInsideHashLiteralBraces のデフォルトの違いが一番影響がありそうです。

rubocop のデフォルトの方に合わせるなら、 https://docs.rubocop.org/rubocop/cops_style.html#stylestringliterals などを参考にして、 以下の設定を追加すれば良さそうです。

Style/StringLiteralsInInterpolation:
  EnforcedStyle: single_quotes

Layout/SpaceInsideHashLiteralBraces:
  EnforcedStyle: space

standard gem の設定は inherit_gem を見ればわかるように、 https://github.com/testdouble/standard/blob/master/config/base.yml にあるので、迷う設定はこのファイルと rubocop のドキュメントを見比べて考えることになりそうです。

TargetRubyVersion

standard gem の設定だと AllCopsTargetRubyVersion: 2.5 が入っていて、 .ruby-version をみてくれない、というのも注意が必要そうです。

rubocop-rails

すべての rubocop-rails の cop を有効にするには、以下の設定の追加が必要でした。

require:
# ...
- rubocop-rails

AllCops:
  # ...
  NewCops: enable

Rails:
  Enabled: yes

全体例

今回は小さい rails アプリで試して、 rubocop のデフォルトから standard のデフォルトに全部切り替えることにしたので、 個別の設定調整なしで以下のようにしてみました。

inherit_mode:
  merge:
  - Exclude

require:
- rubocop-performance
- rubocop-rails
- standard/cop/semantic_blocks

inherit_gem:
  standard: config/base.yml

AllCops:
  TargetRubyVersion: 2.6
  Exclude:
  - 'bin/*'
  - 'config/initializers/simple_form*.rb'
  - 'db/schema.rb'
  NewCops: enable

Rails:
  Enabled: yes

他 cop

standard gem の設定だと無効になっている cop も多いので、 余裕があれば、 Rails のように department まるごと enable にして試すと良さそうです。

例えば Style をまとめて有効にするには以下のようになります。

Style:
  Enabled: yes

最後に

rubocop のすべての cop を有効にすると大変なので、 standard gem の設定を使う方法を紹介しました。

standardrb コマンドだとコマンドの使い方も実行したときの出力も違っていて、 そこまで一気に切り替えて慣れるのは大変そうだったので、 rubocop のまま standard gem ベースの設定を使うようにしました。

rubocop-rails などの他の gem の設定を追加するのも standardrb だと 追加で調べる必要がありそうなのも、避ける理由になりました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published