---
name: committer
description: "Git コミットの作成を支援する。以下の場合に発動: (1) ユーザーが /commit と入力した時、(2) コード変更が完了しコミットが適切と判断した時、(3) ユーザーがコミットを依頼した時。変更内容を分析し、適切なコミットメッセージを生成してコミットを作成する。"
---

# コミッター

変更内容を分析し、適切なコミットメッセージでコミットを作成する。

## 前提条件

コミット実行前に必ず確認:

- ユーザーから明示的にコミットを依頼されている
- すべてのテストがパス
- リンター警告がゼロ
- 変更が単一の論理的な作業単位

## ワークフロー

### 1. 状態確認

以下のコマンドを並列実行:

```bash
git status                           # 変更ファイル一覧
git diff --staged                    # ステージ済み変更
git diff                             # 未ステージ変更
git log --oneline -5                 # 直近のコミットスタイル確認
```

### 2. 変更の分析

| 確認項目 | チェック内容 |
|----------|-------------|
| 変更の種類 | 新機能、バグ修正、リファクタリング、ドキュメント、テストなど |
| 影響範囲 | 変更されたファイル、モジュール、機能 |
| 目的 | なぜこの変更が必要か |

### 3. コミットメッセージ作成

**原則**:
- 「何を」ではなく「なぜ」を重視
- 1〜2文で簡潔に
- リポジトリの既存スタイルに合わせる

**言語選択**:
- リポジトリの既存コミットが日本語 → 日本語
- リポジトリの既存コミットが英語 → 英語
- 混在または不明 → ユーザーに確認

**良いメッセージの例**:
```
ユーザー認証のセッションタイムアウトを修正

セッションが24時間で切れる問題を解決。
タイムアウト値を設定可能にした。
```

**避けるべき例**:
```
fix bug              # 何を修正したか不明
Update files         # 具体性がない
WIP                  # 作業途中をコミットしない
```

### 4. コミット実行

```bash
# 関連ファイルをステージング
git add <files>

# HEREDOC でメッセージを渡す（フォーマット維持のため）
git commit -m "$(cat <<'EOF'
コミットメッセージ

詳細説明（必要な場合）
EOF
)"

# 成功確認
git status
```

変更したファイルが隠しファイルの場合、追加するかどうかを確認し、OK の場合は `git add <files> -f` で追加する

## コミット単位

変更は以下の 2 種類に明確に分離します：

- **構造変更（Structural Changes）**

  - コードの配置・整理・フォーマット
  - 動作は一切変更しない
  - 例：メソッドの並び替え、インポート整理、変数名変更

- **動作変更（Behavioral Changes）**
  - 機能の追加・修正・削除
  - テスト結果が変わる変更
  - 例：新機能追加、バグ修正、ロジック変更

**重要**：構造変更と動作変更を同一コミットに含めない

## 禁止事項

以下は絶対に行わない:

- `--force` オプションの使用
- `--no-verify` でフック回避
- 機密情報（.env、credentials など）のコミット
- main/master への直接プッシュ
- ユーザーの明示的な依頼なしのコミット
- `git commit --amend` の使用（特別な条件を除く）

## --amend の使用条件

以下の**すべて**を満たす場合のみ使用可能:

1. ユーザーが明示的に amend を要求、または pre-commit hook が自動修正したファイルを含める必要がある
2. HEAD コミットが**この会話中に自分が作成した**もの
3. コミットがリモートに**プッシュされていない**

確認方法:
```bash
git log -1 --format='%an %ae'  # 作成者確認
git status                      # "Your branch is ahead" を確認
```

## リソース

- [references/commit-guidelines.md](references/commit-guidelines.md) - コミットメッセージのベストプラクティス詳細
