Edited at

Gitフックを使っておかしいRubyコードをコミットできないようにする

More than 5 years have passed since last update.

RubyコードをRubocopを使って静的に解析していますが、それを自動化するべくGitフックにしました。

下記の内容の.git/hooks/pre-commitファイルを作ります。


.git/hooks/pre-commit

#!/bin/sh

git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs rubocop
exit $?

grep '\.rb$' で拡張子が rb であるファイル、という意味なので、必要に応じてこの部分を変更してください。例えば app ディレクトリ以下のみにしたければ ^app/.*\.rb$ にします。

忘れずに実行権限をつけます。

chmod +x .git/hooks/pre-commit

すると git-commit 時に自動的に追加・変更されたRubyファイルに対してRubocopが走るようになります。Rubocopに通らないとコミットできません :trollface:


背景

Ruby - Rubocopをsyntasticを使ってVimから自動実行する - Qiita でVimからRubocopを使うようにしたのはいいけど、保存の度に一瞬Vimが止まってしまうのが非常にストレスフルだったので、Gitフックに移動させたのでした。