TL;DR
JavaScript プロジェクトの Git フックを管理するためのツール。Commit の前にテストやフォーマットを自動で実行できる。
仕組み
インストールすると、npm の prepare スクリプトを使って、自動的に Git フックをセットアップする。prepare は npm install を実行するたびに自動で実行される。
npx husky-init でセットアップすると、package.json の scripts に次の設定が追加される。
{
"scripts": {
"prepare": "husky install"
}
}あわせて .husky/pre-commit スクリプトが作られる。このスクリプトは Commit の前に実行され、テストが失敗したりエラーが起きたりすると Commit は中断される。
例
.husky/pre-commit は、初期状態ではテストを実行するだけである。次のように直すと、自動フォーマットも行う。--run は Vitest のウォッチモードを切るオプションである。
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm test -- --run && npm run formatCommit すると、test と format が実行される。
$ git commit -m ":wrench: Add pre-commit hook"
> [email protected] test
> vitest --run
...
> [email protected] format
> npm run format:js && npm run format:css
> [email protected] format:js
> eslint --fix . && prettier --log-level warn --write .
> [email protected] format:css
> stylelint "**/*.{ts,tsx}" --fix注意点
実行に時間がかかると開発体験が悪くなる。時間がかかる処理は、Git フックではなく CI のタスクにすることを検討する。実行時間を短くするために、lint-staged と組み合わせて使うことが多い。
Git フックを飛ばしたいときは、Git コマンドに --no-verify フラグを付けて実行する。