Ruby on RailsにRubocopを導入する方法

✏️️ 2019/08/16 👍️2019/08/29 🔗

Rubocopとは、Rubyの静的コードアナライザーおよびフォーマッターです。「コードがスタイルガイドと違うよ」 など指摘してくれます。

Rubocopをインストール

# Gemfile
group :development do
  gem 'rubocop', require: false
  gem 'rubocop-rails'
end
bundle install

Robocopの設定ファイルを作成

rubocopの設定ファイルを作成します。

touch .rubocop.yml
touch .rubocop_todo.yml

サンプルファイルです。リファクタリングしながら、自分なりの.rubocop.ymlを作成します。

# .rubocop.yml
inherit_from: .rubocop_todo.yml

require:
  - rubocop-rails

AllCops:
  TargetRubyVersion: 2.6
  Exclude:
    - app/channels/**/*
    - node_modules/**/*
    - bin/*
    - test/**/*
    - spec/**/*
    - lib/*
    - db/migrate/*
    - db/schema.rb
    - lib/tasks/*
    - public/*
    - tmp/*
    - vendor/**/*
    - config/spring.rb

Style/Documentation:
  Description: 'Document classes and non-namespace modules.'
  Enabled: false

Metrics/LineLength:
  Description: 'This cop checks the length of lines in the source code.'
  Max: 120

Style/ClassAndModuleChildren:
  Description: 'This cop checks the style of children definitions at classes and modules.'
  EnforcedStyle: compact

Style/FrozenStringLiteralComment:
  Enabled: false

使い方

解析結果を標準出力

bundle exec rubocop

.rubycop_todo.ymlに一旦警告を退避

bundle exec rubocop --auto-gen-config 

自動修正

bundle exec rubocop --auto-correct 

Rubocopを利用してリファクタリングする流れ

# 自動修正を実行
bundle exec rubocop --auto-correct 

# 警告を`.rubycop_todo.yml`に一旦警告を退避
bundle exec rubocop --auto-gen-config 

# .rubycop_todo.ymlを確認しながらコードを修正。修正が完了したら、
# .rubycop_todo.ymlの対象のルールを削除

上記を警告がなくなるまで繰り返します。

以上で、Ruby on RailsにRubocopを導入する方法は完了です。

参考

akito
日本のスタートアップで主にRuby on Railsを使ってプロダクト開発をしています。