【Ruby】コミットする前に husky+lint-staged で、Rubocopの自動整形&チェックを行う


この記事なに?

上記記事を参考にhusky+lint-stagedを用いて、コミット前にeslintによるチェックを行う実装が行えました。

その仕組みを使って、Rubocopの自動整形&チェックを行う環境を構築できましたので、その手順メモになります。

この記事を一読してくださった方へ

  • 「こんなのも書き留めておいた方が良いよ」
  • 「それ、解釈間違ってるよ」

的なものがあればコメント等いただけると助かります。🙇‍♂️

rubocopのオプション変更 2019.08.05追記

分報仲間のaquiさんから、フィードバックをいただけました!

こちらの記事を参考に、近々記事をアップデートさせていただきたいと思います。

環境

  • macOS
  • Homebrewでインストールしたgityarnを用いる

手順

実際に設定した手順を記載していきます。

準備

必要なGemとnpmパッケージのインストールをします。

# Rubocopのインストール(or Gemfileへrubocopを追記して、bundle installする)
gem install rubocop

# npmパッケージのインストール
yarn add -D lint-staged husky

package.jsonの設定

rb,rakeファイルを対象にRubocopによる自動整形とチェックを行うコマンドを記載します。

{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "linters": {
      "*.{rb,rake}": [
        "rubocop -a",
        "rubocop",
        "git add"
      ]
    }
  }
}

bundle installしたRubocopを使用したい場合は、以下コマンドを記載する方が良いかなと思います。(未検証ですが、おそらく問題なく動作するかと思います。)

  • bundle exec rubocop -a
  • bundle exec rubocop

これで、設定完了となります。

注意事項

チーム開発等で本設定を使用されたい場合、必ず最初にyarnして、npmパッケージをインストールするようにしてください。

※npmパッケージをインストールしておかないと、lint-stagedhuskyが動作しないので、注意が必要です。

おわり

CircleCI側で、Rubocopの自動整形をおこなったPRを出してくれるGemもあるみたいです。

自動整形をコミットに含めない運用としたい場合は、上記を活用した方がよさそうです。