Railsの勉強としてgem周りを触ってみる企画です。
今回は・・・
を試してみようかと思います。
どういう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に以下を追記。
# 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/bundle
やdb/schema.rb
を対象外にする設定を施す、などがあるようです。
所感
コーディング量が多くなってくると、
ついチームで取り決めてたコーディング規約を忘れて、
手グセのような感じで自分の書き方をしちゃうことはあると思います。
かといってソースレビューで1行ずつ
「ここ、規約違反だよ!!」
なーんてことしてたら大変ですね。
その辺りは全部rubocopさんにおまかせしちゃえば、
時短にもなって楽出来そうです!
おわりに
何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります!