【チーム開発】gitのcommitメッセージにチケット番号を自動追加して視認性を上げる方法


前置き

現在働いている会社では、backlogを使ってプロジェクトを管理しています。backlog上で作成されたタスクは、個別のチケット番号(課題キー)が振られています。このチケット番号を毎コミットの先頭に付与して、コミットログの視認性を上げることが今回の目的です。
ブランチ名は、feat/ticket-1のように、チケットとブランチが1:1で紐づくようにしています。恐らくIssueドリブン?

完成形

commitメッセージの先頭に、ブランチ名のfeat/dev-1のdev-1が自動で追加される。

使うもの

Husky (Modern native Git hooks made easy)

公式が述べている通り、git hooksを簡単に作成・管理できるパッケージです。特定のgit操作をしたタイミングでプログラムを走らせたりすることができます。例えば、ステージングする際に、JavaScriptファイルのLintチェックを行い、エラーが検出された時にはステージングさせない、など様々なことができます。

導入

1. Huskyの初期セットアップ

このコマンドで、初期セットアップは終わりです。

# npm用
npx husky-init && npm install
# yarn用
npx husky-init && yarn

HuskyがdevDependenciesに追加され、npm scriptsに husky installがpackage.jsonに追加されます。npm scriptのprepareに書かれたスクリプトは、npm instsall後に実行されます。

{
   "devDependencies": {
      "husky": "^7.0.0"
   },
   "scripts": {
      "prepare": "husky install"
   }
}

.huskyフォルダが生成、pre-commit hookが中に入っています。デフォルトでは、コミットする時に、npm testが走るようになっています。

2. git hookの作成

.huskyフォルダ下に、新たにprepare-commit-msgファイルを作成し、以下のコードを追加してください。
基本的な事しか書かれていないので、自分のプロジェクトに合わせてカスタマイズして見てください!

.husky/prepare-commit-msg
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

COMMIT_MSG_FILE=$1
MESSAGE=$(cat $COMMIT_MSG_FILE)
TICKET=[$(git rev-parse --abbrev-ref HEAD | grep -Eo '^(\w+/)?(\w+[-_])?[0-9]+' | grep -Eo '(\w+[-])?[0-9]+' | tr "[:lower:]" "[:upper:]")]
if [[ $TICKET == "[]" || "$MESSAGE" == "$TICKET"* ]];then
  exit 0;
fi

echo "$TICKET $MESSAGE" > $COMMIT_MSG_FILE

次回以降のコミットメッセージ時にhuskyが動き、ブランチ名が追加されます。

適応されるブランチ名

hoge-123-some-feature →[HOGE-123]
feature/hoge-444-some-other-feature →[hoge-444]
bugifx/hoge-111 → [HOGE-111]
111_some_feature → [111]

これ以外のブランチ名の場合は、何も追加されません。

終わり

git hooksを、プロジェクトで管理する方法がうまく見つからなかったので、huskyを使いチーム全体に反映させることができます。
良いチーム開発ライフを!

Gihubにレポジトリを公開しているので、参照してみてください。

https://github.com/ryu-liam/automatic-ticket-number

参考資料

https://betterprogramming.pub/how-to-automatically-add-the-ticket-number-in-git-commit-message-bda5426ded05
https://typicode.github.io/husky/#/?id=automatic-recommended