目的
コーディングルールが浸透していない Rails アプリケーションに Lint ツールを導入する
RuboCop とは
github.com
- RuboCop is a Ruby static code analyzer. というわけで平たくいうと Lint ツール
- たくさんの設定項目があり、微調整できるとのこと
導入
導入の仕方は README の通り Gemfile に下記を追記する
gem 'rubocop', '~> 0.51.0', require: false
$ bundle exec rubocop -v
使い方
// カレントディレクトリ配下のすべての Ruby ファイルをチェックする
$ bundle exec rubocop
// 指定したディレクトリ(今回は app/)配下の Ruby ファイルをチェックする
$ bundle exec rubocop app/
チェック項目
- あくまで一例だが、下記の項目などがチェック対象になる
- ハッシュの
{
の後ろと }
の前にスペースがあるか?
- 文字列補完が必要ないのにダブルクォートを使っていないか?
- 一行あたりの文字数が 80 文字以内か?
- メソッドの
return
が省略できる場合に省略しているか?
- メソッドの処理がない時は一行で書いているか?
- 代替メソッドの提案
- 例えば
xx == 0
の代わりに xx.zero?
は使えないか?などをチェックしてくれる
独自ルールの適用
AllCops:
TargetRubyVersion: 2.4
既存のアプリケーションに導入してみる
事前準備
$ bundle exec rubocop --display-cop-names
- 現在の状態をチェックした上で todo ファイルを作る (.rubocop_todo.yml ファイルが作られる)
$ bundle exec rubocop --display-cop-names --auto-gen-config
- RuboCop の設定ファイル .rubocop.yml を作る
// .rubocop_todo.yml を読み込むようにしておく
$ echo "inherit_from: .rubocop_todo.yml" >> .rubocop.yml
- 上記の手順で設定ファイルを用意し、再度チェックを走らすと .rubocop_todo.yml に記載された問題が無視され、検出されない状態になる
- .rubocop_todo.yml から 1 つの問題を削除する (例えば Style/StringLiteralsInInterpolation)
- この状態で rubocop を走らせるとエラーが検知されるので対象ファイルを修正する
- ちなみに Style/StringLiteralsInInterpolation は
--auto-correct
対象なので、オプションを付ければ自動で修正される
$ bundle exec rubocop --display-cop-names --auto-correct