「fix: 修正」で終わるコミットメッセージを卒業する──Claude Code × Conventional Commits + Changesets でCHANGELOGを自動生成するチーム設計

はじめに

Claude Codeに/commitを実行させると、コミットメッセージを自動生成してくれる。ただし、CLAUDE.mdに規約を書かなければフォーマットは安定しない。「fix: some bug fixes」「Changed the login form」。こういったメッセージが積み上がると、半年後にgit logを掘り起こしても何が起きたか分からない。

この記事では、Claude Code × Conventional Commitsの組み合わせでコミットメッセージを規約準拠にし、Changesetsと連携してCHANGELOGとバージョニングを自動化するチーム設計を解説する。


Claude Codeのコミットメッセージを規約に揃える

CLAUDE.mdにルールを書くと出てくるコミットと、書かないときの典型的なコミットを並べる。

# 規約なし(Claude Codeが出しやすい)
fix: some bug fixes
Update user authentication and add password reset feature and fix validation

# 規約あり(CLAUDE.mdに記述後)
feat(auth): add password reset flow via email verification

  • Add /api/auth/reset endpoint with token generation
  • Send reset email using SendGrid template
  • Implement 24-hour token expiration with Redis TTL
  • Closes #234

    CLAUDE.md本体が長くなるのを防ぐため、コミットルールは.claude/commands/commit.mdに分離して書き、CLAUDE.mdからは参照だけする(.claude/commands/でカスタムコマンドを定義できるのはClaude Code公式ドキュメントで確認済み)。

    # .claude/commands/commit.md
    
    

    フォーマット

    (): (50字以内、命令形) (「なぜ」変更したか、72文字/行)
    (Closes #123 / BREAKING CHANGE: 説明)

    typeの選択肢

    feat / fix / docs / refactor / test / chore

    ルール

  • 破壊的変更はフッターに BREAKING CHANGE: を書く
  • issueへの参照はフッター最後に
  • # CLAUDE.md(本体)
    

    コミットルール

    コミット作成時は .claude/commands/commit.md のルールに従うこと

    commitlintで自動検証する

    Claude Codeが生成したコミットメッセージがConventional Commitsに準拠しているか、commitlint + huskyで自動検証できる。

    // .commitlintrc.json
    {
      "extends": ["@commitlint/config-conventional"],
      "rules": {
        "subject-max-length": [2, "always", 72]
      }
    }
    # .husky/commit-msg
    npx --no -- commitlint --edit "$1"

    Claude Codeが生成したコミットメッセージが規約に違反していると、huskyがコミットを拒否してフィードバックを返す。Claude Code自身がエラーを読んでメッセージを修正し、再コミットするため、ほとんどの場合に人間が介入しなくて済む。


    Changesetsでバージョニング・CHANGELOGを自動化する

    semantic-releaseとの使い分け

    | 項目 | semantic-release | Changesets |
    |---|---|---|
    | バージョン決定 | コミット履歴から自動判定 | PRで人間が指定(明示的) |
    | モノレポ対応 | 非公式プラグイン | 公式対応 |
    | レビュー可能性 | 難しい | PRのchangesetをレビュー可 |

    Changesetsはモノレポやチームレビュー重視の環境に向いている。PRにコード変更と一緒に.changeset/[uuid].mdを追加し、changeset versionでCHANGELOGとpackage.jsonを自動更新する。

    Claude CodeにchangesetファイルをPRで書かせる

    CLAUDE.mdにchangesetのルールを書いておくと、Claude Codeがchangesetファイルを生成してくれる。

    ## Changesetsルール
    PRにコード変更が含まれる場合は、必ず.changeset/ディレクトリにchangesetファイルを追加する
    
    形式:
    
    "パッケージ名": patch | minor | major
    変更の概要(ユーザー向けの説明) バージョン種別: patch=バグ修正 / minor=後方互換の新機能 / major=破壊的変更

    Claude Codeへの依頼:

    このPRの変更内容からchangesetファイルを生成して。
    変更: UserコンポーネントにアバターURLのvalidationを追加
    影響パッケージ: @myapp/ui

    生成される.changeset/happy-dogs-fix.md

    ---
    "@myapp/ui": patch
    
    UserコンポーネントのアバターURLバリデーションを追加。不正なURL形式の場合にデフォルトアバターを表示。

    EM視点:コミット規約がCHANGELOGとオンボーディングを変える

    規約なしのコミット履歴からCHANGELOGを生成すると「fix: various bugs」が並ぶだけだ。Conventional Commitsを徹底するとCHANGELOGが顧客向けリリースノートの素材になる。

    CLAUDE.mdにコミット規約を書くことで、新メンバーがClaude Codeを使うだけで規約準拠のコミットが出てくる。「どう書けばいいか」を先輩エンジニアに聞く機会が減り、コードレビューで指摘する内容もコミットメッセージからロジックに移る。

    BREAKING CHANGE:フッターをCLAUDE.mdで必須化すると、破壊的変更のログが機械的に蓄積される。SemVerのmajorバンプが「何を壊したか」を常に記録した状態になる。

    .claude/commands/commit.mdでコミット規約を定義し、commitlintで検証を自動化する。Changesetsの導入はその後でも十分間に合う。


    まとめ

    コミットメッセージの質は、CLAUDE.mdに規約を書くだけで変わる。.claude/commands/commit.mdにConventional Commitsのルールを書いて、次のセッションでClaude Codeがどう変わるか確認してほしい。CHANGELOGが読める状態になれば、リリース前の棚卸し作業の手間が一気に減る。

    コメント

    タイトルとURLをコピーしました