Edited at

RubyのLintであるonkcop/pre-commitを入れたら、個人開発が幸せになった話


はじめに

最近個人開発している際に、レビュワーから

「そろそろlint指摘するのしんどいから、rubocop入れるといいよ。特にonkcopオススメ。」

とのお達しが来たので、この機会に導入してみることに。

本記事は、onkcopとpre-commitの導入手順をまとめたものです。


この記事の対象者


  • Rubyを学びはじめて3ヶ月くらいの初心者

  • rubocop/onkcop/pre-commitの導入方法について知りたい方


onkcopを導入する

onkcopとは、 rubocop を拡張したgemです。

基本的には、公式リポジトリのREADMEに沿ってやればOK。

https://github.com/onk/onkcop

Gemfileに、onkcopを追加します。

gem "onkcop", require: false

その後、bundle installしましょう。

bundle install --jobs=4

bundle installができたら、今度はonkcop設定用ファイルを作成します。

bundle exec onkcop init

そうすると、プロジェクト直下に.rubocop.ymlというファイルが作成されるので、次のように書き換えます。


inherit_gem:
onkcop:
- "config/rubocop.yml"
- "config/rails.yml"
- "config/rspec.yml"

AllCops:
TargetRubyVersion: 2.5
TargetRailsVersion: 5.1
Exclude:
- "vendor/**/*" # rubocop config/default.yml
- "db/schema*.rb"
- "node_modules/**/*"
- "db/migrate/**/*"

ここでは、rubocop の設定で、onkcop を継承して、onkcop内のconfig/*を使うかどうかをコメントインアウトして決めています。

また、Excludeの箇所は、onkcopによるチェックの対象外となるファイルをリストアップしています。

もし、大規模な開発だったり、元々rubocopを入れているという場合には、

inherit_from: ./config/rubocop.yml

のように継承元となるrubocop.ymlを明記するのも一つの手ですね。

判断基準としては、

一つのファイルで管理していたが、見通しが悪くなったので分割する

くらいでしょうか。

ここまで設定できたら、一旦rubocopを走らせてみましょう。


bundle exec rubocop -a

これは、rubocop.ymlで設定したルールに基づいて、自動的に修正してくれる便利なコマンドです。

ただ、自動修正しきれない箇所もあるので、それについてはもう一度rubocopをパトロールさせて手動修正します。


bundle exec rubocop


Yutas-MacBook-Air:qiita_clone ushijimayuuta$ be rubocop
Inspecting 57 files
..................................................C......

Offenses:

spec/controllers/api/v1/articles_controller_spec.rb:20:5: C: RSpec/EmptyLineAfterHook: Add an empty line after before.
before { @article = attributes_for(:article) }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

57 files inspected, 1 offense detected

こんな感じの実行結果になるので、適宜修正してください。

まとめると、onkcopの導入手順としては、次の通りです。


  1. gemfileにonkcop追加

  2. bundle install

  3. bundle exec onkcop init


  4. .rubocop.ymlの修正

  5. git管理しないものは、rubocop.yml or .rubocop.ymlにexclude


いちいちrubocopをパトロールさせるのがめんどくさい、そんなあなたに!

rubocopは便利なんですが、コード書いた後にいちいちrubocopを面倒ですよね。

そんな時は、pre-commitというライブラリを導入しましょう。

これは、git commitを走らせた際に設定した処理を自動的に実行してくれる、便利なライブラリです。

導入方法については、以下のサイトが非常に参考になりますので、紹介されている手順に沿ってやってみてください!

https://dev.classmethod.jp/server-side/pre-commit-rubocop/


自動化は正義

レビュワーにとっても、細かいlintをいちいち指摘していたら面倒ですし、見逃すこともあります。

また、個人開発をしているエンジニアにとっても、コマンド一発で自動的にコードを診断してくれるので、かなり便利なんじゃないでしょうか。

レビュワーがいない環境だと、自分の書いているコードが「きれい or きたない」なんてあまり気にしないですしね。

でも、rubocopを使えば、ある程度コードの可読性を担保できるので、そういう意味では、導入する価値はあるでは?と思いました!