Gitでチェックアウト時にセットアップ用のコマンドを自動実行したいケースがありました。
この時、Gitフックという仕組みを使って実現することができたため、やり方について紹介します。
Gitフックとは
Gitフックは、特定のGitイベント(コミットやプッシュなど)が発生したときに自動的に実行されるスクリプトのことです。
これにより、コミット前のコードチェックや、プッシュ後のデプロイなどのカスタム処理を自動化できます。
ローカルフックとサーバーサイドフックがあり、それぞれ開発環境とリポジトリサーバー上で動作します。
設定ファイルを作成する
今回は設定内容をリポジトリにコミットし、他の人と共有できる方法を紹介します。
手順は以下の通りです。
- リポジトリルートに.githooksディレクトリを作成する
$ mkdir /.githooks
- .githooksディレクトリ内にファイルを作成
チェックアウト時に処理を行いたい場合はpost-checkoutというファイルを作成します
※対応したいイベントによってファイル名が変わります$ touch .githooks/post-checkout
- Hooksスクリプトファイルに実行権を付与します
$ chmod +x .githooks/*
- 作成したファイルを編集し行いたい処理を記載する
GitHooksファイルの参照先を変更する
設定ファイルのデフォルト参照先は.git/hooks
になっているため、リポジトリ内で共有できるよう、コミット対象となる.githooksディレクトリに変更します。
$ git config --local core.hooksPath .githooks
設定できるイベントタイミング
チェックアウトした時の例として、post-checkoutを紹介しましたが、他にも多数イベントがあります。
そのうち代表的なものをいくつか紹介します。
- pre-commit
コミットが実行される前にトリガーされます。コミット前のコード検査や、リント、自動フォーマットに有効です - repare-commit-msg
コミットメッセージが生成される前にトリガーされます。デフォルトのメッセージに対してカスタムメッセージを追加するなどに利用されます - pre-push
git push
コマンドが実行される前にトリガーされます。プッシュ前にテストを実行したり、条件をチェックするのに使用されます - pre-rebase
リベースが開始される前にトリガーされます。リベースの条件をチェックしたり、設定を変更するのに使用されます - post-commit
コミットが完了した後にトリガーされます。ログの記録や通知、追加の操作を行うために使用されます
終わりに
今回はクライアントサイドのgithooksを説明しましたが、サーバサイド側に設定を行い、特定のイベントをトリガーに処理を行う(例えばリモートリポジトリに変更があったらデプロイ処理を起動するなど)を行うこともできます。
うまく設定できれば、開発者の環境構築の手間を減らすといった工夫もできるため、gitを用いた管理を行うプロジェクトでは、とても有用な手段の一つだと思います。
コメント