【プリコミット】

pre-commit とは?

最終更新:
💡 コミットの「門番」が問題のある変更を手元で止める

Gitのコミット前などに実行するチェック(フック)を、設定ファイルで管理・共有できるフレームワーク。リンターやフォーマッターをコミットのたびに自動で走らせ、問題のある変更を早めに見つけられる。

📌 このページのポイント
pre-commit:コミット前の自動チェック git commit 実行 pre-commit フック発火 チェック実行 チェック項目(例) - リンター (ESLint) - フォーマッター (Prettier) - 型チェック - 機密情報の検出 OK NG コミット成功 コミット中断 .pre-commit-config.yaml repos: - repo: https://github.com/pre-commit/... hooks: [trailing-whitespace, end-of-file-fixer, check-yaml, ...] 設定ファイルを共有し、各自が pre-commit install で有効化(CIでも実行すると確実)
pre-commitのイメージ
ひよこ ひよこ
pre-commitって何をしてくれるツールなの?
ペンギン先生 ペンギン先生
Gitでコミットするときに、登録しておいたチェックやフォーマットを自動で実行してくれるツールだよ。たとえば行末の余分な空白や、設定ファイルの書式ミスを見つけて「直してからコミットしてね」と止めてくれるんだ
ひよこ ひよこ
へぇ、コミットを止めちゃうの?
ペンギン先生 ペンギン先生
Gitのpre-commitフックは、失敗(0以外の終了コード)を返すとコミットを中断するんだ。フォーマッターがファイルを書き換えた場合も失敗扱いになるから、変更内容を確認して、もう一度ステージしてからコミットするよ
ひよこ ひよこ
設定は難しいのかな?
ペンギン先生 ペンギン先生
`.pre-commit-config.yaml`に、使うフックの公開リポジトリとバージョン、フックのIDを書くのが基本だよ。公式サイトには公開されているフックの一覧もあって、PythonのリンターからJavaScriptのフォーマッターまで選べるんだ
ひよこ ひよこ
チーム全員に同じチェックをさせることもできるの?
ペンギン先生 ペンギン先生
設定ファイルをリポジトリにコミットすれば、全員が同じ設定を使えるよ。ただしGitのフックはクローンしただけでは有効にならないから、各自が`pre-commit install`を一度実行する必要があるんだ
ひよこ ひよこ
フックを飛ばしてコミットする人がいたらどうなるの?
ペンギン先生 ペンギン先生
`git commit --no-verify`や環境変数SKIPで飛ばせるから、手元のチェックだけでは確実じゃないんだ。CIでも`pre-commit run --all-files`を実行しておけば、すり抜けた変更も見つけられるよ。フックの実行環境はpre-commitが言語ごとに分けて用意するから、プロジェクトの依存関係を汚さないのもうれしい点だね
もっと詳しく知りたい人へ

pre-commitはコミット以外のタイミングでも使える?

使えるよ。pre-commitはpre-commitフックだけでなく、pre-push(プッシュ前)やcommit-msg(コミットメッセージの検査)など、ほかのGitフックの種類にも対応している。たとえば時間のかかるテストはプッシュ前に回すと、毎回のコミットを軽く保てるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「pre-commit」って出てきたら「コミット前に自動でコードチェックしてくれる仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「pre-commit」 = コミットの前
💬 Gitにはコミットの前に処理を挟める「pre-commit hook」という仕組みがあって、それを簡単に使えるようにしたフレームワークの名前だよ

参考資料

← 用語集にもどる