1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git Hooks 入門(初心者向け)

1
Last updated at Posted at 2026-07-03

1. Git Hooks とは?

Git Hooks とは、Git の操作(コミットや push など)のタイミングで、自動的にスクリプトを実行してくれる仕組みです。

ポイントは 2 つだけです。

  • Git に標準で付いている機能
  • 自分のパソコンの中(ローカル)で動く(サーバーには影響しない)

イメージ:

git commit を実行
      │
      ▼
🔔 フックが自動で動く(スクリプト実行)
      │
      ▼
コミットが完了する

Husky・Lefthook・pre-commit は、hook のスクリプトを設定ファイルで簡単に書けるようにしてくれるツールです。

2. フックの種類

フックはたくさんありますが、名前のルールは簡単です。

  • pre-〇〇 = 〇〇のに動く(失敗させると操作を止められる)
  • post-〇〇 = 〇〇のに動く(お知らせ用)

よく使うものだけ覚えれば OK です。

フック名 動くタイミング
pre-commit コミットの直前
commit-msg コミットメッセージを書いた直後
post-commit コミットが終わった後
pre-push push の直前
post-merge マージが終わった後

3. 実際に書いてみよう(メッセージを表示するだけ)

「コミットしたらメッセージを表示する」フックを、このプロジェクトの lefthook.yml にそのまま用意しています。中身はどれも 1 行の echo だけです。

pre-commit:
  commands:
    demo:
      run: 'echo "これからコミットを行います!"'

構造はシンプルで 4 段だけです。

  • pre-commit:どのフックで動かすか(2. の表にある名前)
  • commands:このフックで実行するコマンド一覧(複数書ける)
  • demo:コマンドの名前(自由に付けられる。例:lintformat など)
  • run:実際に実行するコマンド(シェルコマンドをそのまま書く)

commit-msg / post-commit / pre-push も同じ形で書いてあります。

試してみましょう。

git commit -m "test"

結果:

 [pre-commit] これからコミットを行います!
 [commit-msg] コミットメッセージ!
 [post-commit] コミットが完了しました!

4. 何に使えるの?(実際の応用)

  1. で見た echo は「表示するだけ」でしたが、フックの本当の力は操作を止められることにあります。
  • コマンドが正常終了→ そのまま次に進む
  • コマンドがエラー終了→ そこで中止される

pre-〇〇 系のフック(pre-commit / pre-push など)はこの仕組みを使って、「NG なら実行させない」という門番になれます。

エラーで止まる例

試しに、必ず失敗する(exit 1 を返す)コマンドを pre-commit に足してみます。

pre-commit:
  commands:
    block:
      run: |
        echo "❌ チェックNG!コミットを中止します"
        exit 1
git commit -m "test"

結果:

❌ チェックNG!コミットを中止します

exit 1 を返したコマンドがあると、コミット自体が作られずに終わるのがポイントです

実際のプロジェクトでの使い方

よくある組み合わせの例:

フック チェック内容
pre-commit Lint / フォーマット → NG ならコミット中止
commit-msg メッセージが feat: 〇〇 形式か → 形式違反なら中止
pre-push テスト実行 → 失敗なら push 中止

①このプロジェクトの lefthook.yml は、上の表とは配置が少し違っていて、実際に「門番」として動いているのは pre-pushformat だけです。

pre-push:
  commands:
    format: # 👈 実際に動いている唯一の「門番」
      run: yarn format:check

package.jsonyarn format:check を実行し、フォーマット崩れがあれば push を中止します。

②(ブランチ名)コミットメッセージを feat: 〇〇 形式に強制したい場合は、こう追加できます。

commit-msg:
  commands:
    check-format:
      run: |
        grep -qE '^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+' {1} || {
          echo "❌ コミットメッセージは 'feat: 〇〇' のような形式にしてください"
          exit 1
        }

同じように、pre-commityarn lint を足したり、pre-pushrun: yarn test を足したりすれば、表にあるような門番を増やせます。

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?