Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions claude/skills/commit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
---
name: commit
description: 変更内容を分析し、日本語のConventional Commitsフォーマットでコミットを作成するスキル。日本語の流暢性と文体の統一に注力する。「コミットして」「commitして」「変更をコミット」などの依頼時に使用。
context: fork
---

# Commit

変更内容を分析し、日本語の Conventional Commits フォーマットでコミットメッセージを生成するスキル。

## 概要

ステージング済みおよび未ステージングの変更を分析し、適切な type・scope を判定して、自然な日本語のコミットメッセージを生成する。文体は体言止め・動詞終止形で統一し、ですます調は使わない。

## ワークフロー

### Step 1: 現状確認

```bash
# 変更状態を確認
git status

# ステージ済みの差分を確認
git diff --staged

# 未ステージの差分を確認
git diff

# 最近のコミットを確認(スタイルの参考に)
git log --oneline -10
```

**確認事項:**

- [ ] コミット対象の変更が存在する
- [ ] 機密情報(`.env`, `credentials.json` 等)が含まれていない

### Step 2: 変更内容の分析

以下の観点で変更を分析:

1. **変更の種類**: 新機能 / バグ修正 / リファクタリング / その他
2. **影響範囲**: どのモジュール・機能に影響するか
3. **変更の目的**: なぜこの変更が必要か

### Step 3: Type と Scope の決定

**Type の選択基準:**

| 変更内容 | Type |
| ---------------------------- | ---------- |
| 新しい機能を追加 | `feat` |
| バグを修正 | `fix` |
| コードを整理(動作は不変) | `refactor` |
| パフォーマンスを改善 | `perf` |
| テストを追加・修正 | `test` |
| ドキュメントのみ変更 | `docs` |
| フォーマットのみ変更 | `style` |
| ビルド・設定変更 | `chore` |

**Scope の決定基準:**

- ファイルパスから判断: `src/auth/login.ts` → `auth`
- 機能から判断: ユーザー認証関連 → `auth`
- 複数スコープにまたがる場合は最も重要な部分を選択
- 明確でない場合は省略可

### Step 4: コミットメッセージの生成

**フォーマット:**

```
{type}({scope}): {説明}

[任意の本文]
```

**文体: 体言止め・動詞終止形(ですます調は使わない)**

subject も body も、ですます調は使わず、体言止めまたは動詞の終止形で統一する。

```
# 良い例
feat(auth): ログイン機能を追加
fix(api): ユーザー取得時の null エラーを修正
refactor(utils): 日付処理関数を整理
docs(readme): インストール手順を更新

# 悪い例(ですます調)
feat(auth): ログイン機能を追加しました
fix(api): ユーザー取得時の null エラーを修正しました
```

**本文が必要な場合:**

複数の変更を含む場合は箇条書きで記述する。

```
feat(auth): ユーザー認証機能を追加

- ログイン・ログアウト API を追加
- JWT トークンによるセッション管理を実装
- 認証ミドルウェアを追加
```

**subject の制約:**

- 50 文字以内を目安に
- 何を変更したかが一目でわかるように
- 「修正」「更新」だけの説明不足なメッセージは避ける

### Step 5: 日本語の流暢性チェック

メッセージ生成後、以下の観点で品質を確認:

- [ ] 体言止めまたは動詞終止形で統一されているか(ですます調でないか)
- [ ] 主語と述語の対応が正しいか
- [ ] 助詞(は/が/を/に/で等)の使い方が適切か
- [ ] 冗長な表現がないか
- [ ] 技術用語と日本語の混在が自然か
- [ ] 日本語と半角英数字の間に半角スペースがあるか

**よくある問題と修正例:**

| 問題のある表現 | 修正後 |
| ---------------------------- | ---------------------- |
| 〜を追加しました | 〜を追加 |
| 〜を実装しています | 〜を実装 |
| 〜を行う | 〜する |
| 〜することが可能 | 〜できる |
| 〜についての | 〜の |
| 機能を追加を行った | 機能を追加 |
| ユーザーがログインをする | ユーザーがログインする |

**悪い例と修正:**

| 悪い例 | 問題点 | 良い例 |
| ------------------------------------------------ | ---------------- | --------------------------------------- |
| `fix: バグ修正` | 何を修正したか不明 | `fix(api): null ポインタ例外を修正` |
| `update` | type/scope がない | `feat(ui): ボタンのデザインを更新` |
| `feat: 機能を追加を行った` | 冗長、不自然 | `feat(auth): 2FA 機能を追加` |
| `fix(auth): ログインできないのを直した` | 口語的 | `fix(auth): ログイン失敗時のエラーを修正` |
| `feat(auth): ユーザーのログインの機能の追加を行った` | 冗長、の連続 | `feat(auth): ユーザーログイン機能を追加` |

### Step 6: ステージングとコミット

```bash
# 関連ファイルをステージング(git add -A は使わない)
git add <files>

# コミット(HEREDOC を使用)
git commit -m "$(cat <<'EOF'
{type}({scope}): {説明}

- 変更点 1
- 変更点 2
EOF
)"
```

### Step 7: 確認

```bash
# コミット結果を確認
git log -1 --stat
```

## 特殊なケース

### Breaking Changes

```
feat(api)!: 認証 API の仕様を変更

BREAKING CHANGE: トークン形式を JWT に変更。
既存のセッションベース認証は使用不可。
```

### Issue/PR 参照

```
fix(api): ユーザー削除時のエラーを修正

Closes #123
```

## 日本語スペースルール

日本語と半角英数字の間には必ず半角スペースを入れる:

```
# 良い例
feat(auth): ユーザー認証 API の実装
PR を作成した

# 悪い例
feat(auth): ユーザー認証APIの実装
PRを作成した
```

## Git 安全プロトコル

- コミット前に `git status` と `git diff` で変更を確認
- 機密情報(`.env`, `credentials.json` 等)を含むファイルはコミットしない
- `git add -A` や `git add .` は使わず、ファイルを個別に指定する
- pre-commit フックが失敗した場合は修正して新規コミット(`--no-verify` は使用しない)
- `git commit --amend` は push 済みの場合は避ける
Loading