鳩舎

レースしない

Lightweight git hook management tool その名も git-hook を作りました

どうもこんにちは。フックしてますか。ジャブからローにつなげてますか。

そんなこんなで最近は僕もそこそこ git に慣れてきて助けてもらわなくても良くなって来ました。

しかし人間の欲望はとどまるところをしらず、「なんか定形作業めんどくせーなだるいしなんかうまいことどうにかなれよ面倒くせぇ」とか考え始めるものです。たとえば「テスト通ってないコードコミットするなってリーダーがいうけどいちいち手でテスト走らせて確認すんのだるいからなんかうまいこと自動で動かんかな」とか。

git は大変よくできたツールですので、そういうのもちゃんと用意されています。hooks といって、コミットのタイミングなどで特定のシェルスクリプトなりなんなりを動かすことが出来るよう配慮されているのです。すげーな git 。

しかしこいつがマジめんどくさい。自分でシェルスクリプト書くとか絶対嫌だし、すでにそのへんに転がってるのを使いたいだけなのに一発でうまいこといかないとかあってほんとだるい。しかもそのフックを複数導入しようとかするともっとだるい。やってられない気分になる。

ということで長い前置きでしたが、それらを上手いこと管理したり、手軽に導入出来る git-hook というシェルスクリプトを作りました。

インストール

git をバリバリ使いこなしてるみなさんにとっては一瞬です。

$ cd
$ git clone git://github.com/rosylilly/git-hook.git .git-hook
$ echo 'export PATH="$HOME/.git-hook/bin:$PATH"' >> ~/.bash_profile

おわり。

つまるところ clone してきて PATH を通すだけです。 PATH が通ったかの確認は

$ git hook --version

とかするといいです。貧相なバージョン情報が出ます。

さっくり使い方

んで肝心の使い方なんですが、とりあえず hooks のタイミングを知ってないと使えません。指定するタイミングの一覧は man githooks するとわかります。このくらいの面倒くささは耐えましょう。肝心のフックはこんなかんじで導入します。

$ cd working_repository
$ git hook install pre-commit https://raw.github.com/gist/1475724

install コマンドの引数にタイミングと URL なりなんなりを指定します。フックの指定にはいまのところ

$ git hook install pre-commit https://raw.github.com/gist/1475724 # URL
$ git hook install pre-commit gist:1475724 # Gist ID
$ git hook install pre-commit ~/my-git-hook/pre-commit # File path

の 3 種が指定出来ます。適当なスニペットを拾ったらどっかに貼り付けてそれのパスを指定するとかするとよいです。

入っている hook は

$ git hook ls

とかで確認できます。

いらなくなったら

$ git hook uninstall pre-commit gist-1475724

とかでアンインストール出来ます。

git-hook 以前にくらべるとだいぶ簡単になったんではないでしょうか。

まだこの 3 コマンドしかないんですけどね(引き算の美学ということにしましょう)。

今後の展望

Homebrew ぐらいリッチな管理ツールというのも考えたのですが、管理するのがめんどくさいとかになると本末転倒なので一旦いいかなーという感覚でいます。インストールする時にフックの名前をつけられるようにするとかはしたいですね。

あと基本的にシェルスクリプトは rbenv のパクリというかコピペコードも多いので、シェルスクリプトマスターな人のレビューを受けたいです。助けて。

ruby 版 git-hook も作って rubygems に公開したんですが、個人的には出来はシェルスクリプト版の方が良くできました。

ソースコードはいつもどおり Github にありますので fork / pull req / dis / issue なんでもござれです。

個人的にはこの git-hook が流行って gist にいっぱいみんなの hook があがって、僕が楽出来る世の中になるといいなーと思っています。

それでは!