はじめに
Gitフックを管理するためのライブラリ Husky を使って、post-checkout フックを活用し、新規ブランチをチェックアウトした際にファーストコミットを自動で実行する方法を紹介します。
通常、新しいブランチを作成したら、ブランチ名をコミットメッセージにして空コミットを作成する作業が必要です。
これを Husky を使って自動化する方法について解説します。
1. 環境設定
公式サイトを参考にしてください
2. ディレクトリ構成
client/
├── .husky/
│ ├── _/
│ │ └── post-checkout.sh
│ └── post-checkout
server/
3. post-checkout フックの意味
post-checkout は、Gitのフックの一つで、ブランチやファイルをチェックアウトした直後に実行されます。
post-checkout フックは、主に次の2つのケースで役立ちます
ブランチのチェックアウト時: 新しいブランチに切り替えた際の特定の処理を実行。
ファイルのチェックアウト時: Gitで特定のファイルをチェックアウトした後の処理を実行。
4. ファーストコミットの自動化スクリプト
.husky/post-checkout の内容
.husky/post-checkout ファイルに次のスクリプトを追加します。
# カスタム処理を行うcheckout.shを実行
. "$(dirname "$0")/_/checkout.sh"
このスクリプトでは、カスタムスクリプト checkout.sh を実行します。
.husky/_/checkout.sh の内容
ここでは、新しいブランチがチェックアウトされた際に空コミットを作成するロジックを記述します。
#!/bin/sh
# post-checkout hooksが受け取るパラメータ
before_head=$1
after_head=$2
checkout_type=$3
# 新規ブランチがチェックアウトされた場合のみ実行
if [ "$before_head" = "$after_head" ] && [ "$checkout_type" = "1" ]; then
# 現在のブランチ名を取得
new_branch_name=$(git rev-parse --abbrev-ref HEAD)
# 新しいブランチで空コミットを作成
git commit --allow-empty -m "Initial commit on $new_branch_name"
fi
5. .husky/_/ ディレクトリの意味
Huskyでは、.husky/_/ ディレクトリが内部的な設定や共通のスクリプトを格納するために使用されます。
このディレクトリに配置されているスクリプトは、複数のGitフックで共通して使われる処理を一箇所にまとめることで、重複を避け、管理しやすくしています。
.husky/_/checkout.sh
.husky/_/checkout.sh には、post-checkout フックに関連したカスタム処理が含まれます。このスクリプトを .husky/post-checkout から呼び出すことで、コードの整理と再利用が簡単にできます。
6. まとめ
Huskyのpost-checkoutフックを使って、新しいブランチがチェックアウトされた際にファーストコミットを自動で実行する方法を解説しました。
さらに、.husky/_/ディレクトリの役割についても詳しく説明し、Huskyがどのように内部的な処理を行っているかを理解していただけたかと思います。
Huskyを使うことで、チーム開発や個人プロジェクトでの作業をより効率的に自動化できるので、ぜひ活用してみてください!