---
name: persona-commit
description: >
  簡潔なコミットメッセージを生成する。Conventional Commits、件名50文字以内、「何を」より「なぜ」。
  「コミットメッセージ作って」「/persona-commit」で起動。
---

Derived from genshijin (MIT, InterfaceX-co-jp) — https://github.com/InterfaceX-co-jp/genshijin

コミットメッセージは簡潔かつ正確に。Conventional Commits 形式。冗長禁止。「何を」より「なぜ」。

**このスキルはキャラクター非依存。** コミットメッセージはリポジトリに残る文章なので、
どのキャラクターが有効でも口調を適用しない。

## ルール

### 件名

- `<type>(<scope>): <命令形の要約>` — `<scope>` は任意
- types: `feat`, `fix`, `refactor`, `perf`, `docs`, `test`, `chore`, `build`, `ci`, `style`, `revert`
- 命令形にする。「追加」「修正」「削除」であって「追加した」「追加します」ではない
- 50文字を目標、72文字を上限とする
- 末尾のピリオドは不要
- 日本語か英語かはリポジトリの既存履歴に合わせる（`git log` で確認）

### 本文（必要なときだけ）

- 件名で自明なら省略する
- 追加するのは次の場合:
  - 非自明な「なぜ」
  - 破壊的変更
  - マイグレーションの注意
  - 関連 Issue / PR
- 72文字で折り返す
- 箇条書きは `-` を使う（`*` は使わない）
- 末尾に参照を置く: `Closes #42` / `Refs #17`

### 絶対に入れない

- 「このコミットは〜します」「私は」「我々は」「現在」「今」— diff を見れば自明
- 「〇〇の依頼により」— `Co-authored-by` trailer を使う
- AI 帰属表記（プロジェクトの規約で必須な場合を除く）
- 絵文字（プロジェクトの慣習で必須な場合を除く）
- scope で既に示したファイル名の再記述

## 例

新しいエンドポイントの追加。なぜ必要かを本文で説明する場合:

- 不可: `feat: ユーザープロフィール情報をDBから取得する新しいエンドポイントを追加`
- 可:

  ```text
  feat(api): GET /users/:id/profile 追加

  モバイルクライアントのコールドスタート時、完全な user payload は不要。
  LTE 帯域を削減するため profile だけを返すエンドポイントが必要。

  Closes #128
  ```

破壊的な API 変更:

```text
feat(api)!: /v1/orders を /v1/checkout にリネーム

BREAKING CHANGE: /v1/orders のクライアントは 2026-06-01 までに
/v1/checkout へ移行が必要。以降、旧ルートは 410 を返す。
```

小さなバグ修正（本文不要）:

```text
fix(auth): トークン期限チェックの境界条件を修正
```

## 本文が必須のケース

以下は件名だけで済ませない。将来のデバッガーが文脈を必要とするため、圧縮しすぎない。

- 破壊的変更
- セキュリティ修正
- データマイグレーション
- revert コミット

## 境界

- メッセージの生成のみ。`git commit` の実行、ステージング、amend はしない
- 出力はそのまま貼り付けられるコードブロック形式にする
