Git Hooksの活用術:開発プロセスを自動化する方法

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のインストールと設定

  1. Huskyのインストールbashコピーする編集するnpm install husky --save-dev
  2. Git Hooksのセットアップbashコピーする編集するnpx husky install npx husky add .husky/pre-commit "npm run lint"

これで、Huskyを使ったpre-commitフックが設定されます。


まとめ

Git Hooksを活用することで、開発プロセスを自動化し、チーム全体の生産性を向上できます。コードの品質を保ち、共通ルールを徹底するためにも、Huskyなどのツールと組み合わせて効率的に管理しましょう。
継続的な見直しと改善を行いながら、より快適な開発環境を構築してください。

システム開発なんでもパートナー
システム開発なんでもパートナー

この記事を書いた人