AgentSkillsCN

git-commit

用于创建 Git 提交的助手。它会分析更改内容,并生成符合 Conventional Commits 规范、带有 Gitmoji 表情的提交信息。建议按代码块进行逻辑拆分,并确保提交可回滚。

SKILL.md
--- frontmatter
name: git-commit
description: Gitコミットを作成する際のヘルパー。変更内容を分析し、Gitmoji付きのConventional Commits準拠のメッセージを生成します。ハンク単位での論理的な分割とリバート可能なコミットを推奨します。

Gitコミットヘルパー

このスキルは、Gitコミットを作成する際に、変更内容を分析して適切なコミットメッセージを生成します。

基本原則

  1. Conventional Commitsに準拠
  2. 細粒度で独立してリバート可能なコミットを作成
  3. ファイル単位ではなくハンク単位・論理的な単位に分割
  4. Gitmojiで視覚的に分かりやすく
  5. プロジェクトの言語に合わせたメッセージ(READMEから自動検出)

使用方法

1. プロジェクトの言語を検出

  • まず README.md または README ファイルを読み込む
  • ファイルの主要言語を判定(日本語、英語など)
  • コミットメッセージはその言語で作成

2. 現在の状態を確認

bash
git status
git diff --staged
# ステージされた変更がない場合
git diff

3. 変更をハンク単位で分析

  • git add -p の使用を推奨して、論理的な単位で分割
  • 各ハンクが独立した論理的変更になっているか確認
  • 無関係な変更は別のコミットに分離

4. コミットメッセージを生成

  • 変更内容に最適なGitmojiを選択
  • Conventional Commitsの型を決定
  • 簡潔で明確な要約行を作成
  • 必要に応じて詳細な説明を追加

コミットメッセージの形式

基本形式(Conventional Commits + Gitmoji)

code
<gitmoji> <type>: <subject>

<body>

<footer>

例:

code
✨ feat: ユーザー認証機能を追加
🐛 fix: ログインフォームのバリデーションエラーを修正
♻️ refactor: データベース接続処理をモジュール化

Gitmoji マッピング

最頻出

GitmojiCodeType説明
:sparkles:feat新機能の追加
🐛:bug:fixバグ修正
🚑:ambulance:fix緊急の修正(ホットフィックス)
♻️:recycle:refactorリファクタリング
⚡️:zap:perfパフォーマンス改善
🎨:art:styleコード構造/フォーマットの改善
📝:memo:docsドキュメント追加・更新
:white_check_mark:testテスト追加・更新・合格
🔒️:lock:fixセキュリティ/プライバシー問題の修正
🔥:fire:-コード/ファイルの削除

依存関係

GitmojiCodeType説明
:heavy_plus_sign:build依存関係の追加
:heavy_minus_sign:build依存関係の削除
⬆️:arrow_up:build依存関係のアップグレード
⬇️:arrow_down:build依存関係のダウングレード
📌:pushpin:build依存関係を特定バージョンに固定

UI/UX

GitmojiCodeType説明
💄:lipstick:styleUI/スタイルファイルの追加・更新
🚸:children_crossing:-UX/ユーザビリティの改善
♿️:wheelchair:-アクセシビリティの改善
📱:iphone:-レスポンシブデザイン対応
💫:dizzy:-アニメーション/トランジション追加・更新

設定/ビルド

GitmojiCodeType説明
🔧:wrench:chore設定ファイルの追加・更新
🔨:hammer:chore開発スクリプトの追加・更新
👷:construction_worker:ciCIビルドシステムの追加・更新
💚:green_heart:ciCIビルドの修正
🚀:rocket:-デプロイ

データベース/ストレージ

GitmojiCodeType説明
🗃️:card_file_box:-データベース関連の変更
🌱:seedling:-シードファイルの追加・更新

コード品質

GitmojiCodeType説明
🚨:rotating_light:-コンパイラ/linterの警告修正
⚰️:coffin:-デッドコードの削除
🗑️:wastebasket:-非推奨コードのクリーンアップ
💡:bulb:-ソースコードのコメント追加・更新
🏷️:label:-型の追加・更新
🥅:goal_net:-エラーキャッチ

