Husky
Git フック
Commit や Push など特定の Git コマンドの前後に実行されるスクリプト
warning.icon 開発体験 が悪くなるので、実行に時間がかかる場合は、Git フックではなく CI タスクにすることを検討すること インストールすると、postinstall スクリプトを用いて自動的に Git フックをセットアップしてくれる
postinstall
npm install 実行後に呼び出されるスクリプト
セットアップ
husky-init を用いて行う
code:sh
$ npx husky-init
インストールが完了すると、package.json の script に以下が追加される
code:package.json
{
...
"scripts": {
"prepare": "husky install"
}
...
}
prepare は npm insall を実行するたびに自動的に実行される
code:sh
$ npm install
carousel@0.0.0 prepare
husky install
husky - Git hooks installed
また、.husky/pre-commit スクリプトが生成される
code:sh
. "$(dirname -- "$0")/_/husky.sh"
npm test
Commit を行う前に実行される
デフォルトだとテストが実行されるだけなので、以下のように自動フォーマットも行うよう修正する
code:sh
. "$(dirname -- "$0")/_/husky.sh"
npm test -- --run && npm run format
--run が Vitest のウォッチモードをオフにするオプション Commit すると、以下のように test と format が実行されるのが確認できる
code:sh
$ git commit -m ":wrench: Add pre-commit hook"
carousel@0.0.0 test
vitest --run
...
carousel@0.0.0 format
npm run format:js && npm run format:css
carousel@0.0.0 format:js
eslint --fix . && prettier --log-level warn --write .
carousel@0.0.0 format:css
stylelint "**/*.{ts,tsx}" --fix
テストが失敗したりエラーが発生した場合、Commit は中断される
Git フックをスキップしたい場合
--no-verify フラグを用いて Git コマンドを実行すると、フックを無効化できる