[Rails5]rubocopってなんぞ?


Railsの勉強としてgem周りを触ってみる企画です。
今回は・・・

rubocop

を試してみようかと思います。

どういうgemなの?

Rubyコードを解析して、
コーディング規約に沿っているかチェックするgem。

言わずもがなモデルはRoboCop。

Role models are important.
-- Officer Alex J. Murphy / RoboCop

検証環境

以下の環境で実施しました。

[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0

[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1

ご参考までに。

rubocop導入

1.gemのインストール

事前にRails勉強用に作成したプロジェクトで進めます。
各MVCは適当に掲示板アプリを想定してPostsコントローラーなどを生成済みです。
(index,show,editの空ページが見れる程度)

$ rails g model post
$ rails g controller posts index show edit

その前提のもと、Gemfileに以下を追記。

Gemfile
# rubocop
gem 'rubocop', require: false

追記したらインストール。

$ bundle install

-----------
Fetching rubocop 0.63.0
Installing rubocop 0.63.0
-----------
→無事に完了。

2.rubocopを使う

これで使用できるようになったので、早速使ってみましょう。
試しにposts_controller.rbを対象に。

$ bundle exec rubocop -R app/controllers/posts_controller.rb

で、実行したら

Inspecting 1 file
C

Offenses:

app/controllers/posts_controller.rb:1:1: C: Style/Documentation: Missing top-level class documentation comment.
class PostsController < ApplicationController
^^^^^
app/controllers/posts_controller.rb:1:1: C: Style/FrozenStringLiteralComment: Missing magic comment # frozen_string_literal: true.
class PostsController < ApplicationController
^
app/controllers/posts_controller.rb:14:9: C: Layout/AlignParameters: Align the parameters of a method call if they span more than one line.
        filename: "投稿情報.csv"
        ^^^^^^^^^^^^^^^^^^^^
(省略)

1 file inspected, 21 offenses detected

めっちゃ言われた。

コマンド叩いた直後の"C"は見つかった違反の中で一番深刻なものの頭文字らしいです。
(Convention, Warning, Error, Fatalの順に深刻)
つまり、結構多く指摘されたけど一番軽微な違反みたい。

また、コマンド時に-Rオプションをつけていますが、
これをつけるとRailsに特化した実行がされるようです。

その辺りの参考はofficial manualで。

補足

ルート直下に.rubocop.ymlを設置すると、独自に規約を設定出来るとのこと。
ただし、デフォルトの項目のオーバーライドとなるようなので注意。
※デフォルトのコーディング規約はRuby style guide

また利用例では、各プロジェクトおよびチームごとに決めた規約での調整や、
vendor/bundledb/schema.rbを対象外にする設定を施す、などがあるようです。

所感

コーディング量が多くなってくると、
ついチームで取り決めてたコーディング規約を忘れて、
手グセのような感じで自分の書き方をしちゃうことはあると思います。

かといってソースレビューで1行ずつ
「ここ、規約違反だよ!!」
なーんてことしてたら大変ですね。

その辺りは全部rubocopさんにおまかせしちゃえば、
時短にもなって楽出来そうです!

おわりに

何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります!