12
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-08-21

はじめに

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

「そろそろ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の導入手順としては、次の通りです。

  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を走らせた際に設定した処理を自動的に実行してくれる、便利なライブラリです。

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

自動化は正義

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

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

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

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

12
16
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?