【プリコミット】

pre-commit とは?

💡 コミットの「門番」が品質の低いコードを通さない
📌 このページのポイント
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のイメージ
ひよこ ひよこ

pre-commitって何をしてくれるツールなの?

ペンギン先生 ペンギン先生

Gitでコミットするときに、自動でコードのチェックやフォーマットをしてくれるツールだよ。たとえばインデントがずれていたり、構文エラーがあると「ダメ!直してからコミットして」って止めてくれるんだ

ひよこ ひよこ

へぇ、コミットを止めちゃうの?

ペンギン先生 ペンギン先生

そう、問題があるとコミットが失敗するんだ。だから品質の低いコードがリポジトリに入り込むのを水際で防げる。CIで後から指摘されて修正コミットを積む手間がなくなるよ

ひよこ ひよこ

設定は難しいのかな?

ペンギン先生 ペンギン先生

`.pre-commit-config.yaml`というファイルにどんなチェックを実行するか書くだけだよ。たとえばPythonならblackやflake8、JavaScriptならESLintPrettierを指定できる。公式サイトに数百種類のプラグインが公開されていて、repos欄にURLを貼るだけで使えるんだ

ひよこ ひよこ

Python以外のプロジェクトでも使えるの?

ペンギン先生 ペンギン先生

pre-commit自体はPython製だけど、JavaScript、Go、Rust、何でも使えるよ。各言語のリンターやフォーマッターをフックとして登録するだけだからね

ひよこ ひよこ

チーム全員に同じチェックをさせることもできるの?

ペンギン先生 ペンギン先生

できるよ!`.pre-commit-config.yaml`をリポジトリにコミットしておけば、`pre-commit install`を実行するだけでチーム全員に同じフックが適用される。さらにCI上でも`pre-commit run --all-files`を実行すれば、フックをスキップした人のコードもキャッチできる。実はpre-commitはフック実行時に各ツールを独立した仮想環境インストールするから、プロジェクトの依存関係を汚さないのも地味にありがたいポイントだよ

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