その他の重要なもの

GitmojiCodeType説明
🎉:tada:-プロジェクト開始
🔖:bookmark:-リリース/バージョンタグ
💥:boom:-破壊的変更の導入
:rewind:revert変更の取り消し
🔀:twisted_rightwards_arrows:-ブランチマージ
📦:package:buildコンパイルファイル/パッケージの追加・更新
👽️:alien:-外部APIの変更による更新
🚚:truck:-リソースの移動/リネーム
📄:page_facing_up:-ライセンスの追加・更新
🍱:bento:-アセットの追加・更新
🔐:closed_lock_with_key:-シークレットの追加・更新
🙈:see_no_evil:-.gitignoreファイルの追加・更新
📸:camera_flash:-スナップショットの追加・更新
⚗️:alembic:-実験的な変更
🔍:mag:-SEOの改善
🚩:triangular_flag_on_post:-フィーチャーフラグの追加・更新・削除
🛂:passport_control:-認可/ロール/パーミッション関連
🩹:adhesive_bandage:fix重大でない問題の簡易修正
🧐:monocle_face:-データ探索/検査
🧪:test_tube:test失敗するテストの追加
👔:necktie:-ビジネスロジックの追加・更新
🩺:stethoscope:-ヘルスチェックの追加・更新
🧱:bricks:-インフラ関連の変更
🧑‍💻:technologist:-開発者体験の改善
💸:money_with_wings:-スポンサーシップ/マネタイズ関連
🧵:thread:-マルチスレッド/並行処理関連
🦺:safety_vest:-バリデーション関連
✏️:pencil2:-タイポ修正
🌐:globe_with_meridians:-国際化/ローカライゼーション
🚧:construction:-作業中(WIP)
🔊:loud_sound:-ログの追加・更新
🔇:mute:-ログの削除
👥:busts_in_silhouette:-コントリビューターの追加・更新
🏗️:building_construction:-アーキテクチャ変更
🤡:clown_face:-モック作成
🥚:egg:-イースターエッグの追加・更新
📈:chart_with_upwards_trend:-アナリティクス/トラッキングコードの追加・更新
💬:speech_balloon:-テキスト/リテラルの追加・更新
✈️:airplane:-オフラインサポートの改善

避けるべきもの(通常使用しない)

GitmojiCode説明
💩:poop:改善が必要な悪いコード
🍻:beers:酔っ払ってコードを書く

ハンク単位でのコミット分割

git add -p の活用

bash
# インタラクティブにハンクを選択
git add -p <file>

# オプション:
# y - このハンクをステージ
# n - このハンクをスキップ
# s - このハンクを分割
# e - このハンクを手動編集
# q - 終了

分割の基準

  1. 論理的な独立性

    • 各コミットが独立して意味を持つ
    • 単独でリバート可能
  2. 単一責任の原則

    • 1つのコミットは1つの目的のみ
    • バグ修正とリファクタリングは別コミット
    • 新機能とコードフォーマットは別コミット
  3. テスト可能性

    • 各コミット後にテストが通る状態を維持
    • ビルドが壊れない
  4. レビュー容易性

    • レビュワーが理解しやすい粒度
    • diff が小さく明確

分割例

❌ 悪い例(まとめすぎ):

bash
# すべてを1つのコミットに
git add .
git commit -m "✨ feat: ユーザー機能追加とバグ修正と依存関係更新"

✅ 良い例(適切に分割):

bash
# 1. 依存関係の更新
git add package.json package-lock.json
git commit -m "⬆️ build: React を 18.2 から 18.3 にアップグレード"

# 2. バグ修正
git add -p src/components/LoginForm.tsx
git commit -m "🐛 fix: メールアドレス検証の正規表現を修正"

# 3. 新機能
git add -p src/components/UserProfile.tsx
git commit -m "✨ feat: ユーザープロフィール編集機能を追加"

