Gitのコミットメッセージをチーム全体で統一するコツ|現場で使える実践テクニック

Gitのコミットメッセージをチーム全体で統一するコツ|現場で使える実践テクニック
C
クリオ
Web制作ディレクター / フロントエンジニア

こんにちは!

今日は「Gitのコミットメッセージをチーム全体で統一するコツ」について解説します。

コミットメッセージがグチャグチャになる理由

僕も昔、チームのGitリポジトリを見たときにびっくりしました。
コミットメッセージが本当にバラバラやん。
「fix」「修正」「あ」「wip」「temp」みたいなメッセージがいっぱいあって、正直ヒストリーを見ても何が起きたのかさっぱりわかりませんでした。

理由はシンプルです。
「チーム全体でコミットメッセージのルールが決まっていない」からなんです。
人によって書き方が違うし、英語で書く人もいれば日本語で書く人もいます。
本当に現場あるあるなんですよ。

でもね、このルール統一ってめっちゃ重要です。
何ヶ月も前のコミットログを見て「あ、このバグはいつから入ったんだ」って追跡するときに、きちんとしたメッセージがあると本当に助かります。
逆にグチャグチャだと、その追跡作業だけで数時間かかるなんてこともあります。

チーム統一ルールの作り方

では、実際にどうやってチーム全体でルールを統一するのか。
大事なポイントは3つです。

  • メッセージの形式を統一する(日本語か英語か、1行か複数行か)
  • プレフィックスを決める(「fix:」「feat:」などの接頭辞)
  • 書き方の具体例を決めておく

ほんまに大事なのは「具体例」です。
ルールをドキュメント化しても、実際の例がないと「あ、これはどう書くんやろ」って迷うんです。

例えば、こんな感じで決めるといいですよ:

fix: ヘッダーのnavbar高さ調整

ヘッダーがモバイル表示で崩れていたため、navbar の max-height を 56px に調整した。
Closes #123

この例で言うと:
1行目は「プレフィックス: 簡潔な説明」
3行目以降は「詳細な背景や実装内容」
最後に「関連するIssue番号」を記載する形です。

Conventional Commitsで形式を統一する

実は業界標準的な書き方があります。
それが「Conventional Commits」という規約です。

基本的な形は:

<type>(<scope>): <subject>
<blank line>
<body>
<blank line>
<footer>

それぞれの説明です:

  • type:変更の種類(feat, fix, docs, style, refactor, test, chore など)
  • scope:変更の範囲(header, footer, auth など。オプション)
  • subject:50文字以下の簡潔な説明
  • body:詳細な説明(なぜ変えたのか、どう変えたのか)
  • footer:Issue番号やBreaking Changesの記載

実際の例を見てみましょう。

feat(auth): ログイン画面にパスワードリセット機能を追加

ユーザーがパスワードを忘れた場合、メール認証でリセット可能にした。
フロントエンドは既存のフォームコンポーネントを再利用。
バックエンドの reset_token 実装は別PR参照。

Closes #456

めっちゃきれいなログになります。
こういう形で統一すると、後で git log --oneline で見たときにも、どの機能がいつ入ったか一目瞭然です。

自動化でルール違反を防ぐ

でもね。
ルールを決めるだけだと、やっぱり守らない人が出ます。
僕のチームでも最初はそうでした。

そこで活躍するのが「Husky」と「commitlint」という自動チェックツールです。
これらを使うと、コミット時に自動的にメッセージの形式をチェックできます。

設定は簡単です。
まず、必要なツールをインストール:

npm install –save-dev husky @commitlint/cli @commitlint/config-conventional

次に commitlint.config.js をプロジェクトルートに作成:

module.exports = {
  extends: [‘@commitlint/config-conventional’],
  rules: {
    ‘type-enum’: [
      2,
      ‘always’,
      [‘feat’, ‘fix’, ‘docs’, ‘style’, ‘refactor’, ‘test’, ‘chore’]
    ],
    ‘subject-full-stop’: [2, ‘never’],
    ‘subject-case’: [2, ‘never’, ‘start-case’]
  }
};

最後に Husky の git hook を設定:

npx husky install
npx husky add .husky/commit-msg ‘npx –no — commitlint –edit “$1″‘

これで完成です。
ユーザーが git commit を実行すると、自動的にメッセージをチェックしてくれます。
ルール違反だと、コミットが失敗して「あ、メッセージの形式が違いますよ」と教えてくれるんです。

本当に便利です。
チーム全体で自動的にルール遵守になります。

まとめ

Gitのコミットメッセージ統一は、一見地味な作業に見えるかもしれません。
でも、プロジェクトが大きくなればなるほど、その価値が本当にわかります。

大事なのは:

  • チーム全体でルールを決める(Conventional Commits を参考に)