mcpField
R
release-notes

release-notes

github.com/jackin-project開発3164 回インストール5 週間前に更新
リポジトリ

release-notes について

release-notesは、最後のリリースタグ以降にマージされたPRと未分類のコミットをもとに、CHANGELOG.mdの[Unreleased]セクションを作成・更新するリポジトリ用スキルです。リリースノートを準備・確認するメンテナー向けです。

主な機能

  1. 01最後のリリースタグの検出
  2. 02ghによるマージ済みPRの収集
  3. 03変更内容のカテゴリ分類
  4. 04PRに関連付かないコミットの追加
  5. 05既存項目を置き換える前の確認
  6. 06草案の提示と承認依頼

活用シーン

  1. 01リリース前の変更ログ作成
  2. 02次回リリースに含む変更の確認
  3. 03既存の[Unreleased]セクションの再生成・更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jackin-project/jackin-dev --skill release-notes

インストール後、Claude Code で/release-notesを入力して読み込まれたか確認します。

詳細

リリースノート

最後のリリースタグ以降にマージされた PR を基に、CHANGELOG.md の [Unreleased] セクションを生成または更新します。

使用するタイミング

  • リリース前に、変更履歴を記入するとき
  • 次回のリリースに含まれる内容をプレビューしたいとき
  • 変更履歴の更新または再生成を依頼されたとき

手順

ステップ 1:最後のタグを検出する
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")

タグが存在しない場合は、これが最初のリリースです。開始点として最初のコミットを使用します。

FIRST_COMMIT=$(git rev-list --max-parents=0 HEAD)
ステップ 2:タグの日付を取得する
TAG_DATE=$(git log -1 --format=%aI "$LAST_TAG" 2>/dev/null || echo "")
ステップ 3:マージ済み PR を収集する
gh pr list --state merged --base main --search "merged:>$TAG_DATE" --json number,title,labels,mergedAt --jq '.[] | {number, title, labels: [.labels[].name], mergedAt}'
ステップ 4:各 PR を分類する

タイトルの接頭辞とラベルに基づいて、PR を Keep a Changelog のカテゴリに分類します。

タイトルの接頭辞ラベルカテゴリ
feat:, feature:feature, enhancement追加
fix:bug, bugfix修正
security:securityセキュリティ
refactor:, chore:, docs:, ci:, build:refactor, chore, docs変更
deprecate:deprecated非推奨
remove:removed削除

どの接頭辞やラベルにも一致しない PR は、デフォルトとして 変更 に分類します。

エントリを生成する際は、タイトルから Conventional Commits の接頭辞を取り除きます。たとえば次のようになります。

  • feat: add TUI launcher は Add TUI launcher になります
  • fix: symlink escape in mounts は Fix symlink escape in mounts になります

各エントリの最初の文字を大文字にします。

ステップ 5:グループ化されていないコミットを見つける

最後のタグ以降のコミットのうち、マージ済み PR に関連付けられていないものを見つけます。

git log "$LAST_TAG"..HEAD --oneline --no-merges

各コミットが PR の一部だったかどうかを確認します。

gh pr list --state merged --search "<commit-sha>" --json number --jq '.[0].number'

PR に関連付けられていないコミットは、グループ化されていないコミット セクションに追加します。

ステップ 6:変更履歴セクションを整形する

PR へのリンクを含め、Keep a Changelog の形式で整形します。

## [Unreleased]

### Added
- Add TUI launcher for interactive agent selection ([#12](https://github.com/jackin-project/jackin/pull/12))

### Fixed
- Fix symlink escape in container mounts ([#15](https://github.com/jackin-project/jackin/pull/15))

### Changed
- Extract testing instructions into TESTING.md ([#18](https://github.com/jackin-project/jackin/pull/18))

エントリがあるセクションのみを含めます。空のセクションは含めないでください。

グループ化されていないコミットがある場合は、次を追加します。

### Ungrouped commits (not from PRs)
- `205875a` docs: fix resolve_agent_source references
- `efa41b8` docs: split TODO into individual files
ステップ 7:既存の Unreleased セクションを確認する

CHANGELOG.md を読み込み、[Unreleased] セクションにすでに内容があるか確認します。

内容がある場合は、ユーザーに尋ねます。

「CHANGELOG.md の [Unreleased] セクションには、すでにエントリがあります。次のどちらを行いますか? A) 最初から再生成する(既存のエントリを置き換える) B) 既存のエントリを残し、不足している PR を追加する」

ステップ 8:CHANGELOG.md に書き込む

CHANGELOG.md が存在しない場合は、標準のヘッダーを付けて作成します。

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).



## [Unreleased]

[generated entries here]

CHANGELOG.md が存在する場合は、## [Unreleased] セクションの内容(## [Unreleased] と次の ## [ 見出し、またはファイル末尾までのすべて)を置き換えます。

ステップ 9:レビュー用に提示する

[Unreleased] セクション全体をユーザーに提示します。ユーザーは次の操作を行えます。

  • 編集を依頼する(「PR #42 を Added に移動する」「このエントリを書き換える」「このコミットを削除する」など)
  • そのまま承認する

ユーザーが変更履歴の内容を承認するまで、先に進まないでください。

冪等性

このスキルは複数回実行しても安全です。

  • 書き込む前に、常に CHANGELOG.md の現在の状態を確認します
  • 既存のエントリを上書きする前に確認します
  • PR データは実行のたびに GitHub から最新の情報を取得します

コメント