Ruby
Rails
RuboCop

RuboCop is 何?

RuboCopとは

Rubyの静的コード解析を実行するgemです。難しく聞こえますが、要はRuboCopがコードを解析してくれて、ここのコードは長すぎるね。とか、インデント入れたほうがいいよ。とかメソッド名変えようか。とかをコマンド1つでターミナルに吐き出しててくれます。(HTML、CSS、またはそれらの中の埋め込みrubyは解析してくれません。)

ただ、RuboCopの警告全てが正しい訳ではなく、どちらかと言うとこうした方が良いよ的なものが多いので、厳しすぎるんじゃないかと思ったらデフォルトを変えたり、警告する/しないの設定ができます。なので、プロジェクトごとに話し合って使い分けれればいいかなと思ってます。

RuboCopの基本

・ 準備

Gmefile
group :development do
  gem 'rubocop', require: false
end
# or
$ gem install rubocop

・ 関連ファイル

.rubocop.yml
RuboCopの設定ファイルです。対象となるファイルの種類だったり、チェックする構文のデフォルトを変えたりと,自分たちのコーディングスタイルに沿った現実的なルールをこのファイルで適用します。(RuboCopの設定アレコレに詳しく書いてあるので参考にしてみてください。)

.rubocop_todo.yml
あまりに警告が多い時に$ rubocop --auto-gen-configを実行することによって自動生成され、警告内容を全てこのファイルに一旦退避することができます。それ以降は退避された警告は無視されます。(git stashみたいな感じ?)

・ 基本コマンド

$ rubucop
# 解析して結果をターミナルに吐き出す。

$ rubocop --help
# ヘルプを参照できます。

$ rubocop --lint( または rubocop --rails )
# チェック規則は以下の4つに分類されますが --lint がLintのみチェック、 --rails がRailsのみチェック
# -------------------------------------------------------------------------
# 1 Style   (スタイルについて)
# 2 Lint    (誤りである可能性が高い部分やbad practiceを指摘する)
# 3 Metrics (クラスの行数や1行の文字数などに関して)
# 4 Rails   (Rails特有のcop)

$ rubocop --auto-gen-config 
# .rubocop_todo.ymlに警告を一旦退避する。
# .rubocop.ymlに "inherit_from: .rubocop_todo.yml" と書くのを忘れないでください。

$ rubocop --auto-correct 
# 直せる箇所を自動で修正してくれます。(最初は使わないで警告されたコードを眺めてみることをお勧めします。)

警告内容

警告の種類はたくさんありますが、Rubocopチートシートにしっかりとまとまっています。参考にしてみてください。

修正の流れ ⓪〜⑦

⓪ $ rubocop --auto-correctを実行して、自動で修正できるものはしてもらう。残りの警告がたくさんある場合は①へ。警告がそんなに多くない場合(10~20個とか)は③と④を繰り返す。
(Railsのコード規則を学ぶのにとても良い教材だと思うので初めは⓪を飛ばすことをお勧めします。)

① 警告がたくさんあると見ずらいので$ rubocop --auto-gen-configを実行し、.rubocop_todo.ymlを作成し、そこに全ての警告をいったん移す。(こうすることで$ rubocopを実行しても今の段階では全ての警告は無視されます。)

② .rubocop_todo.yml内の警告の中から一番上の警告をコメントアウトする。(コメントアウトした警告だけが再びRuboCopに感知されるようになる)

③ $ rubocopを実行して警告を修正する。

④ 警告のデフォルトを変更したり、特定のファイルを今後RuboCopに警告されないたくないという場合は, .rubocop.ymlに設定を書く。

⑤ 修正し終わったら.rubocop_todo.ymlに戻り、コメントアウトした警告を削除する。

⑥ 全ての警告を修正し終わるまで②~⑤を繰り返す。

⑦ テストがある場合はテストを走らせる。

RuboCopの存在いつも忘れる問題

RuboCopは便利ですが、いつも実行し忘れしまい警告がたまってしまいます。

後々大量の警告を一度に修正するのは面倒なので、git commit実行時に自動でコーディングチェックしてもらいましょう。
きゃまなかのブログさんの【Ruby on Rails】rubocop と pre-commit を利用して git commit 時にコーディングチェックを行うに詳しいやり方が書いてあります。

最後に

RuboCopは、日本語のコメントはダメだとか、1行にかける文字がかなり短かったりだとかいちいち厳しいですが、愛のあるlintツールです。なので、早く自分のコーディングスタイルを確立し、理想の.rubocop.ymlを作り上げていきましょう。他の方が自分の.rubocop.ymlを公開しているので参考にしてみてください。(僕の使っている .rubocop.yml · GitHub)
image.png