Git Hooks & Automation

コミットやプッシュの直前にスクリプトを自動実行し、品質を強制します。

graph LR
    A[git commit] --> B{pre-commit}
    B -- Fail --> C[Stop Commit ❌]
    B -- Pass --> D{commit-msg}
    D -- Fail --> C
    D -- Pass --> E[Commit Created ✅]
    E --> F[git push]
    F --> G{pre-push}
    G -- Fail --> H[Stop Push ❌]
    G -- Pass --> I[Push to Remote ✅]

1. Client-side Hooks

pre-commit

一番よく使われる。LintやFormatを実行し、エラーならコミット中止。

commit-msg

コミットメッセージの形式をチェック。「feat:」などを強制。

pre-push

プッシュ前にテストを実行。重いテストはここで。

2. Modern Setup: Husky + lint-staged

生のGit Hooksは扱いにくいため、Node.jsプロジェクトでは `husky` を使うのが標準です。

Husky & lint-staged setup
// package.json
{
"scripts": {
"prepare": "husky install"
},
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
}
// .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
Commit Message Linting
// .husky/commit-msg
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# Ensure commit message follows Conventional Commits
npx commitlint --edit "$1"