changelog
sakuro/dotfiles
前回のリリース以降のコミットから変更履歴のエントリを生成します。ユーザーが CHANGELOG.md を更新したり、変更履歴のエントリを追加したり、変更内容を記録したりしたい場合に使用します。
...すべて拡張します概要changelog
「changelog 」スキルは、前回のリリース以降のGitコミットからchangelog のエントリを生成するプロセスを自動化します。このスキルは、開発チームがプロジェクトの変更履歴を一貫性のある、ユーザー視点に立った形で維持できるよう支援することを目的としています。 このスキルは、コミットメッセージを分析し、ユーザー向けの変更と内部的な変更を区別することで、CHANGELOG.md に、エンドユーザーに関連する有意義な更新内容が確実に反映されるようにします。これにより、手作業の負担が軽減され、変更の見落としを防ぎ、リリースドキュメントの正確性と最新性を確保できます。
このスキルは、コミット情報の抽出、変更の分類、および標準化されたスタイルでのエントリのフォーマットを行うための構造化されたワークフローを提供します。主な機能には、新機能、バグ修正、パフォーマンスの改善、非推奨化、セキュリティ更新などのユーザー向けの変更を特定しつつ、リファクタリング、テスト、CI/CDの変更といった純粋に内部的な変更を除外することが含まれます。 コミットメッセージからイシュー参照を自動的に抽出し、エントリを事前定義されたカテゴリ(追加、変更、修正、削除、非推奨、セキュリティ)に分類します。 さらに、現在のブランチに基づいてchangelog の適切なセクションを判定し、バージョン管理されたリリースと「未リリース」セクションの両方をサポートします。このスキルは、BashコマンドとEditツールを活用して、changelog をシームレスに読み込み・更新します。
このスキルは、changelog のメンテナンスを効率化したい、オープンソースや社内ソフトウェアプロジェクトを維持管理する開発者、リリースマネージャー、およびチームに最適です。特に、コミット頻度が高いプロジェクトや複数の貢献者が関わるプロジェクトにおいて、ユーザーに影響するすべての変更が一貫して文書化されるため、非常に有用です。 ユーザーは、時間の節約やエラーの削減に加え、エンドユーザー、ステークホルダー、およびコントリビューターに更新内容を明確に伝える、プロフェッショナルで体系的な「changelog 」の恩恵を受けることができます。
よくある質問
changelog スキルはどのように使用しますか?
まず、プロジェクトのリポジトリでこのスキルを実行してください。スキルは前回のリリース以降のコミットを自動的に検出し、ユーザー向けの変更を分類し、イシューへの参照を抽出し、CHANGELOG.md を適切なセクション(未リリースまたはバージョン管理されたリリース)で更新します。
changelog にはどのような変更が含まれますか?
このスキルは、新機能、バグ修正、パフォーマンスの改善、互換性を損なう変更、非推奨機能、セキュリティ修正など、ユーザー向けの変更を含みます。リファクタリング、テスト、CI/CD、コードスタイルの更新などの内部的な変更は、ユーザー向けの動作に影響を与えない限り、対象外となります。
以前のリリースタグがないリポジトリにも対応していますか?
はい。以前のリリースタグが存在しない場合、このスキルは最新のコミット(最大50件)を分析してchangelog エントリを生成し、「未リリース」セクションに配置します。
新しいエントリは、既存のchangelog の内容と自動的にマージされますか?
はい。このスキルは現在のCHANGELOG.mdを読み込み、対象のセクションが存在しない場合は作成し、重複を回避しながら新しいエントリをマージします。
コミットメッセージに課題参照は必須ですか?
いいえ、イシュー参照は任意です。指定された場合、エントリ内に「(#123)」という形式で含まれます。複数の参照がある場合は、「(#123, #124)」として統合されます。
Changelog Generation Skill
Analyzes commits since the last release and adds user-facing changes to CHANGELOG.md.
Instructions
IMPORTANT: When using this skill, announce to the user: "Using changelog skill to generate changelog entries."
1. Get Last Release Tag
# Get the most recent release tagLAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")if [ -z "$LAST_TAG" ]; then echo "No previous release tag found. Will analyze all commits."fi
2. Get Commits Since Last Release
# If tag existsgit log --format="%H %s" "$LAST_TAG"..HEAD# If no tag, get recent commitsgit log --format="%H %s" -50
3. Analyze Each Commit
For each commit, determine if it has user-facing impact:
Include (user-facing):
- New features (
:sparkles:) - Bug fixes (
:bug:) - Performance improvements (
:zap:) - Breaking changes (
:boom:) - Deprecations
- Security fixes (
:lock:)
Exclude (internal):
- Refactoring (
:recycle:) - unless it changes behavior - Tests (
:white_check_mark:) - CI/CD changes (
:construction_worker:) - Documentation (
:memo:) - unless user-facing docs - Code style (
:art:) - Merge commits
4. Extract Issue References
Look for issue references in commit messages:
#123Fixes #123Closes #123Related to #123
5. Categorize Changes
Group entries by category:
### Added- New features### Changed- Changes to existing functionality### Fixed- Bug fixes### Removed- Removed features### Deprecated- Soon-to-be removed features### Security- Security fixes
6. Format Entries
Each entry should:
- Start with imperative verb (Add, Fix, Change, Remove)
- Be concise (one line)
- Include issue reference at end if available
Examples:
- Add list formatting support (#42)- Fix memory leak in data provider (#88)- Change default locale to en-US
7. Determine Target Section
# Get current branchBRANCH=$(git branch --show-current)# Determine target sectionif [[ "$BRANCH" =~ ^release-v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then # On release branch → target is that version TARGET_SECTION="[${BASH_REMATCH[1]}]"else # Not on release branch → target is Unreleased TARGET_SECTION="[Unreleased]"fi
8. Update CHANGELOG.md
- If target section doesn't exist, create it
- Add/merge entries under the target section
Creating new section if needed:
- For
[Unreleased]: Add after the header, before first version section - For version
[X.Y.Z]: Add after[Unreleased], before previous versions
Example structure:
## [Unreleased]## [0.7.0] - 2024-01-15### Added- New feature description (#123)## [0.6.0] - 2024-01-01...
Use the Edit tool to update CHANGELOG.md.
Workflow
- Get last release tag
- List commits since that tag
- For each commit:
- Read commit message
- Determine if user-facing
- Extract issue references
- Categorize (Added/Changed/Fixed/etc.)
- Determine target section:
- On
release-vX.Y.Zbranch →[X.Y.Z] - Otherwise →
[Unreleased]
- On
- Read current CHANGELOG.md
- Create target section if it doesn't exist
- Merge new entries with existing content in target section
- Update CHANGELOG.md using Edit tool
Guidelines
Entry Writing
- Use imperative mood: "Add" not "Added" or "Adds"
- Be specific but concise
- Focus on user impact, not implementation details
- One logical change per entry
Issue References
- Always include if available
- Format:
(#123)at end of line - Multiple issues:
(#123, #124)
Avoiding Duplicates
- Check existing [Unreleased] entries before adding
- Merge or update if similar entry exists
Example Output
## [Unreleased]### Added- Implement DecimalFormatter for number formatting (#42)- Add locale fallback support### Changed- Update default collation strength to tertiary### Fixed- Fix crash when parsing invalid locale string (#55)- Resolve memory leak in DataProvider (#58)
Arguments
This skill takes no arguments. It always analyzes commits from the last release tag to HEAD.
changelogをインストール
スキルファイルをダウンロードし、.claude/skills/ ディレクトリに解凍してください。
ZIPをダウンロードリポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。
git clone https://github.com/sakuro/dotfiles/blob/main/.config/claude/skills/changelog/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
コピー





家
