husky: command not found エラーの解決方法
問題の概要
Node.jsプロジェクトでHuskyをセットアップした際に、npm install
または npm ci
を実行すると以下のエラーが発生することがあります:
sh: husky: command not found
npm ERR! code 127
npm ERR! command failed
npm ERR! command sh -c husky install
このエラーは、Huskyが正しくインストールされていないか、実行環境に問題があることを示しています。
主な原因
Huskyの「command not found」エラーには以下のような原因が考えられます:
- NODE_ENVがproductionに設定されている
- nvmを使用している場合のパス問題
- IDEやターミナルのキャッシュ問題
- プロダクション依存関係のみのインストール
- Huskyのバージョン互換性の問題
解決方法
1. NODE_ENVの確認と設定
WARNING
NODE_ENVが「production」に設定されている場合、devDependencies(Huskyを含む)がインストールされないため、このエラーが発生します。
# 現在のNODE_ENVを確認
echo $NODE_ENV
# 開発環境に設定(一時的)
export NODE_ENV=development
# または特定の環境名を設定
export NODE_ENV=local
# その後、npm installを実行
npm install
2. nvmユーザー向けの設定
nvmを使用している場合は、HuskyがNode.jsの実行パスを認識できるようにする必要があります。
Husky v8以下の場合(非推奨):
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
Husky v9以上の場合:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# .nvmrcファイルがある場合は自動で使用
if [ -f .nvmrc ] && [ -s "$NVM_DIR/nvm.sh" ];
then
. "$NVM_DIR/nvm.sh"
nvm use
fi;
3. 一時的な回避策
Huskyが正常にインストールされるまで、一時的にprepareスクリプトを無効化する方法:
# prepareスクリプトを一時的に空にする
npm set-script prepare ''
# 依存関係をインストール
npm install
# prepareスクリプトを再度有効化
npm set-script prepare "husky install"
# Huskyをインストール
npm run prepare
4. プロダクション環境でのインストール
本番環境でプロダクション依存関係のみをインストールする場合:
# スクリプト実行をスキップしてインストール
npm ci --omit=dev --ignore-scripts
5. IDE/ターミナルの再起動
VSCode、GitHub Desktop、GitKrakenなどのIDEを使用している場合:
- アプリケーションを完全に終了
- 再起動する
- 再度コマンドを実行
6. Windows環境でのパス設定
WindowsでGitBashを使用している場合:
- 環境変数「Path」に
C:\Program Files\Git\bin
を追加 - IDEやターミナルを再起動
7. バイナリファイルの実行権限問題
Mac/Linuxで実行権限がない場合:
# Huskyのバイナリファイルに実行権限を付与
chmod +x node_modules/.bin/husky
chmod +x node_modules/husky/lib/bin.js
# .huskyディレクトリ内のフックファイルにも権限付与
chmod +x .husky/*
8. バージョン互換性の問題
古いバージョンのHuskyを使用している場合:
# 最新バージョンにアップグレード
npm install husky@latest --save-dev
# または特定のバージョンをインストール
npm install husky@6.0.0 --save-dev
根本的な解決策
プロジェクトの設定を恒久的に修正する方法:
{
"scripts": {
"prepare": "node_modules/.bin/husky install"
},
"devDependencies": {
"husky": "^8.0.0"
}
}
# Huskyを初期化
npx husky install
# prepareスクリプトを設定
npm set-script prepare "husky install"
# プリコミットフックを追加
npx husky add .husky/pre-commit "npm test"
まとめ
Huskyの「command not found」エラーは、環境設定やインストールプロセスの問題によって発生します。最も一般的な原因はNODE_ENVの設定とnvmのパス問題です。上記の解決策を状況に応じて試してみてください。
TIP
常にHuskyの最新バージョンを使用し、公式ドキュメントに従って設定することをおすすめします。また、チーム全員が同じ開発環境設定を行うことで、この種の問題を防ぐことができます。