LoginSignup
0
0

simple-git-hooksを使ってVSCodeのSource Controlでgit commitするときに"command not found"エラーが出た

Last updated at Posted at 2024-05-03

問題

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へのパスを通すことができます。

.git/hooks/pre-commit
#!/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/

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