Git Hooks完全ガイド|pre-commit・pre-pushでコード品質を自動化する方法

2026年7月3日金曜日

git プログラミング

t f B! P L

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を実際のプロジェクトで試してみてください。

このブログを検索

Welcome



旅するWebライター「Hide」のブログへようこそ!

2年間の世界一周を終え、今は旅の思い出を言葉にしながら、AIやプログラミングという新しい冒険を楽しんでいます。最新技術を味方につけて、もっと自由でクリエイティブな発信を続けていきます!

人気の投稿

QooQ