問題
simple-git-hooksを導入してgit commit時にlinterを走らせようとしたのですが、VSCodeのGUIからcommitしたらpnpm: command not found
エラーが出てかなり詰まりました。
私の場合、Dockerコンテナ内にてnvmでnodeのインストールを実施し、pnpmを使ってパッケージ管理をしていたので上記エラーが出ましたが、npmやyarnを使用している場合も同じようなエラーが出るのかなと思います。
解決方法
Dockerfile内に以下の記述を追加したら解決しました!
# `~/.simple-git-hooks.rc`を作成してnvmを読み込む
RUN echo -e 'export NVM_DIR="$HOME/.nvm"\n'\
'[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"\n'\
> $HOME/.simple-git-hooks.rc
# 環境変数を設定
ENV SIMPLE_GIT_HOOKS_RC="$HOME/.simple-git-hooks.rc"
simple-git-hooksで自動生成される.git/hooks/pre-commit
内に$SIMPLE_GIT_HOOKS_RC
を読み込む記述があるので、そこを通ることでnvmへのパスを通すことができます。
#!/bin/sh
if [ "$SKIP_SIMPLE_GIT_HOOKS" = "1" ]; then
echo "[INFO] SKIP_SIMPLE_GIT_HOOKS is set to 1, skipping hook."
exit 0
fi
# ↓で$SIMPLE_GIT_HOOKS_RCが読み込まれる
if [ -f "$SIMPLE_GIT_HOOKS_RC" ]; then
. "$SIMPLE_GIT_HOOKS_RC"
fi
pnpm run lint-staged
余談
ちなみに公式にGUIでのcommand not foundエラーが出たときの対処法が記載されているのですが、nvmの場合における記載がないので、解決するまでに苦労しました。。
https://github.com/toplenboren/simple-git-hooks?tab=readme-ov-file#i-am-getting-npx-command-not-found-error-in-a-gui-git-client
参考
以下の記事がcommand not foundとの戦いに終止符を打ってくれました。執筆者に感謝です!
https://www.gaji.jp/blog/2022/11/11/12096/