LoginSignup
16
1

More than 3 years have passed since last update.

Rubocop 静的コード解析ツール

Last updated at Posted at 2020-12-01

image.png

Rubocopとは

RubocopとはRubyコードが
「コーディング規約どおりに書かれているか」をチェックする静的コード解析ツール(Gem)です。
解析するコマンドを実行することによって「コードの長さ、無駄なスペース、インデント,メソッド名の変更...」
などのチェックを行ってくれます。
あくまでもRubocopの指摘はアドバイスなので厳しすぎるチェックは設定で変更が可能です。

所感

Webエンジニア1年生ということでまだまだ綺麗なコードを書くことが出来ず、
インデントのずれや半角スペースなど残したままPRを出してしまうことがあります。
以下でも述べますが、Rubocopを導入することで綺麗なコードにすることが出来ます。
綺麗というか、どのファイルもコーディング規約に従い統一されたコードになるので自分以外でも目の通しやすいコードになるはずです。
先輩エンジニアにコードを見てもらう前に一度試してはどうでしょうか!

導入してよかった点

  • エンジニア初学者からすると”綺麗なコード”というものを実感できる

  • PR提出前に修正コマンドを実行することにより開発途中の乱れたコードの修正してくれる

  • PRを提出した際にレビューコストを少なくできる

  • コードが統一されるので"別のファイルでは記述が違う"ということを避けられる

インストール

#Gemfileに追加してください
#開発環境のみで利用します

group :development do
  gem 'rubocop', require: false
  gem 'rubocop-performance', require: false
  gem 'rubocop-rails', require: false
  gem 'rubocop-rspec'
end

使用したコマンド


$ bundle exec rubocop

 # プロジェクトの中のrubyファイルを全てチェックしターミナルに出力する

$ bundle exec rubocop --auto-correct 

 # 自動修正

$ bundle exec rubocop --auto-gen-config 

 # 規約違反の一覧が表示される.rubocop.todo.ymlが生成される
 # .rubocop_todo.ymlに警告を一旦退避
 # 警告内容が.rubocop_todo.ymlに記述される

修正の流れ

1.

$ bundle exec rubocop --auto-correct 

まずは自動で修正してくれる箇所を上記コマンドで修正する

2.

$ bundle exec rubocop

自動修正が終了次第、上記コマンドを実行し警告されるファイルをターミナルに出力する
出力されたファイルの修正が終了次第、次の作業に取り掛かる(PR提出するなど)

3. 1、2を繰り返すことで自分のコーディング規約にそったコードが保たれる
  コーディング規約は.rubocop.ymlファイルに記述する
  RuboCopの挙動は.rubocop.ymlで設定する

.rubocop_todo.yml ファイル

開発途中からRubocopを導入すると大量の違反ファイルが指摘されます。
なので一旦既存のコードは無視するため、このファイルが存在します。
回避しているだけで違反している内容なので”.rubocop_todo.yml”ファイルを削除しても違反が指摘されないこと目指しましょう。

$ bundle exec rubocop --auto-gen-config 

上記コマンドで”.rubocop_todo.yml”ファイルが作成されます。

例).rubocop.yml

✳︎以下ファイルは見やすいように短縮してあります

inherit_from: .rubocop_todo.yml


require:
  - rubocop-rails
  - rubocop-rspec
  - rubocop-performance

Rails:
  Enabled: true

Rails/ActiveRecordCallbacksOrder: 
  Enabled: true

Rails/AfterCommitOverride: 
  Enabled: true

Rails/FindById: 
  Enabled: true


# 環境の種類
Rails/UnknownEnv:
  Environments:
    - production
    - staging
    - development
    - test

Rails/NotNullColumn:
  Enabled: false

AllCops:
  TargetRubyVersion: 2.6.3
  DisplayCopNames: true
  Exclude:
    - 'db/schema.rb'
    - 'vendor/**/*'
    - 'bin/**/*'

# クラスの行数
Metrics/ClassLength:
  Max: 100

# モジュールの行数
Metrics/ModuleLength:
  Max: 100

# ブロックの行数
Metrics/BlockLength:
  Exclude:
    - 'spec/**/*'

# メソッドの行数
Metrics/MethodLength:
  Max: 25

# メソッドの複雑度
Metrics/AbcSize:
  Max: 25
16
1
0

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
16
1