Husky pre-commit フックエラーの解決方法
問題の概要
Gitコミット時に「husky > pre-commit hook failed (add --no-verify to bypass)」というエラーが発生する場合があります。このエラーは、Huskyが設定するpre-commitフックが正常に実行できなかったことを示しています。
典型的なエラーメッセージ例:
husky > npm run -s precommit (node v12.18.3)
'pretty-quick' is not recognized as an internal or external command,
operable program or batch file.
husky > pre-commit hook failed (add --no-verify to bypass)
根本的な原因
このエラーは主に以下の理由で発生します:
- 依存パッケージの不足またはバージョン不一致
.git/hooks
ディレクトリ内のファイル競合- 設定ファイルの不備やスクリプトの誤り
- 必要なツール(ESLint、Prettierなど)のグローバルインストール不足
解決方法
方法1: Huskyの最新バージョンにアップグレード
Huskyの古いバージョンには既知の問題がある場合があります。最新版にアップグレードしてください:
npm install husky@latest --save-dev
方法2: .git/hooksディレクトリの削除と再インストール
Gitフックの競合を解消するために、既存のフックを削除してから再インストールします:
# .git/hooksディレクトリを削除
rm -rf .git/hooks
# パッケージを再インストール
npm install
方法3: 不足しているパッケージのインストール
エラーメッセージで示されている特定のツール(ESLint、Prettierなど)をインストールします:
# グローバルにインストールする場合
npm install -g eslint prettier
# 開発依存関係としてインストールする場合
npm install --save-dev eslint prettier
方法4: Husky設定の確認と修正
.husky
ディレクトリまたはpackage.json
内のHusky設定を確認します:
// package.jsonの場合
{
"scripts": {
"lint": "eslint \"src/**/*.{js,ts,tsx}\" --quiet --fix",
"precommit": "npm run lint"
},
"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
}
}
方法5: lint-stagedの設定
変更されたファイルのみをリントするようにlint-staged
を設定します:
// package.json
{
"lint-staged": {
"**/*": "prettier --write --ignore-unknown",
"src/**/*.{js,ts,tsx}": "eslint --fix"
}
}
一時的な回避策
緊急の場合には以下のコマンドでフックをスキップできますが、恒久的な解決策ではありません:
git commit -m "コミットメッセージ" --no-verify
WARNING
--no-verify
オプションはコードチェックをスキップするため、品質保証上のリスクがあります。緊急時以外の使用は避けましょう。
推奨される設定
現代的なプロジェクトでは、以下のような設定が推奨されます:
{
"scripts": {
"prepare": "husky install",
"lint": "eslint src --ext .js,.ts,.tsx --fix",
"format": "prettier --write \"src/**/*.{js,ts,tsx,json,css,md}\""
},
"devDependencies": {
"husky": "^9.0.0",
"lint-staged": "^13.0.0",
"eslint": "^8.0.0",
"prettier": "^3.0.0"
},
"lint-staged": {
"*.{js,ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{json,css,md}": "prettier --write"
}
}
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx lint-staged
まとめ
Huskyのpre-commitフックエラーは、パッケージの不足、設定の問題、またはバージョン不一致によって発生します。根本的な解決のために、依存関係の再インストール、設定の見直し、最新バージョンへのアップグレードを実施してください。一時的な回避策として--no-verify
オプションも利用できますが、コード品質のチェックをスキップするため、恒久的な解決策としての使用は推奨されません。
正しく設定されたHuskyは、コードの品質維持とチーム開発の効率化に大きく貢献します。