Railsでrubocopを使って構文チェックする方法

プログラミング
2019年06月25日 10:00

概要

Railsを使ってウェブアプリケーションのコードを書いている際に、構文規則に則ってコードが書かれているかチェックしたいという事があると思います。
このような時に使えるものにrubocopというgemがあります。

今回は、このrubocopを使った構文規則のチェックを行う方法を紹介します。

環境

  • Rails 5.2
  • rubocop 0.71.0

rubocopとは

今回構文規則のチェックにはrubocopというgemを使用します。
これは、RailsだけでなくRubyで書かれたコード全てで使う事ができます。
もともと、Rubyで書かれたコード全般で使う事が想定されていたため、rubocopひとつに、Railsのための構文規則のチェックのルールが入っていたなど中々ヘビーなgemでしたが、最近になってrubocopは「rubocop」「rubocop-performance」「rubocop-rails」に分離しました。
rubocop-performanceはパフォーマンスに関わる構文規則のチェック、rubocop-railsではRailsに関わる構文規則のチェックをするためのものですが、rubocopから分離した事で、これらをチェックしたい場合は、rubocopと一緒に改めてインストールしなければならなくなりました。

古い記事はこの分離に対応した内容になっていないこともあるため、そのままではうまくrubocopの設定ができない事があると思うので、気をつける必要があります。

今回は、Railsで使うことを想定しているためrubocopとrubocop-rails、さらにパフォーマンスについてもチェックしたいという事でrubocop-performanceもインストールする方法を紹介します。

インストール

インストールは簡単です。Gemfileに次のものを書きます。

gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false

require: falseとなっているのは、Railsなどのアプリケーションの方で読み込まないようにするためです。

次のコマンドでインストールします。

bundle install

これでインストールができました。

設定

インストールを終えたら、次にrubocopの設定をします。

設定は、アプリケーションのルートディレクトリに.rubocop.ymlと名前で作成します。
.rubocop.ymlでは、rubocopの設定を書くわけですが、ここではrubocop-performanceやrubocop-railsの使用についてや、rubocopでの構文規則のチェックの無効化を設定します。
次に、例を載せます。

require:
  - rubocop-performance
  - rubocop-rails

AllCops:
  Exclude:
    - 'db/**/*'
    - 'config/**/*'
    - 'script/**/*'
    - 'node_modules/**/*'
    - 'bin/*'
    - '**/Gemfile'

requireでは、rubocop-performanceやrubocoop-railsを使用することを書いています。
AllCopsのExcludeではrubocopによって解析をしないディレクトリやファイルを指定しています。

rubocopではあらかじめ推奨される構文規則が設定されているため、このままでもすぐに使う事ができます。
しかし、その設定は少し厳しすぎる事があります。
そのような時には、一部の設定を無効にしたい、または緩くするという事ができます。
例えば、テストの記述の際に行数が長くなりrubocopがMetrics/BlockLengthに関するエラーを表示する事があります。
そのような場合は、次のようにする事でテストに関するファイルが置かれているtestディレクトリでその設定を無効にできます。

Metrics/BlockLength:
  Exclude:
    - 'test/**/*'

他にも、1行に記述できる文字数についての設定もあるのですがそれを無効にしたい場合は次のようにします。

Metrics/LineLength:
  Enabled: false

このように、設定を利用者自身が変えていく事ができ、自分好みにカスタマイズできます。

使い方

設定を終えたら、実際に使ってみましょう。

使い方は簡単で、次のコマンドを実行します。

rubocop

これでチェックが始まり、結果が表示されます。

rubocopではrubocop自身が適切に構文を変える事ができる場合があります。
そのような時に、自動的にコードを変えて欲しい場合は次のようにコマンドにオプションをつけます。

rubocop --auto-correct

使い方はかなり単純です。

さいごに

rubocopによる構文規則のチェックは簡単にできます。

皆さんのプロジェクトでも導入を考えてみてはどうでしょうか。