【Git】pre-commitとgitlintでコミットメッセージのフォーマットを検証
はじめに
今回は、pre-commit と gitlint を使ってコミットメッセージが特定のフォーマットに従っているか検証する方法を紹介します。
pre-commit
pre-commit とは、Git hooksを管理するツールです。コミット時に、ファイルのフォーマットを整えたり、コードの品質をチェックするためのスクリプトを実行することができます。
pre-commit
下記の記事では、pre-commitを使って、コミットするときにファイルのフォーマットを整える方法を紹介しています。
【Git】pre-commitでコミット時にフォーマットする
はじめに pre-commit について紹介していきます。 pre-commit とは pr
インストール
brew
を使って、pre-commit をインストールできます。
1brew install pre-commit
gitlint
gitlineは、コミットメッセージのフォーマットを検証するツールです。commit-msgフックやCIの中で利用することができ、設定によってコミットメッセージが特定のフォーマットに従っているか検証できます。
Introduction - Gitlint
Linting for your git commit messages
gitlint には、標準でいくつかのルールが用意されています。設定できるルールは下記から確認できます。
Rules - Gitlint
Linting for your git commit messages
インストール
brew
を使って、gitlint をインストールできます。
1brew install gitlint
pre-commitとgitlintでコミットメッセージを検証
それでは実際に、pre-commitとgitlintを使ってコミットメッセージを検証してみます。
今回は、コミットメッセージが下記のフォーマットに従っているか検証します。
- Conventional Commitsを使っているか(絵文字付き)
- コミットメッセージに Issue が含まれているか
wip
で始まるコミットメッセージはフォーマットを無視する
pre-commitの設定
.pre-commit-config.yaml
を作成し、下記の設定を追加します。
1default_install_hook_types:
2 - commit-msg
3 - pre-commit
4repos:
5 - repo: https://github.com/jorisroovers/gitlint
6 rev: "v0.19.1"
7 hooks:
8 - id: gitlint
.pre-commit-config.yaml
を作成したら、下記のコマンドを実行して、hook スクリプトの準備をします。
1pre-commit install
gitlintの設定
.gitlint
を作成し、下記の設定を追加します。
1[general]
2# タイトルとボディ部分の最小文字数を無視する
3ignore=body-min-length, title-min-length
4regex-style-search=true
5
6# Conventional Commitsのフォーマットを使う
7contrib=contrib-title-conventional-commits
8
9# Conventional Commitsのtypeを絵文字付きで指定
10[contrib-title-conventional-commits]
11types=✨ feat, 🐛 fix, 🔧 chore, 📝 docs, 🎨 style, ♻️ refactor, ⚡️ perf, ✅ test, 🏗️ build, 👷 ci, ⏪️ revert
12
13# ボディ部分にIssueが含まれているか
14[body-match-regex]
15regex=Issue: #[0-9]+
16
17# wipで始まるコミットメッセージは無視する
18[ignore-by-title]
19regex=^wip
20ignore=all
今回は、ついでにタイトルとボディ部分の文字数の最小値を無視する設定を追加しています。
試してみる
それでは、実際にコミットメッセージを検証してみます。(コミットメッセージを検証するだけなので、--allow-empty
オプションを使って空のコミットを作成します。)
1git commit --allow-empty -m "Add new feature"
すると、下記の結果が表示され、どのルールに違反しているかがわかります。
1gitlint..................................................................Failed
2- hook id: gitlint
3- exit code: 3
4
51: B8 Body does not match regex (Issue: #[0-9]+)
61: CT1 Title does not follow ConventionalCommits.org format 'type(optional-scope): description': "Add new feature"
73: B6 Body message is missing
次は、下記のようなコミットメッセージを作成してみます。
1git commit --allow-empty
1🐛 fix: Fix bug
2
3Issue #1
すると、gitlintのルールにパスしたことが表示されます。
1gitlint..................................................................Passed
2[main 6a1e870] 🐛 fix: Fix bug
最後に、wip
で始まるコミットメッセージを作成してみます。
1git commit --allow-empty -m "wip: Add new feature"
今度はwip
で始まるコミットメッセージは無視され、gitlintのルールにパスしたことが表示されます。
1gitlint..................................................................Passed
2[main 2e7dce9] wip: Add new feature
まとめ
pre-commitとgitlintを使って、コミットメッセージのフォーマットを検証する方法を紹介しました。pre-commitとgitlintを使うことで、コミット時に自動でコミットメッセージのフォーマットを検証することができます。