[Rails]初学者によるRubocopの導入


はじめに

Rubocopとは、Rubyの静的コード解析ツール。
ruby-style-guide
に従って、ソースコードの修正・改善点を指摘してくれます。

また、インデントのずれや、不必要なスペース・改行などは特定のコマンドを打つことで自動で修正してくれるので、自分にとってはもちろん、他の人が見ても読みやすいコードに整形することが出来ます。
※あくまで初学者の観点で設定等を決めています。

導入

gemfile
gem 'rubocop', require: false
ターミナル
bundle install

使ってみる

ターミナル
bundle exec rubocop

実行すると、以下のような出力が得られます。

これらがRubocopが検知した修正点になります。
しかし、デフォルトのルール全てに従っていると、コードを書く際に気を配る点があまりにも増えてしまうので、自分やチーム内で許容するルールを設定することが出来ます。

設定をカスタマイズする

アプリケーションのディレクトリに
.rubocop.yml というファイルを作成し、その中に設定を記述します。

rubocop.yml
AllCops:
  # 除外するディレクトリを設定。例えばschemaやmigrationファイルなどは書き直すことが少ないため、検知対象外に
  Exclude:
    - bin/*
    - db/schema.rb
    - node_modules/**/*
    - db/migrate/*
    - vendor/**/*
  # Rails向けのチェックを行う
  Rails:
    enabled: true

# "Missing top-level class documentation comment."を無効
Style/Documentation:
  Enabled: false

# "Prefer single-quoted strings when you don't need string interpolation or special symbols."を無効
Style/StringLiterals:
  Enabled: false

# "Line is too long"を無効
Metrics/LineLength:
  Enabled: false

#'frozen_string_literal: true'を無効
Style/FrozenStringLiteralComment:
  Enabled: false

など様々な設定が可能です。
デフォルトの設定を参考にいろいろいじってみようと思います。

設定後、もう一度

ターミナル
bundle exec rubocop


すると、72filesが56filesと、先ほどよりも修正点が減っていることがわかります。

修正する

ターミナル
bundle exec rubocop --auto-gen-config

.rubocop.todo.yml というファイルが自動生成されます。
これにより、一時的に修正点を全て無効とみなされます。
ここでrubocopを実行すると、修正点がない状態になります。

.rubocop.todo.yml
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include.
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
Bundler/OrderedGems:
  Exclude:
    - 'Gemfile'

一例として、上記のような記述があります。
この記述を削除すると、該当部分の無効化していた修正点が復活します。
早速修正して行きますが、
Cop supports --auto-correct.
という記述がある場合、Rubocopが以下のコマンドで自動で修正してくれます。

ターミナル
bundle exec rubocop -a

今回修正したのは、Gemfileのgemの記述がアルファベット順になっていないのを正しい順番に並べ替えました。

まとめ

1.gemを導入し、.rubocop.ymlに設定をカスタマイズする
2.bundle exec rubocop --auto-gen-configを実行し、
 .rubocop.todo.ymlを生成する。
3..rubocop.todo.ymlに書かれている記述を1つ消し、修正する
4.3.を繰り返す。

実際の現場では、自動化されていてあまり自分で修正することはなさそうですが、
まだまだ初学者ですので、一つ一つ改善していって規約を確認し、
初めから読みやすいコードを書けるエンジニアになれるよう心がけます。