# 4. テスト
git add src/components/__tests__/UserProfile.test.tsx
git commit -m "✅ test: ユーザープロフィール編集のテストを追加"

言語検出とメッセージ生成

手順

  1. README検出
bash
# README.md または README ファイルを読み込む
cat README.md 2>/dev/null || cat README 2>/dev/null
  1. 言語判定

    • 日本語文字(ひらがな、カタカナ、漢字)が多い → 日本語
    • それ以外 → 英語
    • 言語が不明な場合はデフォルトで英語
  2. メッセージ生成

    • 検出した言語でコミットメッセージを作成
    • subjectとbodyの両方を適切な言語で

日本語プロジェクト:

code
✨ feat: ユーザー認証機能を追加

JWT トークンベースの認証システムを実装しました。
ログイン、ログアウト、トークンのリフレッシュ機能を含みます。

英語プロジェクト:

code
✨ feat: add user authentication feature

Implemented JWT token-based authentication system.
Includes login, logout, and token refresh functionality.

ワークフロー例

bash
# 1. READMEから言語を検出
cat README.md

# 2. 変更を確認
git status
git diff

# 3. ハンク単位で分割してステージング
git add -p src/auth.js
git add -p src/utils/jwt.js

# 4. ステージされた内容を確認
git diff --staged

# 5. Claudeに依頼
# 「この変更のコミットメッセージを作成して」
# または
# 「これらの変更を論理的な単位に分割してコミットして」

# 6. Claudeが実行すること:
#    - README から言語を検出
#    - 変更内容を分析
#    - 論理的な単位に分割
#    - 各単位に適切なGitmojiとメッセージを生成
#    - 順次コミットを実行

ベストプラクティス

1. 原子性(Atomic Commits)

各コミットは:

  • 独立して機能する
  • 単独でリバート可能
  • ビルド/テストが通る

2. 段階的なコミット

bash
# 段階1: 準備(リファクタリング)
♻️ refactor: 認証ロジックを auth モジュールに抽出

# 段階2: 新機能の追加
✨ feat: JWT トークンベースの認証を実装

# 段階3: テスト
✅ test: 認証フローのテストを追加

# 段階4: ドキュメント
📝 docs: 認証システムのREADMEを更新

3. 意味のあるメッセージ

  • 「何を」だけでなく「なぜ」も説明
  • 技術的な詳細は body に
  • issue や PR の参照を含める

4. Gitmojiの一貫性

  • チーム内で同じGitmojiを同じ目的で使用
  • 迷ったらもっとも一般的なものを選択
  • プロジェクトの .gitmoji ルールがあれば優先

5. コミット前のチェックリスト

  • 変更は論理的に独立しているか?
  • リバートしても他のコミットに影響しないか?
  • コミットメッセージは明確か?
  • 適切なGitmojiが選択されているか?
  • テストは通るか?
  • linterの警告はないか?

コミット実行

単一コミット

bash
git commit -m "✨ feat: コミットメッセージ"

詳細な説明付き

bash
git commit -m "$(cat <<'EOF'
✨ feat: ユーザー認証機能を追加

JWT トークンベースの認証システムを実装しました。

主な変更:
- ログイン/ログアウト機能
- トークンのリフレッシュ
- 認証ミドルウェア

Closes #42
EOF
)"

複数コミットの一括実行

Claudeが分析後、複数の論理的なコミットを提案した場合:

  1. 各コミットの内容を確認
  2. 承認後、順次実行
  3. 各コミット後に状態を確認

トラブルシューティング

コミットが大きすぎる場合

bash
# 最後のコミットを取り消してやり直し
git reset HEAD~1

# ハンク単位で再ステージング
git add -p

間違ったファイルをコミットした場合

bash
# 最後のコミットを修正
git reset --soft HEAD~1
git restore --staged <不要なファイル>
git commit

コミットメッセージを修正したい場合

bash
# 最後のコミットメッセージを修正
git commit --amend -m "新しいメッセージ"