Pre-commit hookとは?
pre-commit hookは、commitが記録される前に自動的に実行されるスクリプトで、チェックが失敗するとcommitをブロックします。
Gitはワークフローの特定のポイントでスクリプトを実行できます。pre-commit hookはcommitが作成される直前に発火するため、ローカルでlint、フォーマット、あるいは素早いチェックを実行できます - 問題が共有リポジトリやCIに到達する前に捕捉できるのです。
hookの仕組み
Gitはhookディレクトリ内の実行可能なスクリプトを探します。pre-commit hookはstageされた変更に対して実行され、非ゼロのexitはcommitをブロックします。pre-commitツールのようなフレームワークは、これらのhookをチーム全体で宣言的に管理します。
簡単な例
formatterとシークレットスキャナーを列挙した.pre-commit-config.yamlは、commit時にstageされたファイルに対してそれらのツールを実行します。formatterがファイルを書き換えたり、スキャナーがキーを見つけたりすると、修正するまでcommitはブロックされます。
何を実行するか
- stageされたファイルに対する高速なformatterとlinter。
- 認証情報のcommitを止めるシークレットスキャナー。
- 素早く的を絞ったチェック - テストスイート全体ではありません。
hookはCIを補完するもので、置き換えではない
hookはローカルで実行され、スキップできます(git commit --no-verify)。そのため唯一のゲートにはなり得ません。hookはフィードバックループを短縮します。CIは、バイパスできない場所で同じチェックを実行する権威あるゲートです。
高速に保つ
遅いhookは人々が無効化するhookです。stageされたファイルに対して素早いチェックだけを実行し、重量級のスイートはCIに任せましょう - hookはcommitに数分ではなく数秒を加えるべきです。
重要なポイント
- pre-commit hookは、commitが作成される前にローカルでチェックを実行します。
- 高速なlint、フォーマット、シークレットスキャンに使いましょう。
- hookはフィードバックを短縮しますが、CIはスキップできないゲートであり続けます。
関連ガイド
What Is Linting?Linting analyzes code for style issues, likely bugs, and bad patterns using configurable rules. Learn how lin…
What Is a Quality Gate?A quality gate is a pass/fail condition that blocks a change from merging unless it meets defined thresholds.…
What Is Secret Masking?Secret masking automatically replaces secret values in CI logs with asterisks so they are not exposed. Learn…