changelog-generator について
Conventional Commits から Java プロジェクトの変更ログを作成するスキルです。バージョン規則と既存の形式を判定し、変更を分類してバージョン更新を提案します。
主な機能
- 01プロジェクトファイルやタグからバージョン規則を判定
- 02既存の変更ログ形式を確認
- 03コミットを項目別に分類
- 04課題と比較リンクを追加
- 05バージョン更新を提案
活用シーン
- 01リリース前の変更ログ作成
- 02指定タグ以降の変更確認
- 03特定課題のログ項目追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ decebals/ claude-code-java --skill changelog-generatorインストール後、Claude Code で/changelog-generatorを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
変更履歴生成スキル
Java プロジェクトの Conventional Commits から変更履歴を生成します。
使用するタイミング
- リリース前
- ユーザーが「変更履歴を生成して」「変更履歴を更新して」「前回のリリース以降の変更点は?」と言ったとき
- マイルストーンの完了後
バージョン管理規則の検出
次の優先順位でバージョン管理のスタイルを検出します。
1. CLAUDE.md を確認する(存在する場合)
grep -A5 "## Versioning" CLAUDE.md 2>/dev/null
明示的な規則を探します。
## Versioning
This project uses Semantic Versioning (x.y.z).
Tag format: `release-x.y.z`
2. フォールバック:Git タグから検出する
git tag --sort=-version:refname | head -10
| 検出されたパターン | バージョン管理のスタイル |
|---|---|
v3.15.0、3.15.0 | SemVer(x.y.z) |
release-3.15.0 | プレフィックス付き SemVer |
v2.1、2.1 | 2 コンポーネント(x.y) |
2026.01、26.1 | CalVer |
| パターンなし | ユーザーに確認 |
3. フォールバック:CHANGELOG.md から検出する
grep -E "^\#+ \[.*\]" CHANGELOG.md | head -5
既存の項目からバージョン形式を抽出します。
4. 最終手段:ユーザーに確認する
No versioning convention detected. Which format does this project use?
- Semantic Versioning (x.y.z) - e.g., 3.15.0
- Two-component (x.y) - e.g., 2.1
- Calendar Versioning - e.g., 2026.01
対応するバージョン管理スタイル
| スタイル | 形式 | タグの例 | バージョンの更新 |
|---|---|---|---|
| SemVer | x.y.z | v3.15.0、release-3.15.0 | major.minor.patch |
| 2 コンポーネント | x.y | v2.1、2.1 | major.minor |
| CalVer | YYYY.MM[.patch] | 2026.01、2026.01.1 | year.month[.patch] |
レガシープロジェクト(CLAUDE.md にバージョン管理のセクションがない場合)
CLAUDE.md は存在するものの、バージョン管理の情報がない場合:
- 推測せず、タグ/変更履歴から検出します
- 検出できた場合は、CLAUDE.md への追記を任意で提案します。
Detected versioning: SemVer (x.y.z) with tag prefix 'release-' Want me to add this to CLAUDE.md for future reference?
出力形式
2 種類の形式に対応しています。既存の CHANGELOG.md から形式を検出するか、ユーザーに希望を確認します。
形式 A:Keep a Changelog(バージョン見出しは h2)
# Changelog
## [Unreleased]
## [1.2.0] - 2026-01-29
### Added
- [#123]: New feature for plugin dependencies
### Changed
- [#456]: Improved performance of plugin loading
### Fixed
- [#234]: Resolved NPE when directory missing
形式 B:pf4j スタイル(バージョン見出しは h3)
## Change Log
### [Unreleased][unreleased]
### [3.15.0] - 2026-01-29
#### Added
- [#123]: New feature for plugin dependencies
#### Changed
- [#456]: Improved performance of plugin loading
#### Fixed
- [#234]: Resolved NPE when directory missing
参照スタイルのリンク(推奨)
項目をすっきりと読みやすくするため、参照スタイルのリンクを使用します。
#### Fixed
- [#648]: Restore missing `module-info.class` in multi-release JAR
- [#625]: Fix exception handling inconsistency in `startPlugin()`
#### Added
- [#629]: Validate dependency state on plugin start
- [#633]: Allow customization of `PluginClassLoader` parent delegation
[#648]: https://github.com/user/repo/issues/648
[#633]: https://github.com/user/repo/pull/633
[#629]: https://github.com/user/repo/pull/629
[#625]: https://github.com/user/repo/pull/625
メリット:
- インラインに長い URL がなく、読みやすくなります
- リンクを一度だけ定義して再利用できます
- 記述と保守が容易になります
バージョン比較リンク
差分を簡単に確認できるよう、末尾に比較リンクを追加します。
[unreleased]: https://github.com/user/repo/compare/release-3.15.0...HEAD
[3.15.0]: https://github.com/user/repo/compare/release-3.14.1...release-3.15.0
[3.14.1]: https://github.com/user/repo/compare/release-3.14.0...release-3.14.1
パターン: [version]: https://github.com/{owner}/{repo}/compare/{previous-tag}...{current-tag}
セクションの順序
既存のファイルに合わせるか、次のデフォルトの順序を使用します。
| セクション | 使用する内容 |
|---|---|
| Fixed | バグ修正 |
| Changed | 既存機能の変更 |
| Added | 新機能 |
| Deprecated | まもなく削除される機能 |
| Removed | 削除された機能 |
| Security | 脆弱性の修正(CVE) |
注:pf4j では Fixed → Changed → Added → Removed の順です。Keep a Changelog では Added → Changed → Deprecated → Removed → Fixed → Security の順です。
ルール:既存のファイルがある場合は、その順序に従います。
Conventional Commits から変更履歴へのマッピング
| コミット種別 | 変更履歴のセクション |
|---|---|
| feat | Added |
| fix | Fixed |
| perf | Changed |
| refactor | Changed |
| build(deps) | Changed または Security(CVE の場合) |
| BREAKING CHANGE | Changed(太字の注記付き) |
| deprecate | Deprecated |
ワークフロー
-
既存の CHANGELOG.md を確認する
cat CHANGELOG.md | head -20形式(バージョン見出しが h2 か h3 か、セクションの順序、リンクのスタイル)を検出します。
-
バージョン範囲を決定する
# Find last tag git describe --tags --abbrev=0 # List recent tags git tag --sort=-version:refname | head -5 -
前回のリリース以降のコミットを取得する
git log v3.14.1..HEAD --oneline -
Issue/PR への参照を抽出する パターンを探します:
#123、fixes #123、closes #123、(#123) -
変更履歴の項目を生成する
- セクションごとにグループ化します
- 参照スタイルのリンクを使用します
- バージョン比較リンクを追加します
-
バージョンの更新を提案する(検出したバージョン管理スタイルに基づく)
SemVer(x.y.z):
- BREAKING CHANGE → Major(3.0.0 → 4.0.0)
- feat → Minor(3.14.0 → 3.15.0)
- fix のみ → Patch(3.14.0 → 3.14.1)
2 コンポーネント(x.y):
- BREAKING CHANGE → Major(2.0 → 3.0)
- feat/fix → Minor(2.1 → 2.2)
CalVer(YYYY.MM):
- 月が変わった場合 → 2026.01 → 2026.02
- 同じ月に新しいリリースを行う場合 → 2026.01 → 2026.01.1
トークンの最適化
- 最初のスキャンには
git log --onelineを使用します - BREAKING CHANGE が疑われる場合に限り、コミットの全文を取得します
- 既存のファイルにあるリンク定義を再利用します
- 変更履歴全体を読み直さず、新しいセクションだけを先頭に追加します
例:ワークフロー全体
入力: ユーザーが「次のリリースの変更履歴を生成して」と言います
ステップ 1: 既存の形式を確認
head -30 CHANGELOG.md
→ pf4j スタイル(h3 のバージョン見出し、「Fixed」が先)を検出します
ステップ 2: バージョンの範囲を特定
git describe --tags --abbrev=0
→ release-3.15.0
ステップ 3: コミットを取得
git log release-3.15.0..HEAD --oneline
→ 5 件のコミットが見つかりました
ステップ 4: エントリを生成
### [Unreleased][unreleased]
#### Fixed
- [#650]: Fix memory leak in extension factory
#### Changed
- [#651]: Rename `LegacyExtension*` to `IndexedExtension*`
#### Added
- [#652]: Add support for plugin priority ordering
ステップ 5: リンク定義を生成
[#652]: https://github.com/pf4j/pf4j/pull/652
[#651]: https://github.com/pf4j/pf4j/pull/651
[#650]: https://github.com/pf4j/pf4j/issues/650
ステップ 6: バージョン比較リンクを更新
[unreleased]: https://github.com/pf4j/pf4j/compare/release-3.15.0...HEAD
ステップ 7: バージョンを提案
Suggested: 3.16.0 (minor - has new feature)
特殊ケースへの対応
Conventional Commits がない場合
元のメッセージを使用して「Changed」の下に記載します:
#### Changed
- Updated plugin loading mechanism
- Refactored test utilities
セキュリティ修正
#### Security
- [#618], [#623]: Fix path traversal vulnerabilities in ZIP extraction
破壊的変更
#### Changed
- **BREAKING**: [#645] Renamed `LegacyExtension*` classes to `IndexedExtension*`
同じ修正に複数の課題がある場合
- [#630], [#631]: Set `failedException` when plugin validation fails
既存の CHANGELOG.md との統合
-
既存のファイルを読み取り、次の項目を確認します:
- 見出しレベル(バージョンには ## または ###)
- セクションの順序
- リンクのスタイル(参照形式またはインライン形式)
- 既存のリンク定義
-
[Unreleased]セクションの後に新しいバージョンを挿入します -
リンク定義を統合します。新しい定義を追加し、既存の定義は保持します
-
[unreleased]比較リンクが新しいバージョンを指すように更新します
クイックリファレンス
| ユーザーの発言 | 操作 |
|---|---|
| "generate changelog" | 最後のタグ以降の変更履歴全体 |
| "changelog since v3.14" | 指定したバージョン以降の変更履歴 |
| "what's unreleased" | 未リリースの変更をプレビュー |
| "update changelog for 3.16" | バージョン 3.16 の変更履歴を生成して挿入 |
| "add changelog entry for #123" | 単一の課題のエントリ |