LoginSignup
0
1

More than 3 years have passed since last update.

RuboCop使ってみた

Last updated at Posted at 2020-05-06

はじめに

RuboCopを初めて触ってみたので、備忘のために導入から使用方法まで大まかに記載します。
これから本格的に使っていくので、もし間違いなどがあれば教えていただけると幸いです。

RuboCopとは

コーディング規約に沿って、コーディングできているかを確認できる「静的コード解析ツール」。

つまり、自分のコードが規約に沿って書かれているかをチェックするためのツール。

複数人開発の際にはもちろん、個人開発の場合でも綺麗なコードを書き、品質を維持することに越したことはないので、使ってみて損はない。

インストール

RuboCopはgemを使って簡単にインストールできる。
Gemfileに以下を記載。

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も空にしておく。

.rubocop.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に記載する。

.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の警告をコメントで無効化する方法

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