・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