Ruby on Rails

【Ruby on Rails5.2】RuboCopの導入方法と使い方を教えます

・RuboCopとは
・RuboCopの導入方法と使い方、読み方の紹介

はじめに

今回はRubyのコードを解析して可能なところは自動で修正してくれる静的解析ツール「RuboCop」の紹介です。
一人だとコードは最低限読めれば良いレベルで収まってしまうのですが、こういったツールを使うと自動で解析して読みづらい箇所とか、使ってはいけないアンチパターン的なものを教えてくれるので非常に便利です。

RuboCopとは

RuboCopとは、Rubyのコードがコーディング規約に沿っているかを確認できる「静的コード解析ツール(コーディングチェックツール)」の1つです。

コーディング規約はプロジェクトによって違うのでRuboCopでまかり通るかは微妙ですが下記のような極々一般的な部分をチェックして教えてくれます。

  • インデント
  • 文字数の長さ
  • 条件式のスペースの使い方
  • コメントの有無

デフォルトだと使いづらい部分はカスタマイズ可能であり、規約の追加・削除が可能です。

RuboCopの導入方法

RuboCopの導入方法は非常に簡単であり、Gemfileに追加してbundle installを行うだけです。

gem 'rubocop', require:false
gem 'rubocop-rails', require:false

今回、ターミナルからRuboCopのコマンドを呼ぶため「require:false」を付けています。
Gemfileに上記を追加したらターミナルから「bundle install」コマンドを実行して追加します。

bundle install

RuboCopの使い方

導入方法でも記載した通り、今回はターミナルからRuboCopコマンドを実行します。
Railsプロジェクト上で「rubocop」を実行すればプロジェクト内にあるファイルをチェックしてくれます。

rubocop

また、 「rubocop -A」コマンドを実行すると対象のファイルで修正可能なものは自動で修正してくれます。

試しにRuboCopを使った結果

試しに教材を学習していく際に作成したプロジェクトに対して「rubocop」コマンドを実行してみました。
すると、60ファイルの中で230個の違反が検出されました。

そのうち207個は先ほどの「rubocop -A」コマンドで自動修正可能です。

RuboCopの出力結果の読み方一例

ここではRuboCopが検知した違反の内容の一部を紹介します。

Layout/IndentationWidth

インデント幅に対する内容です。デフォルトだとインデントには半角スペース2つが推奨されているためそうなっていない部分は検知されます。(下記は4つのスペースが使われていると言われています)

C: [Correctable] Layout/IndentationWidth: Use 2 (not 4) spaces for indentation.

Layout/SpaceBeforeBlockBraces

ブロックの前後にスペースが無いことに対する内容です。(下記は「{」の左側にスペースが無いと言われています。)

C: [Correctable] Layout/SpaceBeforeBlockBraces: Space missing to the left of {.

Layout/TrailingEmptyLines

ファイルの最後に改行が無いことに対する内容です。

Style/FrozenStringLiteralComment

C: [Correctable] Style/FrozenStringLiteralComment: Missing frozen string literal comment.

Ruby2.3以降(Ruby3未満)では、文字列リテラルは違うオブジェクトとして扱われます。
その文字列リテラルを変更出来ないようにする(frozen)コメントを1行目に入れてくださいと言われています。

下記コメントを1行目に入れてくださいと言われています。

#frozen_string_literal: true

Style/Documentation

クラスを作成した際、最初の行にコメントを入れてくださいと言われています。

C: Style/Documentation: Missing top-level documentation comment for class Admin::UsersController.

参考記事

Railsの品質を上げるRuboCopとは?インストールや使い方を紹介!
https://kitsune.blog/rails-rubocop

【Rails】RuboCopの基本的な使用方法と出力の見方
https://qiita.com/terufumi1122/items/ad55bf8713c0df053f58