#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
まずは自動で修正してくれる箇所を上記コマンドで修正する
$ 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