Git フックとは?
Git フックとは、コミットの前やプッシュの後など、ワークフローの特定の時点で Git が自動的に実行するスクリプトです。
Git フックを使うと、Git のイベントにカスタムの動作を紐付けられます。コミット、プッシュ、マージを行うと、Git はあなたが用意したスクリプトを実行でき、ちょうど適切なタイミングでルールを強制したり、チェックを走らせたり、タスクを自動化したりできます。これらは CI チェックのローカル版のいとこのような存在です。
フックとは何か
フックとは、特定のイベントが発生したときに Git が実行する実行可能なスクリプトです。フックの時点は数多くあり、コミットの前後、プッシュの前、マージの後などがあります。それぞれが定められた瞬間に発火し、ワークフローのそのステップを横取りしたり、それに反応したりできます。
ローカルフックとサーバーフック
クライアント側のフックは開発者のマシン上で実行され、たとえばコミット前に lint を行います。サーバー側のフックは変更がプッシュされたときにリモートで実行され、たとえばポリシーに違反するプッシュを拒否します。この二つは、編集から共有された履歴に至る経路の異なる時点をカバーします。
シンプルなフック
フックはリポジトリの hooks ディレクトリに置かれ、実行可能である必要があるだけです。
A pre-commit hook that lints
#!/bin/sh
# .git/hooks/pre-commit
npm run lint || exit 1フックと CI/CD
フックはコードが CI に到達する前に高速なローカルフィードバックを与え、単純な問題をキーボードの前で捕まえます。しかしローカルフックはバージョン管理の外にあってスキップできるため、実行される保証がなく、CI を置き換えるのではなく補完するものです。強制されるゲートは CI のままであり、フックは早期警告です。
フックを効果的に使う
- lint やフォーマットのような高速なローカルチェックにフックを使います。
- ローカルフックは回避できることを忘れず、それだけに頼らないようにします。
- 共有フックはツールで管理し、チーム全体に行き渡るようにします。
- CI を信頼できる強制されたゲートとして維持します。
重要なポイント
- Git フックは Git のワークフローの定められた時点でスクリプトを実行します。
- クライアント側とサーバー側のフックは異なるイベントをカバーします。
- フックは高速なローカルフィードバックを与えますが、強制されるゲートは CI のままです。
関連ガイド
What Is a Pre-Commit Hook?What is a pre-commit hook? An explainer on running checks before a commit is created, common uses like lintin…
What Is a Git Commit?What is a Git commit? An explainer covering what a commit records, its message and hash, how commits form his…
What Is a Required Status Check?What is a required status check? Learn how marking a CI check as required blocks merges until it passes, maki…