Edited at

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


この記事なに? :thinking:

上記記事を参考に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もあるみたいです。

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