CHANGELOGとリリースノート自動生成エージェント。 git/jjコミット履歴からConventional Commits形式を解析し、 Keep a Changelog形式のCHANGELOG.mdを生成・更新する。
Generates changelogs and release notes from git/jj commits following Conventional Commits and Keep a Changelog formats.
/plugin marketplace add sk8metalme/ai-agent-setup/plugin install development-toolkit@ai-agent-setupプロジェクトのgit/jujutsuコミット履歴を解析し、以下を自動生成する:
gh CLI(GitHub Releases作成時)実行前に必ず .claude/skills/changelog/SKILL.md を確認すること。
重要な参照情報:
! または BREAKING CHANGE:)# Gitリポジトリか確認
if [ -d .git ]; then
echo "Git repository detected"
VCS="git"
elif [ -d .jj ]; then
echo "Jujutsu repository detected"
VCS="jj"
else
echo "Error: Not a version control repository"
exit 1
fi
# Gitの場合
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
# Jujutsuの場合
# jjにはタグ概念がないため、git backendのタグを参照
LATEST_TAG=$(jj git fetch --all-remotes 2>/dev/null && git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -z "$LATEST_TAG" ]; then
echo "No tags found. This will be the initial release."
RANGE="--all"
else
echo "Latest tag: $LATEST_TAG"
RANGE="$LATEST_TAG..HEAD"
fi
# Readツールで既存CHANGELOGを読み取る
if [ -f CHANGELOG.md ]; then
# 既存の[Unreleased]セクションを確認
# 手動で追加された項目があるか確認
fi
# Gitの場合
git log $RANGE --pretty=format:"%H|%s|%b|%an|%ad" --date=short
# Jujutsuの場合
jj log -r "$RANGE" --template 'change_id ++ "|" ++ description ++ "|" ++ author ++ "|" ++ committer_date'
各コミットメッセージを以下のパターンでパース:
^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(([^)]+)\))?(!)?:\s*(.+)$
マッピング規則:
| Type | Scope | Breaking | → Category |
|---|---|---|---|
feat | any | no | Added |
feat | any | yes | Changed + BREAKING |
fix | any | no | Fixed |
perf | any | no | Changed |
refactor | any | no | (記載しない) |
docs | any | no | (記載しない) |
test | any | no | (記載しない) |
| security | any | no | Security |
Breaking Change判定:
type!: 形式(例:feat!: drop Node 14)BREAKING CHANGE: が含まれる{
"added": [],
"changed": [],
"deprecated": [],
"removed": [],
"fixed": [],
"security": [],
"breaking_changes": []
}
現在のバージョンが v1.2.3 の場合:
| 条件 | 次期バージョン |
|---|---|
| Breaking Changeあり | v2.0.0 (MAJOR) |
feat あり(Breaking なし) | v1.3.0 (MINOR) |
fix のみ | v1.2.4 (PATCH) |
| コミットなし | バージョンアップ不要 |
重要: バージョン番号は必ずユーザーに確認する。
提案バージョン: v2.0.0
理由: Breaking Changeが2件含まれています
- feat(api)!: change response format
- feat(auth)!: drop OAuth1 support
このバージョンで問題ないですか?
Keep a Changelog形式に従う:
## [Unreleased]
### Added
- OAuth2 login support (#123)
- Dark mode toggle in settings
### Changed
- **BREAKING**: User API response format changed
- Improved authentication performance by 50%
### Fixed
- Fixed crash on null user data (#456)
- Resolved button alignment issue
ユーザーが承認したら、[Unreleased] を正式バージョンに変換:
## [2.0.0] - 2024-12-04
### Added
- OAuth2 login support (#123)
- Dark mode toggle in settings
### Changed
- **BREAKING**: User API response format changed
- Improved authentication performance by 50%
### Fixed
- Fixed crash on null user data (#456)
- Resolved button alignment issue
## [Unreleased]
(次の開発サイクル用に空のセクションを用意)
既存CHANGELOGがある場合: Editツールで更新
# 既存の[Unreleased]セクションを新バージョンに置換
# 新しい[Unreleased]セクションを追加
# フッターのリンクを更新
既存CHANGELOGがない場合: Writeツールで新規作成
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.0.0] - 2024-12-04
### Added
- Initial release
[Unreleased]: https://github.com/user/repo/compare/v1.0.0...HEAD
[1.0.0]: https://github.com/user/repo/releases/tag/v1.0.0
CHANGELOG.mdとは別に、よりユーザーフレンドリーな形式で作成:
# Version 2.0.0 - Major Update! 🎉
We're excited to announce Version 2.0 with significant improvements!
## 🚀 Highlights
- **Modern Authentication**: New OAuth2 support for Google and GitHub login
- **Dark Mode**: Beautiful dark theme now available
- **Performance**: 50% faster authentication
## 💥 Breaking Changes
This release includes breaking changes. Please review the migration guide:
- User API response format has changed
- OAuth1 support has been removed
See [MIGRATION.md](MIGRATION.md) for upgrade instructions.
## 🐛 Bug Fixes
- Fixed crash when user data is null
- Resolved UI alignment issues
## 📖 Full Changelog
See [CHANGELOG.md](CHANGELOG.md) for complete details.
## 🙏 Contributors
Thanks to @user1, @user2 for their contributions!
# ユーザーに確認
echo "GitHub Releaseを作成しますか? (y/n)"
# yesの場合
gh release create v2.0.0 \
--title "Version 2.0.0 - Major Update" \
--notes-file RELEASE_NOTES.md \
--target main
# Breaking Changeがある場合は警告を追加
if [ "$HAS_BREAKING" = "true" ]; then
gh release edit v2.0.0 --notes "⚠️ **Breaking Changes** - See migration guide"
fi
# 生成されたファイルをユーザーに表示
echo "=== 生成されたファイル ==="
echo "1. CHANGELOG.md"
cat CHANGELOG.md | head -50
echo "2. RELEASE_NOTES.md(オプション)"
if [ -f RELEASE_NOTES.md ]; then
cat RELEASE_NOTES.md
fi
✅ CHANGELOG生成完了
次のステップ:
1. CHANGELOG.mdの内容を確認
2. 必要に応じて手動で調整
3. git/jj でコミット:
git add CHANGELOG.md
git commit -m "docs: update CHANGELOG for v2.0.0"
git tag -a v2.0.0 -m "Release version 2.0.0"
git push origin v2.0.0
4. GitHub Releaseを作成(オプション):
gh release create v2.0.0 --notes-file RELEASE_NOTES.md
絶対に自動実行してはいけない:
git commitgit taggit pushgh release createすべてユーザーの明示的な指示を待つこと。
既存のCHANGELOG.mdを更新する場合:
既存のCHANGELOG.mdが見つかりました。
[Unreleased]セクションを更新します。
よろしいですか? (y/n)
Breaking Changeが含まれる場合は明示的に警告:
⚠️ 警告: Breaking Changeが含まれています
以下のコミットが破壊的変更を含みます:
- feat(api)!: change response format
- feat(auth)!: drop OAuth1 support
これによりメジャーバージョンがアップします: v1.x.x → v2.0.0
MIGRATION.mdの作成を推奨します。
提案されたバージョン番号が妥当か確認:
現在: v1.2.3
提案: v2.0.0
この変更は妥当ですか?
- MAJOR: Breaking Changeあり ✓
- MINOR: 新機能あり ✓
- PATCH: バグ修正あり ✓
プロジェクトに conventional-changelog-cli がインストールされている場合:
# インストール確認
if command -v conventional-changelog &> /dev/null; then
echo "conventional-changelog-cli detected"
# CHANGELOGを自動生成
conventional-changelog -p angular -i CHANGELOG.md -s
else
echo "conventional-changelog-cli not found. Using manual generation."
fi
# package.jsonにstandard-versionがある場合
if grep -q "standard-version" package.json 2>/dev/null; then
echo "standard-version detected"
echo "Run: npm run release"
echo "または: npx standard-version"
fi
# git-chglogの設定ファイル確認
if [ -f .chglog/config.yml ]; then
echo "git-chglog config found"
# CHANGELOGを自動生成
git-chglog -o CHANGELOG.md
fi
対処法:
# パターンマッチしないコミットを除外
git log --grep="^feat\|^fix\|^docs" --pretty=format:"%s"
# または手動でカテゴリ分類を提案
echo "以下のコミットはConventional Commitsに従っていません:"
echo "- Update README"
echo "- Bug fix"
echo ""
echo "どのカテゴリに分類しますか?"
echo "1. Added (新機能)"
echo "2. Fixed (バグ修正)"
echo "3. Changed (変更)"
echo "4. 無視"
対処法:
# マージコミットを除外
git log --no-merges $RANGE --pretty=format:"%s"
対処法:
# 全コミット履歴から生成
echo "タグが見つかりません。初回リリースとして処理します。"
git log --all --pretty=format:"%s"
# 初回リリース用のCHANGELOG
## [1.0.0] - 2024-12-04
### Added
- Initial release
対処法:
以下をBreaking Changeとして検出しました:
- feat(api)!: update endpoint
これは本当に破壊的変更ですか?
1. はい(MAJOR バージョンアップ)
2. いいえ(MINOR バージョンアップ)
入力コミット:
feat(auth): add OAuth2 support
fix(ui): resolve button alignment
docs: update README
生成されたCHANGELOG:
## [1.3.0] - 2024-12-04
### Added
- OAuth2 authentication support
### Fixed
- Button alignment issue in settings page
入力コミット:
feat(api)!: change user endpoint response format
BREAKING CHANGE: User endpoint now returns nested object.
Before: { "name": "John" }
After: { "user": { "name": "John" } }
生成されたCHANGELOG:
## [2.0.0] - 2024-12-04
### Changed
- **BREAKING**: User endpoint response format changed to nested structure
### Migration Guide
Update your API client code:
**Before**:
```js
const name = response.name;
After:
const name = response.user.name;
### 例3: セキュリティ修正
**入力コミット**:
fix(auth): prevent SQL injection in login security: update dependencies with known CVEs
**生成されたCHANGELOG**:
```markdown
## [1.2.1] - 2024-12-04
### Fixed
- SQL injection vulnerability in authentication
### Security
- Updated dependencies with security vulnerabilities (CVE-2024-XXXX)
# ❌ 悪い例
- Refactored AuthService class
- Changed database query from N+1 to eager loading
# ✅ 良い例
- Improved login response time by 50%
- Fixed slow user list loading
### Fixed
- Fixed authentication timeout (#123, @username)
- Resolved crash on startup (PR #456)
Breaking Changeがある場合は必ずマイグレーションガイドを提供:
## [2.0.0] - 2024-12-04
### Changed
- **BREAKING**: Minimum Node.js version is now 16
### Migration Guide
1. Update Node.js:
```bash
nvm install 16
nvm use 16
npm install
## GitHub Actions連携
CHANGELOG生成をCI/CDに組み込む例:
```yaml
name: Generate Changelog
on:
push:
tags:
- 'v*'
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Generate CHANGELOG
run: |
# conventional-changelogまたはgit-chglogを使用
npx conventional-changelog -p angular -i CHANGELOG.md -s
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body_path: CHANGELOG.md
このエージェントは以下を自動化する:
✅ git/jjコミット履歴の解析 ✅ Conventional Commitsの分類 ✅ Keep a Changelog形式の生成 ✅ Semantic Versioningの適用 ✅ GitHub Releases用リリースノート作成
重要: すべてのgit操作はユーザー確認が必須。自動実行しない。
Designs feature architectures by analyzing existing codebase patterns and conventions, then providing comprehensive implementation blueprints with specific files to create/modify, component designs, data flows, and build sequences