aiさんにコミットさせず自分でコミットしようとしたらエラー出て困ったんよね🍤
先に結論
VSCode の Source Control パネルからコミットしたときだけ Git Hook の実行環境が薄くて、asdf の shim が見えず pnpm: not found になることがある。
Lefthook の rc を使って、Hook 実行前に asdf を読み込ませると安定した。
-> https://lefthook.dev/configuration/rc/
起きたこと
- ターミナルからの
git commitは通る - VSCode 側のコミットでは pre-commit が落ちる
- エラーメッセージは
sh: 1: pnpm: not found
原因
統合ターミナルの設定(login shell など)と、VSCode が内部で叩く Git Hook の実行環境は別だった。
そのため、普段のシェルで通る PATH(asdf の shim 含む)が Hook 実行時には入っていなかった。
対応
Lefthook の rc で環境をそろえる。
1) プロジェクトの lefthook.yml に rc を指定
トップレベルで rc: ~/.lefthookrc を指定する。
2) ~/.lefthookrc を作成
以下のように asdf と PATH を初期化する。私はpnpmをasdf経由でインストールしているのでshimsも追加
export ASDF_DIR="$HOME/.asdf"
if [ -f "$ASDF_DIR/asdf.sh" ]; then
. "$ASDF_DIR/asdf.sh"
fi
# asdf の shims / bin を PATH に足す
export PATH="$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH"
3) フックを再インストール
$ pnpx lefthook install -f
# 実行結果
# sync hooks: ✔️(pre-commit, pre-push)
これでOK。
環境差分で起きるエラーはrcファイルあるんだろうなと思えるようになったのは大きい![]()
以上!
