Git Hooksは、Gitのさまざまな操作にフックして自動処理を実行できる仕組みです。開発プロセスの自動化やミスの防止、チームのコーディングルールの統一に役立ちます。
本記事では、Git Hooksの基本から具体的な活用方法までを解説します。
Git Hooksとは?
Git Hooksは、特定のGit操作が実行されたときに自動的にスクリプトを実行する機能です。これにより、コミットやプッシュ時にコードスタイルチェックやテストの自動実行が可能になります。
Git Hooksはhooks
ディレクトリに配置され、プロジェクト内で管理されます。
主なGit Hooksの種類
- クライアントサイド Hooks
pre-commit
:コミット前に実行commit-msg
:コミットメッセージの検証pre-push
:リモートリポジトリへのプッシュ前に実行
- サーバーサイド Hooks
pre-receive
:リモートリポジトリへのデータ受信前に実行post-receive
:データ受信後に実行
Git Hooksの基本設定方法
Git Hooksは各リポジトリの.git/hooks
ディレクトリ内にあります。初期状態ではサンプルスクリプトが.sample
ファイルとして用意されているので、これを元に作成します。
1. pre-commit
フックを設定する
pre-commit
フックを使って、コミット前にESLintでコードをチェックするスクリプトを作成します。
ステップ 1:pre-commit
ファイルを作成.git/hooks/pre-commit
ファイルを作成し、以下のスクリプトを記述します。
bash#!/bin/sh
echo "Running ESLint..."
npm run lint
if [ $? -ne 0 ]; then
echo "ESLint failed. Commit aborted."
exit 1
fi
ステップ 2:実行権限を付与
スクリプトを実行可能にするために、以下のコマンドを実行します。
bashchmod +x .git/hooks/pre-commit
この設定により、コードにESLintのエラーが含まれている場合、コミットが中断されます。
Git Hooksの実践的な活用例
1. コミットメッセージの検証 (commit-msg
)
コミットメッセージのフォーマットを統一することで、履歴の可読性が向上します。
以下は、コミットメッセージが特定のフォーマット(例:[Issue-番号]: メッセージ
)であるかを検証するスクリプトです。
bash#!/bin/sh
commit_msg_file=$1
commit_msg=$(cat $commit_msg_file)
if ! echo "$commit_msg" | grep -qE "^\[Issue-[0-9]+\]: .+"; then
echo "Error: Commit message must follow the format '[Issue-番号]: メッセージ'"
exit 1
fi
このスクリプトは、誤った形式のメッセージがある場合にコミットを拒否します。
2. プッシュ前のテスト自動実行 (pre-push
)
プッシュ前に自動テストを実行し、テストが失敗した場合はプッシュを中止することで、不完全なコードがリモートリポジトリにアップロードされるのを防ぎます。
bash#!/bin/sh
echo "Running tests..."
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Push aborted."
exit 1
fi
Huskyを使ったGit Hooksの管理
.git/hooks
に直接スクリプトを配置する方法は手軽ですが、チームで共有するには不便です。そのため、Huskyというツールを使うと便利です。HuskyはGit Hooksをpackage.json
で管理し、チームメンバー全員が同じフックを使えるようにします。
Huskyのインストールと設定
- Huskyのインストールbashコピーする編集する
npm install husky --save-dev
- Git Hooksのセットアップbashコピーする編集する
npx husky install npx husky add .husky/pre-commit "npm run lint"
これで、Huskyを使ったpre-commit
フックが設定されます。
まとめ
Git Hooksを活用することで、開発プロセスを自動化し、チーム全体の生産性を向上できます。コードの品質を保ち、共通ルールを徹底するためにも、Huskyなどのツールと組み合わせて効率的に管理しましょう。
継続的な見直しと改善を行いながら、より快適な開発環境を構築してください。