Help us understand the problem. What is going on with this article?

【Rails】RuboCopの基本的な使用方法と出力の見方

はじめに

RubyのLinterツールであるRuboCopについて以下内容をまとめました。

  • インストール方法
  • 基本的な使用方法
  • 出力の見方
  • 規定の設定(他記事へのリンク)

保守性が高く、キレイなコードを書けるようになっていきたいです:writing_hand:

この記事が役に立つ方

  • RuboCopを使ったことがない方

この記事のメリット

  • RuboCopが使えるようになる
  • 最低限出力が読めるようになる

環境

  • macOS Mojave バージョン10.14.6
  • シェル:zsh
  • Ruby 2.6.3
  • Rails 6.0.1
  • RuboCop 0.76.0

RuboCopとは?

公式サイトはこちらです。
Home - RuboCop: The Ruby Linter that Serves and Protects

スクリーンショット 2019-11-19 0.17.16.png

ロゴとマーフィーの名言がいいですね:fist:

規定のフォーマットから違反している部分を示してくれる機能に加え、-aオプションで「簡単な違反は自動で修正」までしてくれるツールです。

規定は任意に変更することが可能です。

【注意点】

RuboCop関連の記事を参照するときは作成・最終更新日時に注意したほうがいいと思われます。
理由は以下。

バージョン0.72以降のgemは細分化が行われています。(以下記事参照)
RuboCop 本体から Rails Cops が外される - koicの日記

  • rubocop:生Rubyに関わる構文規則チェック
  • rubocop-rails:Railsに関わる構文規則チェック
  • rubocop-performance:パフォーマンスに関わる構文規則チェック

バージョン0.71以前では、全部入りだったため、RuboCop関連の記事を読むときは、バージョン0.71以前なのか、0.72以降のものなのかを注意して見ておかないと、「なぜかRailsの構文チェックしてくれない…」など動作に支障が出る可能性があります。

※バージョン0.72は2019-06-25にリリース。

インストール方法

今回はRailsアプリに組み込むことを想定して、Gemfileに記述する方法をご紹介します。

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

RuboCopは開発者が必要に応じてターミナル等で使用するため、require:falseをつけるようにします。
これにより、bundlerによってRailsアプリ側に自動で読み込みされないようになります。

この後、gemのインストールで完了です。

$ bundle install

使用方法

$ rubocop

非常にシンプル。これでチェックがスタートし、結果が表示されます。


$ rubocop -a

自動的に修正してほしい時はこちら。


$ rubocop --help

その他オプションはこれで確認が出来ます。

次に出力の見方を確認していきます。

出力の基本構文

1箇所の違反に対し、3行でワンセットになっています。

問題のファイルの相対パス:行番号:列番号: 違反レベル: 違反種別: 違反メッセージ
ここに違反した部分が表示される
    ^^^ ← ^で該当箇所を示してくれる

例えば、以下のような出力になります。

Gemfile:44:25: C: Layout/SpaceAfterColon: Space missing after colon.
  gem 'rubocop', require:false
                        ^

↑恥ずかしながらGemfileに記述したとき、:の後にスペースを入れるのを忘れていました:sweat_smile:

ちなみに、このレベルであればrubocop -aで自動修正してくれました。
他に""で囲っているのに式展開がなければ''にしてくれたり。

手数がかかるところは自動修正にお任せですね!

次に違反のレベルです。

違反のレベル

重要なものから順に記載します。
W以上は要修正です。

F Fatal
E Error
W Warning

↑ 修正すべき
--- 壁 ---
↓ 修正の余地あり

C Convention
R Refactor

C以下は緊急で修正する必要がないため、
以下コードでW以上に絞って違反を出力することも可能です。

$ rubocop --fail-level W --display-only-fail-level-offenses

※以下記事参照
RuboCopでWarning以上の項目のみ検出する方法 - Qiita

違反種別

公式リファレンスへのリンクをご用意しました。
Cops - RuboCop: The Ruby Linter that Serves and Protects

ただ、基本的には以下のような簡単な英語なのでそこまで見る必要はなさそうです。
Layout/SpaceAfterColon: Space missing after colon.
Metrics/LineLength: Line is too long.

規定の変更方法

Gemfileと同じ階層の.robocop.ymlrobocop_todo.ymlに記述すれば変更可能です。

詳細についてはこちらの記事が非常に分かりやすかったのでリンクを貼らせて頂きます。
【初心者向け】Railsの品質を上げるRuboCopのインストールと使い方! | キツネの惑星

おわりに

vimなどのエディタや、CircleCIとの連携も出来るようですね。
ガンガン使って保守性の高いコードを書いていこうと思います。

ロボコップって確か最後空を飛んでましたっけ?:point_up:

参考にさせて頂いたサイト(いつもありがとうございます)

Home - RuboCop: The Ruby Linter that Serves and Protects
RuboCop 本体から Rails Cops が外される - koicの日記
Railsでrubocopを使って構文チェックする方法 | 人と情報
RuboCop | 警告の出力フォーマット指定 - Qiita
【初心者向け】Railsの品質を上げるRuboCopのインストールと使い方! | キツネの惑星
RuboCopでWarning以上の項目のみ検出する方法 - Qiita

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away