はじめに
最近個人開発している際に、レビュワーから
「そろそろlint指摘するのしんどいから、rubocop入れるといいよ。特にonkcopオススメ。」
とのお達しが来たので、この機会に導入してみることに。
本記事は、onkcopとpre-commitの導入手順をまとめたものです。
この記事の対象者
- Rubyを学びはじめて3ヶ月くらいの初心者
- rubocop/onkcop/pre-commitの導入方法について知りたい方
onkcopを導入する
onkcopとは、 rubocop を拡張したgemです。
基本的には、公式リポジトリのREADMEに沿ってやればOK。
Gemfileに、onkcopとrubocop-railsを追加します。
gem "onkcop", require: false
gem “rubocop-rails”
その後、bundle installしましょう。
bundle install --jobs=4
bundle installができたら、今度はonkcop設定用ファイルを作成します。
bundle exec onkcop init
そうすると、プロジェクト直下に.rubocop.yml
というファイルが作成されるので、次のように書き換えます。
require:
- rubocop-rails
# 2020/11/8現在、onkcopそのままのファイルを利用すると、LayoutやNaming、Styleのルール名変更によるエラーが出るので、独自で作ったファイルを継承して指定する
inherit_from:
- "config/rubocop/rubocop.yml"
inherit_gem:
onkcop:
- "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
の導入手順としては、次の通りです。
gemfileにonkcop追加
bundle install
bundle exec onkcop init
-
.rubocop.yml
の修正 - git管理しないものは、
rubocop.yml
or.rubocop.yml
にexclude
いちいちrubocopをパトロールさせるのがめんどくさい、そんなあなたに!
rubocopは便利なんですが、コード書いた後にいちいちrubocopを走らせるのは面倒ですよね。
そんな時は、pre-commitというライブラリを導入しましょう。
これは、git commitを走らせた際に設定した処理を自動的に実行してくれる、便利なライブラリです。
導入方法については、以下のサイトが非常に参考になりますので、紹介されている手順に沿ってやってみてください!
自動化は正義
レビュワーにとっても、細かいlintをいちいち指摘していたら面倒ですし、見逃すこともあります。
また、個人開発をしているエンジニアにとっても、コマンド一発で自動的にコードを診断してくれるので、かなり便利なんじゃないでしょうか。
レビュワーがいない環境だと、自分の書いているコードが「きれい or きたない」なんてあまり気にしないですしね。
でも、rubocopを使えば、ある程度コードの可読性を担保できるので、そういう意味では、導入する価値はあるでは?と思いました!