📖

🚀 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
  1. これを .git/hooks/pre-commit として保存します。
  2. 実行可能にします。
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