【Git】pre-commitとgitlintでコミットメッセージのフォーマットを検証

2024.11.12
2024.11.12
開発環境
gitpre-commitgitlint

はじめに

今回は、pre-commit と gitlint を使ってコミットメッセージが特定のフォーマットに従っているか検証する方法を紹介します。

pre-commit

pre-commit とは、Git hooksを管理するツールです。コミット時に、ファイルのフォーマットを整えたり、コードの品質をチェックするためのスクリプトを実行することができます。

pre-commit

pre-commit

下記の記事では、pre-commitを使って、コミットするときにファイルのフォーマットを整える方法を紹介しています。

【Git】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を使うことで、コミット時に自動でコミットメッセージのフォーマットを検証することができます。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee