このコマンドは、前回のgitタグから現在までの変更履歴を分析し、Keep a Changelog形式でCHANGELOG.mdエントリーを自動生成します。
Generates Keep a Changelog entries and updates project version files from git changes.
/plugin marketplace add sumik5/sumik-claude-plugin/plugin install sumik@sumikこのコマンドは、前回のgitタグから現在までの変更履歴を分析し、Keep a Changelog形式でCHANGELOG.mdエントリーを自動生成します。
/changelog <新しいバージョン>
<新しいバージョン>: 必須。リリースするバージョン番号を指定しますバージョン番号は以下の規則に従う必要があります:
v + セマンティックバージョニング(MAJOR.MINOR.PATCH)v1.0.0, v2.1.3, v0.5.0v プレフィックスv1.0.0-beta.1, v2.0.0+20250104)以下の場合はエラーを返します:
エラー: バージョン番号が指定されていません。使用方法: /changelog <新しいバージョン>エラー: バージョン番号の形式が不正です。正しい形式: v1.0.0# 正しい使用例
/changelog v1.2.0
# → CHANGELOG.md: [v1.2.0]
# → package.json: "version": "1.2.0"
# → pyproject.toml: version = "1.2.0"
/changelog v2.0.0
# → CHANGELOG.md: [v2.0.0]
# → package.json: "version": "2.0.0"
# → pyproject.toml: version = "2.0.0"
/changelog v0.1.0-beta.1
# → CHANGELOG.md: [v0.1.0-beta.1]
# → package.json: "version": "0.1.0-beta.1"
# → pyproject.toml: version = "0.1.0-beta.1"
# 誤った使用例(エラーになる)
/changelog # 引数なし
/changelog 1.2.0 # v プレフィックスなし
/changelog v1.2 # パッチバージョンなし
引数の検証: バージョン番号の形式を検証し、変数に保存します
v1.2.0 形式(CHANGELOG.md用)1.2.0 形式(プロジェクトファイル用)変更の収集: 以下の情報を収集します
CHANGELOG生成: 収集した情報を基に、Keep a Changelog形式でエントリーを生成します
プロジェクトファイルの更新: バージョン番号を以下のファイルに反映します
"version": "1.2.0"version = "1.2.0"CHANGELOG.mdの更新: 生成したエントリーをCHANGELOG.mdの先頭に挿入します
まず、コマンドに渡された引数を検証してください:
引数の存在確認
引数が存在しない場合:
→ エラーメッセージを表示: "エラー: バージョン番号が指定されていません。使用方法: /changelog <新しいバージョン>"
→ 処理を終了
バージョン番号の形式検証
正規表現パターン: ^v\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$
形式が不正な場合:
→ エラーメッセージを表示: "エラー: バージョン番号の形式が不正です。正しい形式: v1.0.0"
→ 処理を終了
バージョン番号を変数に保存
検証が成功した場合:
→ 引数で渡されたバージョン番号を変数 NEW_VERSION に保存(例: v1.2.0)
→ vプレフィックスを除いた番号を VERSION_NUMBER に保存(例: 1.2.0)
→ 次のステップへ進む
以下のbashコマンドを実行して情報を収集してください:
# 最新のタグを取得(セマンティックバージョニング対応)
LATEST_TAG=$(git tag -l "v*" --sort=-version:refname | head -n 1)
# タグの有無を確認して適切なコマンドを実行
if [ -z "$LATEST_TAG" ]; then
# タグが存在しない場合(初回リリース)
echo "タグが見つかりません。全コミット履歴を取得します。"
git log --oneline HEAD
git diff --name-status $(git rev-list --max-parents=0 HEAD)..HEAD
else
# タグが存在する場合
echo "最新タグ: $LATEST_TAG"
git log --oneline ${LATEST_TAG}..HEAD
git diff --name-status ${LATEST_TAG} HEAD
fi
# ステージングエリアの変更を取得(タグの有無に関わらず常に実行)
git diff --cached --name-status
注意:
--sort=-version:refnameにより、v1.0.0形式のタグをバージョン番号順にソートし、最新バージョンを取得します${LATEST_TAG})を使用してタグが空の場合の構文エラーを防止します収集した情報を基に、以下の形式でCHANGELOGエントリーを生成してください:
## [NEW_VERSION] - YYYY-MM-DD
### 追加
- 新機能について記載
### 変更
- 既存機能への変更について記載
### 非推奨
- 間もなく削除される機能について記載
### 削除
- 削除された機能について記載
### 修正
- 修正されたバグについて記載
### セキュリティ
- 脆弱性に関する変更について記載
生成ルール:
VERSION_NUMBER(vプレフィックスを除いた番号)を使用して、プロジェクトのバージョン管理ファイルを更新してください:
ファイルの存在確認
test -f package.json && echo "package.json found"
package.jsonが存在する場合の更新
"version": "現在のバージョン", の行を探す"version": "VERSION_NUMBER", に置き換える更新例:
{
"name": "my-project",
"version": "1.2.0",
"description": "..."
}
ファイルの存在確認
test -f pyproject.toml && echo "pyproject.toml found"
pyproject.tomlが存在する場合の更新
[project] セクション内の version = "現在のバージョン" の行を探すversion = "VERSION_NUMBER" に置き換える更新例:
[project]
name = "my-project"
version = "1.2.0"
description = "..."
注意事項:
生成したエントリーを以下の位置に挿入してください:
CHANGELOG.mdが存在しない場合:
# Changelog
## [NEW_VERSION] - YYYY-MM-DD
...
CHANGELOG.mdが存在する場合:
例 (/changelog v1.2.0 を実行した場合):
# Changelog
## [v1.2.0] - 2025-10-04
### 追加
- 新しいCHANGELOGコマンドを追加
## [v1.0.0] - 2025-10-01
...
以下の変更内容をユーザーに表示して確認を求める:
"version": "VERSION_NUMBER"version = "VERSION_NUMBER"AskUserQuestionで確認を求める:
AskUserQuestion(
questions=[{
"question": "上記の変更内容でファイルを更新してよろしいですか?",
"header": "CHANGELOG更新",
"options": [
{"label": "更新する", "description": "CHANGELOG.mdとバージョンファイルを更新"},
{"label": "キャンセル", "description": "更新せず終了(内容を再確認)"}
],
"multiSelect": False
}]
)
処理:
[v1.0.0]: リリースバージョン(引数で指定)