3
1

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 1 year has passed since last update.

コミットの直前にrubocopを自動実行する

Posted at

Railsアプリケーションの開発において、「よしできた、git push!」したあと、GithubでPRをみるとCIでバツマークがついていた。チェック結果をみたらrubocopでフォーマットエラーを吐いていた・・なんて経験はありませんか? 私はあります。

これを解決する方法が実はありました。

前提とする読者

  • Railsでアプリケーションを開発している人
  • CI環境が整っていて、rubocopを使っている人

簡単な方法

gitコマンドでは、フックという仕組みがあり、git commitコマンドの直前に自前のプログラムを実行させることができます。開発中のディレクトリの中に、.git/hooks というディレクトリがあるはずです。
.git/hooks/pre-commit というファイルを準備して、そのなかで

bundle exec rubocop -a

を書いておきます。
(コミットの前に .git/hooks/pre-commit ファイルがそのまま実行されるので、chmod +x .git/hooks/pre-commit として、実行権限を追加しておくことを忘れずに!)

その後、適当なファイルを変更し、コミットすると rubocopが自動で実行されるようになります。

rubocopのオプションについて

rubocopのあとについている -a はrubocop警告対象のファイルを自動で修正してくれるオプションです。
小文字の -a であれば、RuboCopが安全と判断した自動修正のみを行ってくれます。
大文字で -A とすると、全ての修正候補を自動で修正してくれますが、RuboCopが元のコードの意図を誤解する可能性がある場合や、修正が元のコードの挙動を変更する可能性がある場合があるそうです。

開発メンバーで設定を共有したい場合

ただし、.git以下のファイルはGit管理されていません。この設定をプロジェクトの他の開発メンバーに使ってもらうにはどうしたらよいでしょうか?
もちろんメンバー全員に .git/hooks/pre-commit ファイルの内容を共有し、使ってもらう、という方法でもOKですが、開発が進むうちにrubocop以外のコマンドも自動実行させたくなるかもしれません。
そこで、lefthookというツールがあります。

lefthookは、gitのhooksファイルを管理するツールです。

インストールは、Macであれば以下でOKです。

$ brew install lefthook

プロジェクトのディレクトリにて

$ lefthook install

コマンドを実行すると、lefthook.yml ファイルが作成されます。その中の、pre-commitのあたりを編集します。今回の場合は、以下のようにしてみました。

pre-commit:
  parallel: true
  commands:
    rubocop:
      run: bundle exec rubocop -a

このファイルの内容を反映させるため、以下を実行します。

$ lefthook add pre-commit

反映後、git commitコマンド直後に rubocopコマンドが実行されるようになります。

この例ではrubocopだけを実行させるようにしていますが、lefthook.ymlファイルを編集すれば、例えばrubocopの後にstylelintのチェックを走らせたりすることも可能そうです。適宜、お試しください!

まとめ

この記事では、

  • git commitの直前に rubocopチェックを自動で実行する方法
  • gitフックまわりのファイルを管理するための、lefthookの紹介
    についてまとめました。ぜひぜひ、使ってみてください!
3
1
0

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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?