📖
🚀 Git フックで開発者の生産性を向上
Git は開発者にとって最も強力なツールの 1 つですが、多くの開発者は Git の潜在能力をほとんど活かしきれていません。そこで今回は、Git フック について詳しく見ていきましょう。これは、一般的なタスクを自動化することでワークフローを大幅に改善できる、あまり知られていない機能です。
🧠 Git フックとは?
Git フックとは、コミット、マージ、プッシュなどのイベントの前後に Git が実行するスクリプトです。Git リポジトリのイベントリスナーのようなものだと考えてください。
Git フックは .git/hooks/ ディレクトリに保存され、次のような機能があります。
-
pre-commit: コミットが確定する直前に実行されます。 -
commit-msg: コミットメッセージを検証またはフォーマットします。 -
pre-push:git pushの前に実行されます。
💡 Git フックを使う理由
Git フックを使うと、CI/CD に依存せずに、ローカル でルールを適用したり、自動化プロセスを実行したりできます。一般的な用途をいくつかご紹介します。
- コミット前にコードを自動フォーマットする (例: Prettier や ESLint を使用)
- console.log や TODO でコミットを抑止する
- コミットメッセージの規約を検証する (例: Conventional Commits)
- プッシュ前にユニットテストを実行する
🔧 Git フックの設定
eslint を実行する pre-commit フックの例を以下に示します。
#!/bin/sh
# .git/hooks/pre-commit
echo "ESLint を実行しています..."
npx eslint . || exit 1
- これを
.git/hooks/pre-commitとして保存します。 - 実行可能にします。
chmod +x .git/hooks/pre-commit
これで、コミットするたびに ESLint が実行され、問題が見つかった場合はコミットがブロックされます。
✅ プロのヒント
-
Husky を使ってメンテナンス性を向上させる: スクリプトを手動で管理する代わりに、Husky を使うと、
package.json内、またはバージョン管理ツール内のシェルスクリプトとしてフックを管理できます。 -
チーム間でフックを共有する: Git はデフォルトでは
.git/hooks/をバージョン管理しません。Husky などのツールを使用して、リポジトリ内でフックをバージョン管理してください。
🧪 例: コミットメッセージのリンター
Conventional Commits を強制するための簡単な設定例を以下に示します。
# .git/hooks/commit-msg
#!/bin/sh
if ! grep -qE "^(feat|fix|docs|style|refactor|test|chore)\([^)]+\): .+" "$1"; then
echo "❌ コミットメッセージは Conventional Commits に従う必要があります"
exit 1
fi
これにより、コミット履歴が整理され、変更履歴に役立てやすくなります。
🌱 まとめ
Git フックは、ローカルワークフローを自動化するためのシンプルかつ強力な方法です。最初は小さな設定から始め、例えばコードのリンターチェックを行う pre-commit フックなどを導入し、徐々にチームに適した設定を構築していきましょう。
Discussion