Git Hooksを理解する
Git Hooksの種類と、Gitワークフロー内で実行されるタイミングについて学びます。
「Git Hooksを理解する」はCoddyKit上の無料Git & GitHub Professional Workflowレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGit & GitHub Professional Workflow学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Git & GitHub Professional Workflowコースには全4レッスンが含まれています。
Git Hooksとは
Git Hooksへようこそ。Git Hooksは、コミット、プッシュ、プッシュされたコミットの受信などのイベントの前後に、Gitが自動的に実行する強力でカスタマイズ可能なスクリプトです。
Gitのワークフローにおける自動チェックポイントや自動アクションのようなものだと考えてください。プロジェクトの規約を守らせたり、タスクを自動化したり、他のシステムと連携したりするのに役立ちます。
フックの配置場所
すべてのGitリポジトリには、.git/hooksディレクトリがあります。その中には、通常.sampleで終わるフックスクリプトのサンプルがあります。
フックを有効にするには、.sample拡張子を削除し、ファイルを実行可能にするだけです。するとGitが適切なタイミングで実行します。
- 場所:
.git/hooks/ - ファイル:シェルスクリプト(Bash、Python、Rubyなど)
- 有効化:名前を変更して実行可能にする
クライアントサイドとサーバーサイド
Git Hooksは、実行される場所に基づいて主に2種類に分類されます。
- クライアントサイドフック:ローカルマシン上で実行されます(コミットやリベースの前など)。個人のワークフローの自動化や、ローカルでのポリシー適用に使います。
- サーバーサイドフック:リモートGitサーバー上で実行されます(共有リポジトリへコードをプッシュしたときなど)。全員に適用するプロジェクト全体のポリシーを強制します。
クライアントフック:pre-commit
pre-commitフックは、最もよく使われるクライアントサイドフックの1つです。Gitが正式にコミットを作成する前に実行されます。
pre-commitスクリプトがゼロ以外のステータスで終了すると、Gitはコミットを中止します。次のような処理に最適です。
- コードのLint(スタイルエラーのチェック)
- ユニットテストの実行
- 大きなファイルや機密データのチェック
クライアントフック:commit-msg
commit-msgフックは、コミットメッセージを入力した後、コミットが確定する前に実行されます。
このフックは、コミットメッセージが特定の規約や形式に従っていることを確認するのに役立ちます。たとえば、次のような点をチェックできます。
- メッセージがチケットID(例:
[JIRA-123])で始まっているか - メッセージの長さが制限内に収まっているか
- 特定のキーワードが含まれているか、または含まれていないか
クライアントフック:post-commit
post-commitフックは、コミットが正常に作成された直後に実行されます。
pre-commitやcommit-msgとは異なり、このフックでコミットの結果を変更することはできません。通常は、次のような通知や連携の目的で使われます。
- チームメンバーへの通知
- プロジェクト管理ツールの更新
- 継続的インテグレーション(CI)ビルドの開始(ただし、これはサーバーサイドフックで行うほうが一般的です)
サーバーフック: pre-receive
サーバー側のフックに移りましょう。pre-receiveは、リモートリポジトリ上の参照(ブランチやタグなど)が更新される前に実行されます。
このフックは、次のような重要なリポジトリポリシーを適用するのに役立ちます。
mainブランチへの直接プッシュを防止する- すべてのコミットに署名が付いていることを確認する
- コミッターの身元を検証する
このフックがゼロ以外の終了ステータスで終了すると、プッシュ全体が拒否されます。
サーバーフック: post-receive
post-receiveフックは、プッシュによってリモートリポジトリ上の参照が正常に更新された後に実行されます。
post-commitと同様に、このフックでプッシュを拒否することはできません。一般的には次の用途に使われます。
- CI/CDパイプラインを起動する
- 外部の課題管理システムを更新する
- チームにメール通知を送信する
- ステージング環境にコードをデプロイする
シンプルなフックの作成
フックを作成するには、フック名(例: pre-commit)のファイルを.git/hooks/ディレクトリに作成するだけです。とても基本的なフックを作ってみましょう。
#!/bin/sh
# This pre-commit hook will always succeed
echo "Running pre-commit hook..."
exit 0フックを実行可能にする
フックスクリプトを作成したら、実行可能にする必要があります。そうしないとGitは実行してくれません。ターミナルでchmodコマンドを使います。
chmod +x .git/hooks/pre-commit
これで、コミットを実行するたびにGitがこのスクリプトを実行します。
クイックチェック: フックの実行タイミング
Gitフックは、ワークフロー内の特定のタイミングで実行されます。効果的に使うには、そのタイミングを理解することが重要です。
まとめ: Gitフックを理解する
Gitフックという強力な機能の第一歩を踏み出しました。
- Gitフックは、Gitのイベント中に処理を自動化するスクリプトです。
- リポジトリの
.git/hooks/ディレクトリに保存されます。 - フックには、クライアント側(ローカルマシン)とサーバー側(リモートリポジトリ)があります。
pre-commitやpre-receiveなどの主要なフックは、操作をブロックしてポリシーを適用できます。post-commitやpost-receiveなどのフックは、処理後の通知や連携に使われます。
次は、具体的なフックを実装する実践例に取り組みます。
よくある質問
「Git Hooksを理解する」レッスンは無料ですか?
はい。「Git Hooksを理解する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Git & GitHub Professional Workflowコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Git & GitHub Professional Workflowコースには全4レッスンが含まれています。
「Git Hooksを理解する」で何を学びますか?
Git Hooksの種類と、Gitワークフロー内で実行されるタイミングについて学びます。 ブラウザで直接実行するハンズオンコードでGit & GitHub Professional Workflowを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Git & GitHub Professional Workflowを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGit & GitHub Professional Workflowは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Git Hooksを理解する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGit & GitHub Professional Workflowレッスンでコードを書いて実行できますか?
はい。すべてのGit & GitHub Professional Workflowレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Git Hooksを理解する
- Pre-commitとPost-merge Hooks
- Git設定のカスタマイズ
- Husky でフックを共有する