Agent-almanac manage-changelog
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/ja/skills/manage-changelog" ~/.claude/skills/pjt222-agent-almanac-manage-changelog-caf308 && rm -rf "$T"
i18n/ja/skills/manage-changelog/SKILL.mdチェンジログの管理
Keep a Changelog形式に従ってプロジェクトのチェンジログを維持管理する。このスキルは新しいチェンジログの作成、エントリの分類、
[Unreleased]セクションの管理、リリース時のバージョン付きセクションへのエントリ昇格を網羅する。検出された場合はR規約(NEWS.md)に適応する。
使用タイミング
- チェンジログが必要な新しいプロジェクトを開始する時
- 機能、フィックス、その他の変更の完了後にエントリを追加する時
- 未リリースエントリをバージョン付きセクションに移動してリリースを準備する時
- 公開前にチェンジログの完全性を確認する時
- フリーフォームのチェンジログをKeep a Changelog形式に変換する時
入力
- 必須: プロジェクトルートディレクトリ
- 必須: 文書化する変更の説明(またはgitログからの抽出元)
- 任意: 対象バージョン番号(リリース昇格用)
- 任意: リリース日(デフォルトは今日)
- 任意: チェンジログ形式の好み(Keep a ChangelogまたはR NEWS.md)
手順
ステップ1: チェンジログの検索または作成
プロジェクトルートで既存のチェンジログを検索する。
# Check for common changelog filenames ls -1 CHANGELOG.md CHANGELOG NEWS.md CHANGES.md HISTORY.md 2>/dev/null
チェンジログが存在しない場合、標準ヘッダーで作成する:
# 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.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased]
Rパッケージの場合、R規約のフォーマットで
NEWS.mdを使用する:
# packagename (development version) ## New features ## Bug fixes ## Minor improvements and fixes
期待結果: チェンジログファイルが適切なヘッダーとUnreleasedセクションで検索または作成されること。
失敗時: 非標準形式のチェンジログが存在する場合、上書きしない。代わりに形式の違いを注記し、既存のスタイルに合わせてエントリを適応する。
ステップ2: 既存エントリの解析
チェンジログを読み、その構造を特定する:
- ヘッダー/プリアンブル(プロジェクト名、形式の説明)
- 保留中の変更を含む
セクション[Unreleased] - 逆時系列順のバージョン付きセクション(
が[1.2.0]
の前)[1.1.0] - 末尾の比較リンク(任意)
各セクションについて、存在するカテゴリを特定する:
- Added -- 新機能
- Changed -- 既存機能の変更
- Deprecated -- 近く削除される機能
- Removed -- 削除された機能
- Fixed -- バグ修正
- Security -- 脆弱性の修正
期待結果: チェンジログの構造が理解され、既存のエントリが棚卸しされること。
失敗時: チェンジログが不正な形式(セクション欠落、順序の誤り)の場合、問題を注記するが確認なしに再構成しない。新しいエントリを正しく追加し、構造的な問題を手動レビュー用にフラグする。
ステップ3: 新しい変更の分類
文書化する各変更を6つのカテゴリの1つに分類する:
| Category | When to Use | Example Entry |
|---|---|---|
| Added | New feature or capability | |
| Changed | Modification to existing feature | |
| Deprecated | Feature marked for future removal | old_function()new_function()`` |
| Removed | Feature or capability removed | |
| Fixed | Bug fix | |
| Security | Vulnerability fix | |
エントリの記述ガイドライン:
- 各エントリを命令法の動詞で始める(Add、Change、Fix、Remove)
- コードを読まなくてもユーザーが影響を理解できるほど具体的にする
- 該当する場合はイシュー番号やCVEを参照する
- エントリは1行に収める; 複雑な変更にのみサブ箇条書きを使用する
期待結果: 各変更が適切に記述されたエントリとともに正確に1つのカテゴリに割り当てられること。
失敗時: 変更が複数のカテゴリにまたがる場合(例えば機能の追加とバグの修正の両方)、関連する各カテゴリに別々のエントリを作成する。カテゴリが不明な場合、デフォルトで「Changed」を使用する。
ステップ4: Unreleasedセクションへのエントリ追加
分類されたエントリを
[Unreleased]セクションに挿入する。カテゴリの順序を維持する: Added、Changed、Deprecated、Removed、Fixed、Security。
## [Unreleased] ### Added - Add batch processing mode for large datasets - Add `--dry-run` flag to preview changes without applying ### Fixed - Fix memory leak when processing files over 1GB - Fix incorrect timezone handling in date parsing
エントリのあるカテゴリのみを追加する; 空のカテゴリ見出しは含めない。
期待結果: 新しいエントリが正しいカテゴリで
[Unreleased]に追加され、一貫したフォーマットが維持されること。
失敗時: Unreleasedセクションが存在しない場合、ヘッダー/プリアンブルの直下、最初のバージョン付きセクションの上に作成する。
ステップ5: リリース時のバージョン付きセクションへの昇格
リリースを作成する際、すべてのUnreleasedエントリを新しいバージョン付きセクションに移動する:
- 新しいセクション見出しを作成する:
## [1.3.0] - 2026-02-17
のすべてのエントリを新しいセクションに移動する[Unreleased]
を空にする(ただし見出しは残す)[Unreleased]- ファイル末尾の比較リンクを更新する
## [Unreleased] ## [1.3.0] - 2026-02-17 ### Added - Add batch processing mode for large datasets ### Fixed - Fix memory leak when processing files over 1GB ## [1.2.0] - 2026-01-15 ### Added - Add CSV export for summary reports
比較リンクを更新する(末尾にある場合):
[Unreleased]: https://github.com/user/repo/compare/v1.3.0...HEAD [1.3.0]: https://github.com/user/repo/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/user/repo/compare/v1.1.0...v1.2.0
R
NEWS.mdの場合、R規約を使用する:
# packagename 1.3.0 ## New features - Add batch processing mode for large datasets ## Bug fixes - Fix memory leak when processing files over 1GB # packagename 1.2.0 ...
期待結果: Unreleasedエントリが日付付きバージョンセクションに移動され、Unreleasedセクションがクリアされ、比較リンクが更新されること。
失敗時: バージョン番号が既存のセクションと競合する場合、そのバージョンはすでにリリースされている。正しいバージョンを決定するために
apply-semantic-versioningで確認する。
ステップ6: チェンジログ形式の検証
チェンジログが形式要件を満たしていることを検証する:
- バージョンが逆時系列順である(最新が最初)
- 日付がISO 8601形式(YYYY-MM-DD)に従っている
- 各バージョンセクションに少なくとも1つの分類されたエントリがある
- バージョンセクションの重複がない
- 比較リンク(存在する場合)がバージョンセクションと一致する
# Check for duplicate version sections grep "^## \[" CHANGELOG.md | sort | uniq -d # Verify date format grep "^## \[" CHANGELOG.md | grep -v "Unreleased" | grep -vE "\d{4}-\d{2}-\d{2}"
期待結果: チェンジログがすべての形式チェックに警告なしで合格すること。
失敗時: 発見された形式の問題を修正する: セクションの並べ替え、日付形式の修正、重複の除去。人間の判断が必要な問題(例えば既知の変更に対する欠落エントリ)を報告する。
バリデーション
- Keep a ChangelogとSemVerを参照する適切なヘッダーのチェンジログファイルが存在する
-
セクションが上部(ヘッダーの下)に存在する[Unreleased] - すべての新しいエントリがAdded/Changed/Deprecated/Removed/Fixed/Securityに分類された
- エントリが命令法の動詞で始まりユーザーへの影響を説明する
- バージョン付きセクションが逆時系列順である
- 日付がISO 8601形式(YYYY-MM-DD)を使用する
- バージョンセクションの重複がない
- 比較リンク(使用する場合)が正確で最新である
- 空のカテゴリが含まれていない(エントリのない見出しがない)
よくある落とし穴
- 内部のみのエントリ: 「データベースモジュールをリファクタリング」はユーザーに有用ではない。ユーザーに面する変更に焦点を当てる。内部のリファクタリングはコミットメッセージに入れ、チェンジログには入れない。
- 曖昧なエントリ: 「様々なバグ修正」はユーザーに何も伝えない。各修正は具体的で説明的なエントリであるべきである。
- Unreleasedの忘却: バージョン付きセクションに直接エントリを追加すると、変更がまだリリースされていないのにリリース済みとして文書化される。
- 誤ったカテゴリ: 実際には新機能を追加する「修正」。修正は期待される動作を復元するもの; バグレポートとして要求されたものでも新しい機能は「Added」である。
- Securityエントリの欠落: セキュリティ修正は利用可能な場合、常にCVE識別子とともに文書化すべきである。ユーザーは緊急アップグレードが必要かどうかを知る必要がある。
- チェンジログのドリフト: 変更時にチェンジログを更新しないこと。リリース前にエントリを一括で書くと、見逃されたり不十分に記述された変更につながる。コード変更とともにエントリを書く。
関連スキル
-- チェンジログエントリと対になるバージョン番号の決定apply-semantic-versioning
-- チェンジログエントリがバージョン付きセクションに昇格されるタイミングの定義plan-release-cycle
-- 適切なメッセージでのチェンジログ更新のコミットcommit-changes
-- NEWS.mdの更新を含むR固有のリリースワークフローrelease-package-version
-- チェンジログの内容をGitHubリリースノートとして使用create-github-release