RuboCop使ってみた
はじめに
RuboCopを初めて触ってみたので、備忘のために導入から使用方法まで大まかに記載します。
これから本格的に使っていくので、もし間違いなどがあれば教えていただけると幸いです。
RuboCopとは
コーディング規約に沿って、コーディングできているかを確認できる「静的コード解析ツール」。
つまり、自分のコードが規約に沿って書かれているかをチェックするためのツール。
複数人開発の際にはもちろん、個人開発の場合でも綺麗なコードを書き、品質を維持することに越したことはないので、使ってみて損はない。
インストール
RuboCopはgemを使って簡単にインストールできる。
Gemfileに以下を記載。
gem 'rubocop', require: false
gem 'rubocop-rails'
そしてお決まりの下記コマンド。
$bundle install
これでOK。
使い方
ターミナルでrubocopコマンドを実行するだけ。
$ rubocop
Inspecting 58 files
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
.
.
58 files inspected, 199 offenses detected
その結果出た警告を修正してまたrubocopコマンドを実行するような流れ。
ただデフォルトの設定だとRuboCopのコーディング規約は厳しいので、相当な数の警告がでる。
そこで、RuboCopのルールを自分なり(もしくはチームなり)に作成することで、実際は使う。
まずは以下のコマンドを用いて、
.rubocop.yml
.rubocop_todo.yml
を作成する。
$ rubocop --auto-gen-config
このコマンドによって作成された上記の2つのファイルの役割は、
.rubocop.yml ・・・ 自分なり(チームなり)のコーディングルールを定めるファイル
.rubocop_todo.yml ・・・無視するルールを定めるファイル
である。
.rubocop.ymlを巷で見つけた以下の設定に変更。
併せて.rubocop_todo.ymlも空にしておく。
inherit_from: .rubocop_todo.yml
# 追加した規約ファイル読込
require:
- rubocop-rails
AllCops:
# Rubyバージョン指定
TargetRubyVersion: 2.6
# 除外
Exclude:
- "config.ru"
- "bin/**"
- "lib/**"
- "db/**/*"
- "config/**/*"
- "script/**/*"
- !ruby/regexp /old_and_unused\.rb$/
# 日本語でのコメントを許可
AsciiComments:
Enabled: false
# クラスのコメント必須を無視
Documentation:
Enabled: false
# モジュール名::クラス名の定義を許可
ClassAndModuleChildren:
Enabled: false
# 文字リテラルのイミュータブル宣言を無視(freezeになるのはRuby3以降)
Style/FrozenStringLiteralComment:
Enabled: false
この上でrubocopコマンドを実行すると、先程よりだいぶ数が減っているはずである。
$rubocop --auto-correct
ただ俄然数は多いので、そういった場合には$rubocop --auto-correctのコマンドで、rubocopが自動修正をしてくれる。
$ rubocop --auto-correct
Inspecting 19 files
CC..............C.C
Offenses:
spec/spec_helper.rb:93:1: C: [Corrected] Layout/CommentIndentation: Incorrect indentation detected (column 0 instead of 2).
# Kernel.srand config.seed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.
.
56 files inspected, 30 offenses detected, 15 offenses corrected
ここで、[corrected]と出ているところが、自動修正してくれたところである。
今回のケースで言えば、15箇所の自動修正をしてくれたということである。
あとは、残っているcopを確認し、修正するか、もしくは無視するかを決め、対応を行う。
そして再度rubocopコマンドを実行する。といったような流れである。
ある箇所のみ警告を無視するか、もしくは警告自体を出ないようにするか対応を取ることができる。
警告を無視する
こちらでまとめていただいているのが少し古いが参考になった。
RuboCopの警告をコメントで無効化する方法
警告自体を出ないようにする
例えば、以下のような警告が出た場合を考える。
script/rails:4:53: C: Layout/ExtraSpacing: Unnecessary spacing detected.
APP_PATH = File.expand_path('../config/application', __dir__)
余分なスペースが入っているという警告であるが、面倒であるので、無視しようという方針になれば、それを.rubocop.ymlに記載する。
Layout/ExtraSpacing:
Enabled: false
そうすると、以後これに関する警告は出なくなる。
$rubocop -D --only cop名
このコマンドにより、該当のcop名のみの警告を抽出できる。
ついでに
rubocopを実行するとたくさん出てくるCとかWとかは何だろうと思い調べてみると、警告の重さであることがわかった。
軽い順に、Refactor, Convention, Warning, Error, Fatalがあり、その頭文字が記載されている。
こういうこともなんとなくではなく、1つ1つ意味を理解しながら学習していきたい。
これから本格的にRuboCopと触れ合うと思うので、より便利な手法を学び、実務で活かしていきたい。
参考にさせていただいたもの
RuboCop公式
Rubocopを使ってRailsコードをチェックしてみる
RuboCopの警告をコメントで無効化する方法
Author And Source
この問題について(RuboCop使ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/yutasb/items/2051772aeafaa9358c0e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .