Agent Skill
2/7/2026

commit-conventions

Use this skill when dealing with complex commits involving multiple change types, when unsure how to split changes into atomic commits, when determining appropriate scope for a commit, when writing commit body for non-trivial changes, or when the user asks about commit best practices, semantic versioning impact, or conventional commit format details.

B
berlysia
9GitHub Stars
1Views
npx skills add berlysia/dotfiles

SKILL.md

Namecommit-conventions
DescriptionUse this skill when dealing with complex commits involving multiple change types, when unsure how to split changes into atomic commits, when determining appropriate scope for a commit, when writing commit body for non-trivial changes, or when the user asks about commit best practices, semantic versioning impact, or conventional commit format details.

name: commit-conventions description: Use this skill when dealing with complex commits involving multiple change types, when unsure how to split changes into atomic commits, when determining appropriate scope for a commit, when writing commit body for non-trivial changes, or when the user asks about commit best practices, semantic versioning impact, or conventional commit format details. context: fork

Commit Conventions Guide

複雑なコミットシナリオや判断に迷う場面での詳細ガイダンス。単純なケースはCLAUDE.mdの基本原則で十分。

複雑なケースの判断基準

いつこのスキルが必要か

シナリオ複雑度推奨アプローチ
1ファイル、1種類の変更単純CLAUDE.md原則で直接コミット
複数ファイル、同一目的単純CLAUDE.md原則で直接コミット
複数種類の変更が混在複雑このスキル参照 or /semantic-commit
大規模リファクタリング複雑/semantic-commit で自動分割
Breaking changes複雑このスキル参照

変更の分離戦略

混在パターンと分離方法

パターン1: 機能追加 + バグ修正

✅ 正しい分離:
  1. fix(auth): handle null user in session check
  2. feat(auth): add remember-me functionality

❌ 混在させない:
  feat(auth): add remember-me and fix null check

パターン2: リファクタ + 機能変更

✅ 正しい順序:
  1. refactor(api): extract validation to separate module
  2. feat(api): add email format validation

理由: リファクタを先にすることで、機能追加の差分が明確になる

パターン3: テスト + 実装

✅ TDDスタイル:
  1. test(auth): add tests for token refresh
  2. feat(auth): implement token refresh logic

✅ 実装後テスト:
  1. feat(auth): implement token refresh logic
  2. test(auth): add tests for token refresh

どちらでも可、プロジェクトの慣習に従う

分離できない場合

密結合した変更は無理に分離しない:

✅ 許容される混在:
fix(database): handle connection timeout and add retry logic

理由: リトライロジックはタイムアウト対応の一部として不可分

スコープ決定ガイド

スコープの粒度

プロジェクト構造例:
src/
├── auth/          → scope: auth
├── api/
│   ├── users/     → scope: api または users
│   └── products/  → scope: api または products
├── database/      → scope: database, db
└── utils/         → scope: utils (または省略)

スコープ選択フロー

1. 影響範囲は単一モジュール?
   → Yes: そのモジュール名をスコープに
   → No: 次へ

2. 影響範囲は関連する複数モジュール?
   → Yes: 親カテゴリまたは機能名をスコープに
   → No: 次へ

3. プロジェクト全体に影響?
   → スコープ省略

プロジェクト履歴からの学習

# 既存スコープの確認
git log --oneline -50 | grep -oP '(?<=\()[^)]+(?=\))' | sort | uniq -c | sort -rn

# 出力例:
#   12 auth
#    8 api
#    5 hooks
#    3 database

既存パターンに従うことで一貫性を保つ。

本文(Body)の書き方

本文が必要なケース

  1. WHYが自明でない場合

    refactor(api): change error response format
    
    The previous format was inconsistent with REST best practices
    and caused confusion in client error handling. New format
    follows RFC 7807 Problem Details specification.
    
  2. 複数の関連変更がある場合

    feat(auth): implement OAuth2 PKCE flow
    
    Changes include:
    - Add code verifier generation
    - Implement code challenge creation
    - Update token exchange to include verifier
    - Add state parameter for CSRF protection
    
  3. Breaking Changesがある場合

    feat(api)!: require authentication for all endpoints
    
    Previously, read-only endpoints were public. This change
    requires all API calls to include a valid JWT token.
    
    Migration:
    1. Generate API token in dashboard
    2. Add Authorization header to all requests
    3. Update client SDK to v2.0+
    
    BREAKING CHANGE: All endpoints now require authentication.
    

本文のフォーマット

<type>(<scope>): <description>
                                    ← 空行必須
<body - 72文字で折り返し>
                                    ← 空行
<footer>

タイプ選択の詳細判断

境界ケース

変更内容判断理由
パフォーマンス改善のためのリファクタperf目的がパフォーマンス
バグを直しながらリファクタfixバグ修正が主目的
新機能のためのリファクタrefactorfeat2コミットに分離
ドキュメント内のコード例更新docsドキュメントが主
コメントのみの追加docs または省略プロジェクト慣習による
依存関係のセキュリティ更新chore または fix脆弱性対応ならfix

セマンティックバージョニングへの影響

タイプバージョン影響
featMINOR (0.x.0)
fixPATCH (0.0.x)
feat!, fix!MAJOR (x.0.0)
その他バージョン影響なし

エッジケース対処

Pre-commit hookによる変更

# Hook実行後にファイルが変更された場合
git status  # 変更を確認

# 安全にamendできる条件:
# 1. 直前のコミットが自分のもの
# 2. まだpushしていない

git log -1 --format='%an %ae'  # 作者確認
git status | grep "Your branch is ahead"  # push状態確認

# 条件を満たせばamend
git add -u
git commit --amend --no-edit

空コミット防止

# ステージングエリアの確認
git diff --cached --name-only

# 空の場合はコミットしない
if [ $(git diff --cached --name-only | wc -l) -eq 0 ]; then
  echo "Nothing staged for commit"
fi

部分的なファイルステージング

# ファイル内の特定の変更のみステージ
git add -p <file>

# または git-sequential-stage を使用(/commit コマンド)
git-sequential-stage -patch="changes.patch" -hunk="file.py:1,3"

チェックリスト

コミット前の最終確認:

  • タイプは変更の主目的を反映している
  • スコープは既存パターンと一致している
  • 説明文は現在形・命令形
  • 72文字以内に収まっている
  • 複数種類の変更が混在していない
  • Breaking changesは感嘆符(!)およびBREAKING CHANGE:で明示
  • 本文はWHYを説明している(必要な場合)

関連ツール

  • /commit - 汎用コミットコマンド(シンプルな変更を直接コミット)
  • /semantic-commit - 複雑な変更の自動分析・分割(4フェーズワークフロー)
  • git-sequential-stage - hunk単位の精密なステージング
  • change-semantic-analyzer agent - 変更の意味解析とグループ化
  • commit-message-generator agent - メッセージ生成の詳細ロジック
Skills Info
Original Name:commit-conventionsAuthor:berlysia