LoginSignup
55
47

More than 3 years have passed since last update.

VSCodeでRubocopを使う

Last updated at Posted at 2020-03-22

Rubocopとは

Rubyのコード解析ツール。Gem。
修正した方が良い書き方を指摘してくれたり、自動で修正してくれたりします。

導入

Gemfile
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に以下の記述を追加
setting.json
{
  "ruby.useLanguageServer": true,
  "ruby.lint": "rubocop",
  "ruby.format": "rubocop"
}

コミット時に自動で走らせる

Rubocopの警告が出ている状態だとコミットできないようにします。

Gemfile
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。

参考

55
47
2

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
55
47