直径1.5メートル

ひよっこエンジニアのちょっとしたメモ。主に備忘録。

【Git】ブランチを切り替えた時にSlack通知されるようにした

開発に入ると、あとから「あれ、時間どれくらいかかったっけ」みたいになることありませんか。
自分はしょっちゅうありまして、Togglを使うようにしたものの、開始/終了忘れが続出。
作業を変更するタイミングで勝手にどこかに記録されていった方が良いなーと思って、開発中は何度も行うブランチの切り替えをタイミングにしてみることにしました。

checkoutのタイミング

「はて、checkoutのタイミングってどうやって知るんだろう」
ちょろっと調べるとすぐに出てきました。

git checkoutが正常に終了すると、post-checkoutフックが実行されます。
8.3 Git のカスタマイズ - Git フック#その他のクライアントフック

.git/hooksの中にはいくつかサンプルがあります。
その中にpost-checkoutファイルを作って処理を書いておくとcheckout後に実行されるらしいので、これを利用することにします。

ブランチ名の取得

「はて、ブランチ名ってどうやって取得するんだろう」
これもちょっと調べると出てきました。

git rev-parse --abbrev-ref HEADでできるらしい。rev-parse初めて知りました。
gitで現在のブランチ名を取得する - 技術は熱いうちに打て!

後から調べたのですが、Git1.8以降であればgit symbolic-ref --short HEADでも取得できるようです。
Gitリポジトリのカレントブランチ名を取得する | blog: takahiro okumura

現在のブランチ名がgit rev-parse --abbrev-ref HEADなら、一つ前はgit rev-parse --abbrev-ref @{-1}かな?と思って試したら、ちゃんと前のブランチ名を取得できました。
ということで、

# 現在のブランチ名を取得
$ git rev-parse --abbrev-ref HEAD
master

# 前のブランチ名を取得
$ git rev-parse --abbrev-ref @{-1}
develop

git rev-parseなかなか面白い。
git rev-parseを使いこなす - Qiita

最終的に

↓のように着地。

Slackへの通知は[10分で出来る]シェルスクリプトの結果をslackに投稿 - Qiitaを参考にしています。

実際にmaster -> developへブランチを変更すると… f:id:mr_96:20170603233338p:plain キタ(゚∀゚)!
名前(gittn)やメッセージは整えるとして、とりあえず通知するところまでは完了。
これでSlack上で切り替えた時間がわかるので、大まかにでも作業時間がわかる(はず)。

curl叩いている分、checkoutが若干遅くなってしまったのは…どうしよう…。