1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-10-05

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?