見出し画像

Rubocopを使ったLintチェックのやり方

備忘録。


Rubocopとは

画像1

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チェックする」という習慣をつけると良いと思います。

この記事が気に入ったらサポートをしてみませんか?