コードレビュー補助ツール(RuboCop)


書いてあること

  • コードレビューツールとは

1.RuboCop導入
2.RuboCop実行
3.参考ページ
4.終わりに

コードレビューツールとは

コードレビューツールとは、文法・バグ・コーディングスタイルを自動で分析するツールのことを指します。

1.RuboCop導入

RuboCopとは
「インデントが揃っていない」 「無駄な改行・スペースがある」などの指摘をRubyStyleGuideに基づいて行ってくれる。
レビューに掛かる時間が減る。
.rubocop.todo.ymlから違反を消しrubocopを実行 → 修正という流れで進めていく。

導入
Gemfileに下記を追加

Gemfile
#省略
group :development do
#省略
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'bullet'
 gem 'rubocop-rails', require: false⭐︎12/13更新
  (#前の書き方 gem 'rubocop', require: false)
end
#省略

書けたら、bundle installします。

2.RuboCop実行

このまま$bundle exec rubocopをすると大量の規律違反が出ちゃう٩( ᐛ )و{文法的にはエラーにはならないもののコードの可読性を下げるという理由で設定されてる
けど実際こんなにきっちり直すのは無理なので、チェックルールをカスタムします。

カスタム
設定ファイルは、.rubocop.ymlという名前じゃないとダメなのでGemfileと同じ深さにファイルを作ります

.rubocop.yml
#AllCops:の上に新たに追加##############
require:
  - rubocop-rails
####################################
AllCops:
  # Rubocopの規約の調査から除外するディレクトリ(自動生成されたファイル)
  # デフォルト設定にある"vendor/**/*"が無効化されないように記述
  # schemaファイルやmigration関連ファイルについてはほとんど書き直したりすることが無いため見逃す
  Exclude:
    - bin/*
    - db/schema.rb
    - node_modules/**/*
    - db/migrate/*  #migrate以下を追記するかしないかはご自由にどうぞ
    - vendor/**/*



#こちらの記述は削除しました###############
  # Rails向けのRails copsを実行。"rubocop -R"と同じ
  Rails:
    enabled: true
####################################

# これ以下は厳しすぎる規約を無効にする
# "Missing top-level class documentation comment."を無効
⭐️個別に有効/無効を切り替えられるよ
Style/Documentation:
  Enabled: false

# "Prefer single-quoted strings when you don't need string interpolation or special symbols."を無効
Style/StringLiterals:
  Enabled: false

# "Line is too long"を無効
Metrics/LineLength:
  Enabled: false

#'frozen_string_literal: true'を無効
Style/FrozenStringLiteralComment:
  Enabled: false
ターミナル
$bundle exec rubocop

この状態でも違反がたくさん出てくる。

現在の違反を徐々に修正

1.現在の違反をすべて記録した上で、いったん違反では無いことにする
2.記録した違反のうち1つを、違反していることに戻す
3.その違反を解消する

1.現在の違反をすべて記録した上で、いったん違反では無いことにする

ターミナル
 $bundle exec rubocop --auto-gen-config 

.rubocop.todo.ymlファイルができる
.rubocop.ymlに下記も追記される

.rubocop.yml
inherit_from: .rubocop_todo.yml

.rubocop.ymlに.rubocop.todo.ymlの内容が書かれているのと同じことにしてくれる

2.記録した違反のうち1つを、違反していることに戻す
下記の違反回避記述を削除して

.rubocop.todo.yml
Bundler/OrderedGems:
  Exclude:
    - 'Gemfile'
#Gemfileのgroup do ~ endのグループの中に書いたGemはアルファベット順に並べる、という規約

警告を復活させる

ターミナル
$bundle exec rubocop

この下の警告が出ないように一部修正いたしました。12/3
詳しくはコメント欄

あれ、エラーが出た

ターミナル
Warning: AllCops does not support Rails parameter.

よくみたら$bundle exec rubocop --auto-gen-configの時点で出てた。気づかず続行してた。
ロボコップ、Railsサポートしてないって言ってるのでサポートさせる方法を探す。
とりあえず、エラー文をそのままコピペってグーグル先生に聞いてみる。

ターミナルに戻ってきたら、あれ、実行完了してる。
これは、エラーじゃなくて注意喚起だったのかしら。毎回出てました。とりあえず問題なさそうなので進めます。
グーグル先生に聞いた内容のリンクは下記に残しておきます。

Rubocopには、ある程度の規約違反は自動で修正してくれる機能がるので実行

今回のエラーはGemfileのgroup do ~ endのグループの中に書いたGemはアルファベット順に並べる、
という規約に対しての違反なので、そちらを直します。
実行時に-aオプションを利用

ターミナル
$ bundle exec rubocop -a

並び順がなおりました。

補足
-aオプションが利用できるかどうかは、.rubocop.todo.ymlの各設定の上
コメントアウトで# Cop supports --auto-correct.と書かれているかどうかで判断。
書かれていれば、利用することができる。

( ˙-˙ ){すごくたくさん書かれてる規約あった

参考ページ

RuboCopの設定アレコレ

終わりに

必要なコードレビューツールをまとめて導入したい際は、Siderを活用することで簡単に設定ができるらしいので
次はGitHubへの導入をまとめようと思います。
記載内容に誤りやアドバイスございましたらご指摘いただけたら幸いです。