こんにちは。エンジニアリングの現場で「なぜかCIで落ちる」「フォーマットが汚くてレビューで指摘される」といった無駄な手戻りに時間を溶かしていませんか?
実は、「コミットする前の数秒」に投資するだけで、あなたの開発体験は劇的に変わります。
今日は、Gitの隠れた強力な機能「Git Hooks」、その中でも最も実用的な「pre-commit」を使い倒して、あなたのPCに「専属の厳格なレビュアー」を常駐させる方法を伝授します。
—
1. Git Hooksとは何か?「門番」を雇うということ
Gitには、特定の操作(コミットやプッシュなど)の直前・直後にスクリプトを走らせる機能があります。これがGit Hooksです。
pre-commitフックは、まさに「コミットボタンを押した直後、リポジトリに保存される前」に割り込んで、テストやフォーマットチェックを強制する門番です。
- メリット: CIサーバーにコードが届く前にバグを発見できる。
- 最大の恩恵: 「テストが通っていないコードをリポジトリに入れない」という規律が、強制的にチーム全員に浸透する。
—
2. 環境構築:最小構成で最大の効果を
Git Hooksを自分でゼロから書くのも勉強になりますが、現場では`pre-commit`というフレームワークを使うのが鉄則です。これを使えば、面倒なシェルスクリプト管理から解放されます。
ステップ1:インストール
Python環境があれば一撃です。(なければHomebrewなどでインストールしてください)
pip install pre-commit
ステップ2:設定ファイルの作成
プロジェクトのルートディレクトリに `.pre-commit-config.yaml` を作成します。これが「どのルールを適用するか」を定義する司令塔です。
.pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
# 1. 余分なホワイトスペースを削除(綺麗なコードの基本)
- id: trailing-whitespace
# 2. ファイル末尾に改行を強制(Unix標準)
- id: end-of-file-fixer
# 3. JSONが壊れていないかチェック
- id: check-json
# 4. YAMLの構文チェック
- id: check-yaml
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
# Pythonコードを自動フォーマット(これだけでレビューの指摘が減ります)
- id: black
ステップ3:フックの有効化
最後に、以下のコマンドを一度だけ叩いてください。これで準備完了です。
pre-commit install
—
3. Hello World的な動作確認:実際に壊してみる
さて、魔法が正しく動くか確認しましょう。わざと「末尾に不要なスペースがあるファイル」を作ってみます。
1. `test.py` を作成し、わざと変なスペースを入れる。
2. `git add test.py` を実行。
3. `git commit -m “テストコミット”` を実行。
すると……コミットが止まります!
`pre-commit` が勝手にファイルを修正して「ファイルを修正したから、もう一回addしてね」と教えてくれます。これで、あなたは二度と「フォーマット違反」でレビューを落とされることはありません。
—
4. 伝説のエンジニアからのアドバイス:運用のコツ
ここからが現場の知見です。導入しただけで満足してはいけません。
- 「速さ」を優先する: フックが重すぎると開発者はイライラして無効化します。最初は「フォーマット」や「構文チェック」などの軽量なものから始め、テストが重い場合はCI側に任せましょう。
- チームで共有する: `.pre-commit-config.yaml` は必ずリポジトリに含めてコミットしてください。チーム全員が同じルールで開発できる、これが最強の品質管理です。
- どうしても飛ばしたい時: `git commit –no-verify` を使えばフックをスキップできます。どうしても緊急でコミットしたい時だけに使いましょう(多用厳禁です)。
まとめ:今日から「品質」に妥協しないエンジニアに
Git Hooksは、あなたのコーディング習慣を強制的にレベルアップさせてくれる強力なツールです。「コードの品質は、コミットする瞬間に決まる」。この意識を持つだけで、あなたは確実にチームの中で一目置かれる存在になります。
まずは今日、あなたのプロジェクトに `.pre-commit-config.yaml` を置いてみてください。その瞬間に、あなたの開発環境は「プロフェッショナルな現場」へと進化しますよ。
何か詰まったら、いつでも聞いてくださいね。応援しています!