Rubocopとは
Rubocop(ルボコップ)とは、Railsアプリ開発において代表的なリンターです。
リンターとは、コードが一定の規則に従っているかをチェックし、従っていなければ違反警告を出してくれるツールです。
ここのコードは長すぎるね。とか、メソッド名変えようか。とか、インデント入れたほうがいいよ。とかをコマンド1つでターミナルに吐き出しててくれます。
これによりコードの書き方を統一できるため、テストと同様に現場では必須のツールです。
Rubocopを導入するための2ステップ
Rubocopを導入する手順を解説します。
手順①:Gemをインストールする
Gemは、Airbnb社が公開しているカスタマイズ済みのrubocop-airbnbというGemを使用するのがおすすめです。
普通にデフォルトのRubocopを導入してもいいのですが、デフォルトに加えてたくさんルールを追加しなければならず手間だからです。
という訳でインストールします。
Gemfile 追記
group :development, :test do
(省略)
gem 'rubocop-airbnb' # 追記
end
↓
$ bundle install
手順②:必要なファイルの作成
Rubocopの導入に必要なファイルを作成します。
.rubocop_airbnb.yml 新規
require:
- rubocop-airbnb
.rubocop.yml 新規
inherit_from:
- .rubocop_airbnb.yml
Rails:
Enabled: true
以上でRubocopの導入は完了です。
Rubocopの実行方法
準備は整ったので、Rubocopを実行してみましょう。
Rubocopの実行には「bundle exec rubocop」というコマンドを使います。
$ bundle exec rubocop
Inspecting 80 files
.....C...CC.....C...CCC...C...CC...CC.....C...CC....CC.C....
Offenses:
app/helpers/application_helper.rb:2:18: C: Airbnb/OptArgParameters: Do not use default positional arguments. Use keyword arguments or an options hash instead.
def full_title(page_title = '')
^^^^^^^^^^^^^^^
(省略)
65 files inspected, 35 offenses detected
コマンドを実行することで、ディレクトリ内のコードを全てチェックし、見つかった違反(Offenses)を書き出してくれます。
今回の場合、80ファイルを調べた結果35の違反が見つかったことがわかります。
Rubocopで見つかった違反の対処方法
見つかった違反に対しては、3つのアクションを取ることができます。
【1】ルールに従い、指摘箇所を修正する
【2】「このルールには従わない」という設定を追加する
【3】「このディレクトリはチェックしない」という設定を追加する
【1】は一番素直なパターンです。違反であると指摘されたものに対し、素直に修正します。
ただ、「違反と指摘されたものの、この書き方は変えたくない」というときもあると思います。そういう場合は【2】です。「このRailsプロジェクトではこのルールは無視します」と明示的に設定します。
また、特定のディレクトリはそもそもRubocopチェックをかけたくないという場合もあります。例えば中身が設定ファイルで、厳密に文法をチェックする必要がないときです。その場合は【3】です。
【2】と【3】の場合、rubocop.ymlというファイルに設定を書きます。
.rubocop.yml 追記(下記はあくまで例です)
(省略)
AllCops:
Exclude:
- 'bin/**'
- 'config/**/*'
- 'db/**/*'
- 'vendor/**/**/*'
- 'spec/*'
Style/TrailingCommaInHashLiteral:
Enabled: false
Style/BlockDelimiters:
Enabled: false
Layout/FirstHashElementLineBreak:
Enabled: false
Airbnb/OptArgParameters:
Enabled: false
Style/ColonMethodCall:
Enabled: false
Layout/IndentationConsistency:
Enabled: false
Layout/IndentationWidth:
Enabled: false
Style/MixinUsage:
Enabled: false
Style/MutableConstant:
Enabled: false
違反の修正が完了したら、もう一度「bundle exec rubocop」を実行して、エラーがなくなったかどうかチェックします。
$ bundle exec rubocop
Inspecting 80 files
............................................................
65 files inspected, no offenses detected
上記のように「no offenses detected」と表示されたらOKです。
これでRubocopの導入から初期修正は完了です。
まとめ
Rubocopの導入から初期修正が完了したら、その後は
$ bundle exec rubocop
上記のコマンドをこまめに実行して、適宜、違反を修正しましょう。
Rubocopは便利ですが実行し忘れで警告がたまってしまいがちです。
のちのち大量の警告を一度に修正するのは面倒なので、「git commitする前は必ずLintチェックする」という習慣をつけると良いと思います。