Skip to content
Latchkey

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はスキップできないゲートであり続けます。

関連ガイド