0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeのコミットだけ `pnpm: not found` になったときのメモ(Lefthook + asdf)

0
Posted at

aiさんにコミットさせず自分でコミットしようとしたらエラー出て困ったんよね🍤

先に結論

VSCode の Source Control パネルからコミットしたときだけ Git Hook の実行環境が薄くて、asdf の shim が見えず pnpm: not found になることがある。

ここのこと
image.png

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ファイルあるんだろうなと思えるようになったのは大きい:tea:

以上!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?