Changelog Management について
Changelog Managementは、XerahSのリリースノートを管理するリポジトリースキルです。Git履歴からの草案作成、バージョンごとの項目統合、分類とクレジット表記の統一方法を説明します。
主な機能
- 01Gitコミットからの草案生成
- 02バージョン見出しの統合
- 03変更の分類と項目整理
- 04コントリビューター表記規則
- 05Keep a Changelog形式
活用シーン
- 01タグ以降のリリースノート草案作成
- 02パッチ項目をマイナーリリースに統合
- 03変更履歴の分類と表記の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sharex/ xerahs --skill changelog-managementインストール後、Claude Code で/changelog-managementを入力して読み込まれたか確認します。
同梱ファイルscripts/update-changelog.ps1
詳細
自動化スクリプト(推奨)
ヘルパースクリプトを使用して、最後のタグ以降のコミットを変更履歴のカテゴリ別にまとめたセクションの下書きを生成します。
スクリプトのパス:
.ai/skills/update-changelog/scripts/update-changelog.ps1
プレビューのみ(生成された Markdown を出力):
powershell -NoProfile -ExecutionPolicy Bypass -File .ai/skills/update-changelog/scripts/update-changelog.ps1
明示的に指定したタグ/バージョンから下書きを生成してファイルに保存:
powershell -NoProfile -ExecutionPolicy Bypass -File .ai/skills/update-changelog/scripts/update-changelog.ps1 -FromTag v0.18.9 -Version 0.19.0 -OutputPath build/changelog-draft.md
docs/CHANGELOG.md に直接適用:
powershell -NoProfile -ExecutionPolicy Bypass -File .ai/skills/update-changelog/scripts/update-changelog.ps1 -FromTag v0.18.9 -Version 0.19.0 -Apply
注意:
-Versionの既定値はルートのDirectory.Build.propsです。-FromTagの既定値はgit describe --tags --abbrev=0です。- このスクリプトは
## vX.Y.Zを挿入または更新します(そのバージョンの既存セクションを置き換えるか、## Unreleasedの後に挿入します)。 - まとめ方の品質と貢献者のクレジット表記のルールについては、手動で確認してください。
バージョンのグループ化戦略
Git タグに基づく統合
- 重要:
git tag -lを確認して、最後にリリースされたバージョンタグを特定します。 - 最後の git タグ以降のすべてのコミットを、次のマイナーバージョンの見出し1つにまとめる必要があります。
- 例:最後のタグが
v0.15.5の場合、そのタグ以降のすべてのコミット(v0.15.6、v0.15.7、v0.16.0、v0.16.1 などの変更履歴セクションを含む)をv0.16.0 に統合する必要があります。
- 例:最後のタグが
- git タグ間に複数のバージョン見出しを作成してはいけません。2つのタグの間には、バージョン見出しを1つだけ作成してください。
マイナーバージョンの内訳
Directory.Build.propsや git タグに明示されていない場合でも、変更は必ずマイナーバージョン(例:v0.8.0、v0.9.0、v0.10.0)ごとに分けてください。git logとDirectory.Build.propsの履歴を分析し、バージョンの更新が発生した、または示唆された暗黙の境界を特定してください。
統合ルール
- パッチバージョン:パッチバージョン(例:
v0.8.x)は、単独での主要なリリースだった場合を除き、次の重要なマイナーバージョン(例:v0.9.0)に統合してください。- 例:
v0.8.1、v0.8.2、v0.8.3の項目は、v0.9.0 の下にまとめて記載してください。 - 必要に応じて元の文脈を保持してください(例:「Feature: ...
(v0.8.1)」)。
- 例:
- プレリリース後の修正:以前のバージョンのリリース後に行われた修正は、次のマイナーバージョンに移動してください。
- 例:
v0.7.7タグの後に行われたものの、履歴上v0.7.7の見出しの下に記載されている修正は、v0.8.0 に移動してください。
- 例:
コミットの扱い
特定のコミットの割り当て
- 特定のコミットを特定のバージョンに割り当てるようユーザーから依頼された場合は、その指示に従ってください。
- 例:「コミット
298457aを v0.11.0 に記載してください。」 - 割り当てる前に、コミットハッシュと件名を必ず確認してください。
クレジット表記
- 外部の貢献者:外部の貢献者によるプルリクエストには、PR 番号とユーザー名を記載してください。
- 形式:
(#PR_NUMBER, @username) - 例:
(#77, @Hexeption)
- 形式:
- メンテナーによるマージ:メインメンテナー(例:
McoreD)によるマージコミットは、他のコミットでは扱われていない重要な独自作業が含まれる場合を除き、明示的なクレジット表記の対象から除外してください。他のユーザーへのクレジット表記を優先します。
分類
各バージョン内の変更を、次の標準カテゴリに分類してください。
- 機能:新しい機能。
- 修正:バグ修正。
- リファクタリング:外部から見た動作を変更しないコードの改善。
- ビルド:ビルドシステム、依存関係、パッケージング。
- コア:中核となる基盤の変更。
- インフラストラクチャ:リポジトリ、git、ワークフローの変更。
行数を減らすための項目の統合
重要:変更履歴を簡潔で読みやすく保つため、関連するコミットを1つの項目に統合してください。
ガイドライン:
- コンポーネントと目的でグループ化:同じコンポーネントに影響し、同じ目的を持つ複数のコミットをまとめてください。
- すべてのコミットハッシュを保持:統合する際は、関連するすべてのコミットハッシュを1行に含めてください。
- 削減目標:関連する作業を統合し、行数を30~50%削減することを目指してください。
例:
統合前(冗長):
- **Media Explorer**: Add `IUploaderExplorer` interface `(9deedf9)`
- **Media Explorer**: Implement S3 file browser `(9deedf9)`
- **Media Explorer**: Implement Imgur album browser `(9deedf9)`
- **Media Explorer**: Add navigation, breadcrumbs, search, filter `(9deedf9)`
- **Media Explorer**: Add bandwidth savings banner `(e374160)`
統合後(簡潔):
- **Media Explorer**: Implement provider file browsing with S3 and Imgur support, including navigation, search, filtering, and CDN thumbnail optimization `(9deedf9, e374160)`
統合前(モバイル機能):
- **Mobile**: Add adaptive mobile theming infrastructure `(4b79ddb)`
- **Mobile**: Refactor mobile views for adaptive native styling `(a7cfb22)`
- **Mobile**: Align mobile heads with native theming defaults `(1e5f9eb)`
- **Mobile**: Complete sprint 5 mobile theming polish and docs `(30bbe98)`
- **Mobile**: Add mobile upload queue and picker `(68d97d9)`
- **Mobile**: Add mobile upload history screens `(52d6ad2)`
統合後(簡潔):
- **Mobile**: Add adaptive theming infrastructure with native styling polish `(4b79ddb, a7cfb22, 1e5f9eb, 30bbe98)`
- **Mobile**: Add upload queue, picker, and history screens `(68d97d9, 52d6ad2)`
統合前(修正):
- **Scrolling Capture**: Always auto-scroll to top `(1fa45f2)`
- **Scrolling Capture**: Apply workflow settings and refresh hotkeys `(971219c)`
- **Scrolling Capture**: Use current scroll position for detection `(8ac2c8b)`
統合後(簡潔):
- **Scrolling Capture**: Improve auto-scroll behavior and workflow settings integration `(1fa45f2, 971219c, 8ac2c8b)`
まとめない場合:
- 異なるコンポーネントのコミット(例:「Mobile」と「Linux Capture」をまとめない)
- 外部コントリビューターの貢献者表記があるコミット(可視性を保つため、分けておきます)
- 独立した項目として記載する価値のある重要な機能
フォーマット
セマンティックバージョニングを用い、Keep a Changelog の形式に従います。
## vX.Y.Z
### Features
- **Component**: Description `(short-hash)`
- **Component**: Description `(short-hash, short-hash)`
### Fixes
- Description `(short-hash)`
ワークフロー
手順
-
最後の Git タグを特定する
git tag -l | Sort-Object -Descending | Select-Object -First 1これにより、バージョンをまとめる範囲が決まります。
-
最後のタグ以降のコミットを取得する
git log v0.X.Y..HEAD --oneline --no-decorateドキュメントに記載するすべてのコミットを分析します。
-
Directory.Build.props 内の現在のバージョンを確認する
<Version>プロパティを読み取り、対象のバージョン番号を確認します。 -
バージョン見出しをまとめる
- 最後の Git タグから現在の HEAD までのバージョン見出しをすべて削除します
- 次のマイナーバージョン(Directory.Build.props に記載)用の見出しを 1 つだけ作成します
- すべてのコミットをこの 1 つのバージョン見出しにまとめます
-
コミットを分類する
- コミットを「Features」「Fixes」「Refactor」「Build」「Documentation」に分類します
- 各カテゴリ内でコンポーネントごとにグループ化します(例:Mobile、Linux Capture、Editor)
-
関連する項目をまとめる
- 同じコンポーネントに影響し、目的が類似するコミットを特定します
- それらを包括的な項目にまとめます
- すべてのコミットハッシュを保持します
- 行数を 30〜50%削減することを目指します
-
フォーマットを整えて確認する
- Markdown の形式が正しいことを確認します
- すべてのコミットハッシュが含まれていることを確認します
- 外部コントリビューターの貢献者表記が保持されていることを確認します
- Keep a Changelog の形式に準拠していることを確認します
コマンド実行例
# Get last tag
$lastTag = git tag -l | Sort-Object -Descending | Select-Object -First 1
# Get commits since tag
git log $lastTag..HEAD --oneline --no-decorate
# Check current version
$version = Select-String -Path "Directory.Build.props" -Pattern '<Version>(.*)</Version>' | ForEach-Object { $_.Matches.Groups[1].Value }
# Update CHANGELOG.md with consolidated entries