Open7
Gitの操作時にコマンドを実行できるlefthookを試してみる
共同開発をしていると
git pull
→ 動かなくなった! → npm i
してないだけだった。
みたいな事が多々あるので、そういうのを無くしたい。
lefthookというツールを使うとgit hookの仕組みを言語を横断していろいろできるみたいなので、試してみる。
フロントエンドのプロジェクトにインストール
今回はフロントエンドのプロジェクトにインストールする。
rubyのnodeのパッケージが用意されていて、それ以外の言語でもbrewなりsnapなり使えるらしい。
npm i -D lefthook
lefthookはgoで書かれてるけど、これで適切なバイナリが入る。
Hookを追加しておく
今回やりたいのは「git pullした時に」「npm installしたい」なので、post-mergeを指定する。
lefthook add post-merge
(後でわかったが、npm installでもHookが反映されるので、この作業は他のチームメンバーには必要なさそうだった)
設定ファイルを用意する
今回やりたいのは「git pullした時に」「npm installしたい」なので、これ。
lefthook.yml
post-merge:
commands:
package-install:
run: npm i
【実験】ローカルのソースを消してリポジトリをcloneし直す
- Hookの設定をいったんcommit & pushしておく
- ローカルのソースを削除する
- もう一度ソースをcloneする
- npm installする
- 別のマシンで適当にファイルを修正してcommit & push
- git pullしてみる
この手順を行ったところ、git pullのあとでちゃんとnpm installが走った。
チーム開発では他のメンバーに特に準備をしてもらう必要はなさそう。
おまけ
コマンドをこのように書いておけば、package.jsonが変わった時のみnpm installできる。
ただWindowsユーザーへの配慮など考えるとちょっと厄介。
(git diff 'HEAD@{1}' --name-only | grep package.json > /dev/null) && npm i || :
原典はこの記事
所感
便利だけれども、git操作に副作用を持たせるというのは若干抵抗がある。
hooksはれっきとしたgitの標準機能なのだから気にせず使えば良いとも言えるけど、仕組みを知らない人は多分びっくりする。
悩ましいところ。