Git Hooks完全ガイド|コミット前のコードチェックやテストを自動化する方法
Gitを使い始めた頃は「コミットする」「プッシュする」だけでも十分便利に感じます。しかし開発経験を積むにつれて、 「コミット前に自動でコードチェックできたら便利なのに」 「テストが失敗している状態でPushしたくない」 と思う場面が増えてきます。
そんな時に活躍するのがGit Hooks(Gitフック)です。
私も最初は「なんだか難しそうな上級機能」という印象を持っていました。しかし実際に使ってみると、まるで旅行前の持ち物チェックリストのような存在でした。出発前に忘れ物を防ぐように、Git HooksはコミットやPushの前に問題を検知してくれます。
この記事ではGit Hooksの基本から実践的な使い方、チーム開発での運用方法まで詳しく解説します。
Git Hooksとは?
Git Hooksとは、Gitの特定の操作が実行されたタイミングで自動的にスクリプトを実行できる仕組みです。
コミットやPush、ブランチ切り替えなどのイベントをトリガーにして、任意の処理を自動実行できます。
例えば以下のような処理を自動化できます。
- コードフォーマッターの実行
- Lintチェック
- 静的解析
- 単体テストの実行
- コミットメッセージの形式チェック
- 環境設定ファイルの自動生成
手作業で行うと忘れてしまいがちな作業も、Git Hooksを利用すれば確実に実行できます。
Git Hooksを導入するメリット
コード品質を維持できる
コミット前にLintや静的解析を実行することで、品質の低いコードがリポジトリへ混入することを防げます。
人的ミスを減らせる
開発中は急いでいることも多く、テスト実行を忘れることがあります。Git Hooksなら自動で実行されるため、確認漏れを防止できます。
チーム全体のルール統一
複数人開発ではコーディング規約の統一が重要です。Git Hooksを利用することで、チーム全体で同じ品質基準を維持できます。
代表的なGit Hooksの種類
Git Hooksにはさまざまな種類がありますが、特によく使われるものを紹介します。
pre-commit
コミット作成前に実行されるHookです。
- Lintチェック
- コードフォーマット
- 静的解析
- 不要ファイルの検出
エラーが発生した場合はコミットを中止できます。
commit-msg
コミットメッセージ入力後、コミット確定前に実行されます。
- チケット番号必須
- 英語のみ許可
- 文字数制限
- Conventional Commits形式の強制
pre-push
リモートリポジトリへPushする直前に実行されます。
テスト実行との相性が非常に良く、テスト失敗時はPushを停止できます。
- 単体テスト
- 結合テスト
- ビルド確認
- セキュリティチェック
post-checkout
ブランチやコミットを切り替えた直後に実行されます。
環境依存ファイルの生成や設定変更などで活用されます。
Git Hooksの作成方法
Gitリポジトリを作成すると、自動的に以下のディレクトリが生成されています。
.git/hooks
この中にHookスクリプトを配置することで利用できます。
pre-commit Hookを作成する
code .git/hooks/pre-commit
以下の内容を記述します。
#!/bin/sh
if ! ./run-linter.sh; then
echo "コードの整合性でエラーが発生しました"
exit 1
fi
この例ではLintエラーが発生した場合、コミットを中止します。
実行権限を付与する
Hook作成後は実行権限を付与する必要があります。
chmod +x .git/hooks/pre-commit
この設定を忘れるとHookは実行されません。
Git Hooksをチームで共有する方法
実はGit Hooksはデフォルトではリポジトリ管理対象外です。そのため、作成したHookは他のメンバーには共有されません。
そこで専用ディレクトリを作成して管理する方法がよく使われます。
共有用ディレクトリを作成する
mkdir hooks
cp .git/hooks/pre-commit hooks/pre-commit
リポジトリ内に保存してGit管理します。
インストールスクリプトを作成する
#!/bin/sh
cp hooks/* .git/hooks/
chmod +x .git/hooks/*
新しく参加したメンバーも簡単に同じ設定を導入できます。
Git Hooks運用時のベストプラクティス
処理は軽量にする
コミットのたびに長時間待たされると開発効率が下がります。可能な限り高速な処理を実行しましょう。
エラーメッセージを分かりやすくする
失敗理由が分からないと修正に時間がかかります。何が原因で止まったのかを明確に表示しましょう。
CI/CDとの役割を分ける
重いテストはGit HooksではなくCI/CD側へ任せるのがおすすめです。Hookは開発者の作業補助として利用すると効果的です。
実務でよく使われるGit Hooks活用例
実際の開発現場では、Git Hooksは単体ではなくさまざまなツールと組み合わせて利用されます。
- ESLintによるJavaScriptコード品質チェック
- Prettierによるコードフォーマット
- PHPStanによる静的解析
- Laravel Pintによるコード整形
- JestやPHPUnitによるテスト実行
- コミットメッセージ規約の強制
特に近年はHuskyやlint-stagedと組み合わせるケースが増えています。コミット前に変更されたファイルだけを検査できるため、処理速度を維持しながら品質向上を実現できます。
まとめ
Git Hooksは、Git操作に連動して処理を自動実行できる強力な仕組みです。
- pre-commitでLintや静的解析を実行
- commit-msgでコミットルールを統一
- pre-pushでテスト実行
- post-checkoutで環境構築を自動化
- チーム全体で品質向上を実現
最初は少し設定が必要ですが、一度導入すると開発体験が大きく向上します。
私自身もHooksを導入してから「Push後にエラー発覚」というケースが大幅に減りました。まるで旅行の出発前チェックのように、問題を早い段階で発見できるのが最大の魅力です。
Gitをさらに深く理解したい方は、ぜひGit Hooksを実際のプロジェクトで試してみてください。







0 件のコメント:
コメントを投稿