##Rubocopとは
Rubyのコード解析ツール。Gem。
修正した方が良い書き方を指摘してくれたり、自動で修正してくれたりします。
##導入
group :development do
gem 'rubocop'
gem 'rubocop-rails'
$ bundle install
以下のコマンドで、コード解析が走ります。
$ rubocop
Inspecting 67 files
........CCC...CC.C..........................................CC.C...
67 files inspected, 24 offenses detected
-a
オプションをつけると、自動で修正できるところ(クォーテーションの種類を変えるなど)を修正してくれます。
$ rubocop -a
##設定ファイル
###.rubocop.yml
プロジェクトルートに作成して、無視するルールや無視するディレクトリ等を指定することができます。デフォルトは厳しすぎるので、大体何かしらの設定をすることになります。
inherit_from: .rubocop_todo.yml
require:
- rubocop-rails
# 対象外
AllCops:
Exclude:
- "vendor/**/*"
- "bin/**"
- "db/schema.rb"
- "node_modules/**/*"
- "tmp/**/*"
- "lib/**/*"
DisplayCopNames: true
TargetRubyVersion: 2.6
# trueかfalseを設定しないと警告が出る
Style/HashEachMethods:
Enabled: true
Style/HashTransformKeys:
Enabled: true
Style/HashTransformValues:
Enabled: true
##################### Style ##################################
# 日本語のコメントを許可する
Style/AsciiComments:
Enabled: false
# ドキュメントの無いpublic classを許可する
Style/Documentation:
Enabled: false
# !! のイディオムを許可
Style/DoubleNegation:
Enabled: false
#文字列をfreezeするか
Style/FrozenStringLiteralComment:
Enabled: false
# selfが無くても良い時に省略するか。model内において、ローカル変数とメソッド呼び出しの区別をつけた方が分かりやすい場合が多い
Style/RedundantSelf:
Enabled: false
##################### Lint ##################################
##################### Metrics ##################################
# 変数の代入(A)、メソッドの呼び出し等(B)、条件分岐(C)から算出される複雑度
Metrics/AbcSize:
Max: 30
# 循環的複雑度 ≒ 分岐の数
Metrics/CyclomaticComplexity:
Max: 10
# 1行の文字数
Metrics/LineLength:
Max: 160
Exclude:
- "db/migrate/*.rb"
# メソッドの行数
Metrics/MethodLength:
Max: 20
Exclude:
- "db/migrate/*.rb"
###.rubocop_todo.yml
--auto-gen-config
オプションをつけて実行すると、自動で生成されます。
$ rubocop --auto-gen-config
現在指摘されている部分の規約を書き出します。このファイルに書かれているルールは無視されます。いきなり全てを修正するのは難しいことが多いので、少しずつこのファイルの記述を減らしていけるように頑張りましょう。
##VSCodeとの連携
VScodeを使っていると、.rubocop.yml
で定義したルールに則ったLinterやFormaterを利用することができます。
(ルールに違反している箇所に下線が引かれ、ショートカットキーを押すとフォーマットされる)
有効化には以下の設定が必要です。
- 拡張機能
Ruby
をインストール - setting.jsonに以下の記述を追加
{
"ruby.useLanguageServer": true,
"ruby.lint": "rubocop",
"ruby.format": "rubocop"
}
コミット時に自動で走らせる
Rubocopの警告が出ている状態だとコミットできないようにします。
group :development do
gem 'pre-commit'
gem 'rubocop'
$ bundle install
$ pre-commit install
$ git config pre-commit.checks rubocop #この変更はプロジェクト内にしか影響しないので他の環境のことは考えなくてOK
$ pre-commit list
Rubocopに怒られるような記述をして、commit時にエラーが発生すればOK。
##参考