メインコンテンツまでスキップ

第20章:バージョニング実務②(変更ログとリリースノート)📰

この章でできるようになること ✅🎓

  • 「変更ログ(CHANGELOG)」と「リリースノート」を目的別に書き分けできるようになる🧠✨
  • 利用者が最短で直せるように、**“何が変わった?”→“影響は?”→“何をすればいい?”**をセットで書ける🧭💡
  • GitHubの自動生成リリースノートを下書きにして、人間が読む価値のある文章に仕上げられる🤖📝 (GitHub Docs)
  • NuGetパッケージ向けに、短く効くリリースノート(PackageReleaseNotes)を書ける📦✍️ (Microsoft Learn)

1) 変更ログとリリースノートの違い 🗂️✨

変更ログ(CHANGELOG)📚

  • 「このプロダクトは、版ごとに何が変わったか」を時系列で残すファイル
  • “後から見返しても迷子にならない”のが正義👑
  • 形式は「Keep a Changelog」の型が超使いやすい(人間向け・分類・リンク可能・最新版が上)📌 (Keep a Changelog)

リリースノート 📰

  • 今回のリリースで、利用者は何を知ればいい?何をすればいい?」の1回分
  • “読む人が今すぐ動ける”のが正義🏃‍♀️💨
  • GitHubのReleaseページ、社内Wiki、配布ページなどに載ることが多いよ📣 (GitHub Docs)

2) いちばん大事:読む人の気持ちを想像する 🧠💞

リリースノートって、読む人はだいたいこんな状態😇👇

  • 「アップデートしていい?怖い?」😱
  • 「自分のコード、直す必要ある?どこ?」🔧
  • 「破壊的変更ある?あるなら回避策は?」🧯
  • 「不具合直った?自分の症状に効く?」💊
  • 「セキュリティ修正ある?優先度高い?」🔐

だから、書く順番はこれが最強💪✨

  1. Breaking / 重要注意(あれば最上段)💥
  2. 新機能(嬉しい話)🆕
  3. 修正(困ってた人を救う)🩹
  4. 移行手順(どう直す?)🧭
  5. 既知の問題(あれば正直に)⚠️

3) “Keep a Changelog” の型を採用するとラクになる 🧱😊

Changelog Boxes

Keep a Changelog の思想はシンプルだよ👇

  • 変更ログは人間のため(コミット羅列はノイズになりやすい)🙅‍♀️
  • 変更を Added / Changed / Deprecated / Removed / Fixed / Security に分けると読みやすい📌 (Keep a Changelog)
  • Unreleased を上に置くと、日々の追記→リリース時に移動、ができて運用がラク🧺✨ (Keep a Changelog)
  • SemVer(バージョン番号の意味付け)と相性がいい🔢 (Semantic Versioning)

4) 実務で迷わない「書く手順」📝✨

Step 0:素材を集める 🧺

  • 直近のPR/Issue、コミット、差分、利用者からの問い合わせ、障害報告などをざっくり集める📌
  • “書く価値があるのは、利用者に影響がある変更”だよ👀✨(内部リファクタだけで挙動が変わらないなら、基本は薄めでOK)

Step 1:互換性チェック(ざっくりでOK)🔍

  • 壊れる:コンパイル通らない/例外が増えた/意味が変わった 💥
  • たぶん大丈夫:追加(任意)・バグ修正・性能改善 🆗
  • 注意:既定値変更・挙動の微妙な変更・例外メッセージ変更など 😇

Step 2:分類(6箱に投げる)📦

Keep a Changelog の箱に仕分けすると速いよ👇

Step 3:文章化(1行テンプレで量産)✍️

1件の変更は、まずこの1行でOK👇

  • 何が:何が変わった?
  • 誰が影響:誰が困る/嬉しい?
  • どうすれば:何を直せばいい?(必要なら)

例:

  • Foo()FooAsync() に置き換え推奨(旧APIは非推奨)。利用側は置換してね🧭」

5) GitHub Release向け:リリースノートの“完成形テンプレ” 📰✨

## vX.Y.Z - YYYY-MM-DD 🎉

## 💥 Breaking Changes(重要)
- (該当があれば)何が壊れる?
- 影響:どんな利用者が該当?
- 対応:何をどう変える?
- 例:コード差分(短く)

## 🧭 Upgrade Guide(移行の最短ルート)
1. まずこれを変更 ✅
2. 次にここを変更 ✅
3. テストでここを見る ✅

## 🆕 Added(新機能)
- 何が増えた?どう嬉しい?✨
- 使い方サンプル(短く)

## 🔄 Changed(挙動変更)
- 変わった理由(1行でOK)
- 注意点(ハマりどころ)

## 🩹 Fixed(バグ修正)
- 直った症状(利用者目線)
- 再現条件(わかる範囲で)

## 🔐 Security(セキュリティ)
- 影響範囲(ざっくり)
- 推奨アクション(アップデートしてね等)

## ⚠️ Known Issues(既知の問題)
- 今回残ってる問題(あれば)

ポイントはこれ👇😊

  • Breaking が無いなら、セクション自体を消しちゃってOK(空欄は読みにくい)🙅‍♀️
  • Upgrade Guide は短くてもいいから“道”を作ると神扱いされる🧭✨
  • 読む人は急いでるので、1項目は2行以内を基本にすると優しい💞

6) CHANGELOG.md:Keep a Changelogのテンプレ 📚✨

## Changelog
All notable changes to this project will be documented in this file.
This project follows Semantic Versioning. 🔢

## [Unreleased]
## Added
-
## Changed
-
## Deprecated
-
## Removed
-
## Fixed
-
## Security
-

## [X.Y.Z] - YYYY-MM-DD
## Added
-
## Fixed
-
  • Unreleased を先頭に置くと、日々の追記→リリース時の移動がスムーズ🧺✨ (Keep a Changelog)
  • SemVerの「番号に意味を持たせる」前提があると、利用側が判断しやすいよ🔢😊 (Semantic Versioning)

7) NuGet向け:PackageReleaseNotes は “短文で刺す” 📦💘

NuGetは「リリースノートを毎回入れてね」って公式に推奨してるよ📌(特に Breaking / Features / Fixes) (Microsoft Learn)

さらに、.csprojの PackageReleaseNotes は NuGet pack のプロパティとして扱える(ReleaseNotesPackageReleaseNotes の対応もあるよ)📦✨ (Microsoft Learn)

理想の長さ 📏

  • 3〜8行くらい(長文はCHANGELOGやGitHub Releaseに逃がす)
  • 箇条書きで、利用者が行動できる情報だけを書く✅

.csproj 例(短いReleaseNotesを埋める)🛠️

<PropertyGroup>
<PackageReleaseNotes>
- Fixed: Null入力時に例外が出る問題を修正
- Added: TryParseFoo(out ...) を追加
- Deprecated: Foo() は次のメジャーで削除予定 → FooAsync() を使用
</PackageReleaseNotes>
</PropertyGroup>

コツ👇😊

  • NuGet側はリッチな表現が得意じゃないことがあるので(Markdown前提にしない)、プレーンな箇条書きが安定だよ🧘‍♀️ (Stack Overflow)
  • 詳細は GitHub Release / CHANGELOG に誘導(ただしここではURL直書きせず、リポジトリ側に整備するのが◎)

8) 自動生成を“下書き係”にする 🤖📝

GitHubの自動生成リリースノート(UI)✨

GitHubは、PR一覧・貢献者・フルCHANGELOGへのリンクを含む「自動生成ノート」を作れるよ🧠 (GitHub Docs) ただし、そのままだと利用者目線の“移行”が弱いことが多いので、次を足すのがコツ👇

  • Breaking の有無
  • Upgrade Guide(最短手順)
  • 影響範囲(誰が困る?)

GitHub CLI(コマンド)でも生成できる🧰

gh release create--generate-notes を付けると自動生成できるよ✨ (GitHub CLI)

gh release create v1.2.3 --generate-notes

9) 実習:v1.0.0 → v1.1.0 のリリースノートを書いてみよう 🧪💕

お題(変更セット)🧩

  • ✅ Added:TryParseFoo(string, out Foo) を追加
  • ✅ Fixed:空文字のときに投げてた例外を修正
  • ✅ Deprecated:Foo.Parse() を将来削除予定(代替は TryParseFoo

① GitHub Release用(完成例)📰

## v1.1.0 - 2026-02-04 🎉

## 🧭 Upgrade Guide
- 例外を避けたい場合は `Foo.Parse()` の代わりに `TryParseFoo(...)` を使ってね✅

## 🆕 Added
- `TryParseFoo(string, out Foo)` を追加✨(失敗を例外ではなく bool で扱えるよ)

## 🩹 Fixed
- 入力が空文字のときに例外が出る問題を修正🩹

## 🧓 Deprecated
- `Foo.Parse()` は将来のメジャーで削除予定📅 → `TryParseFoo(...)` へ移行してね🧭

② CHANGELOG.md用(完成例)📚

## [1.1.0] - 2026-02-04
## Added
- Added TryParseFoo(string, out Foo) for exception-free parsing.

## Fixed
- Fixed an exception when input is empty string.

## Deprecated
- Deprecated Foo.Parse(); use TryParseFoo instead.

③ NuGet PackageReleaseNotes用(短縮版)📦

- Added: TryParseFoo(string, out Foo)
- Fixed: empty string throws exception
- Deprecated: Foo.Parse() → use TryParseFoo

10) よくある事故あるある 😇💥(回避ワザつき)

  • 事故①:変更の羅列だけで、利用者の行動が書いてない → “対応:何を変える?” を1行でも入れる🧭✨

  • 事故②:Breaking が埋もれて、誰かが本番で爆発 → Breaking は最上段&太字相当の扱い(ここは見出しで強調)💥

  • 事故③:「変更しました」だけで、何が嬉しいか不明 → “症状が直った/何ができるようになった” を利用者目線で🩹✨

  • 事故④:Security修正がサラッと流される → “推奨アクション:今すぐ更新” を明記🔐 ※Visual Studio 2026 では Copilot 連携で依存関係の脆弱性対応支援もあるので、修正内容の把握にも役立つよ🤖🧰 (Microsoft Learn)


11) AI活用:そのまま使えるプロンプト集 🤖✨

A) 「PR一覧から、利用者向けリリースノート下書き」📰

以下は vX.Y.Z に含まれるPR一覧です。
Keep a Changelog の分類(Added/Changed/Deprecated/Removed/Fixed/Security)で整理し、
利用者が取るべき行動(Upgrade Guide)を最初に書いたリリースノート案を作ってください。
Breaking changes があれば先頭にまとめ、影響範囲と具体的な移行手順も書いてください。

## PR一覧
- ...

B) 「Breakingかどうか判定&理由づけ」💥

次の変更点が Breaking change に該当するか判定し、
(1) なぜそう言えるか
(2) 影響を受ける利用者の例
(3) 互換を保つ代替案(段階的廃止の案)
を箇条書きで出してください。

変更点:
- ...

C) 「NuGet向けに3〜8行へ圧縮」📦

次のリリースノートを NuGet の PackageReleaseNotes 向けに
3〜8行のプレーンな箇条書きに圧縮してください。
Breaking/Added/Fixed/Security の順で優先して残してください。

原文:
...

この章の成果物(提出物)📦✨

  • ✅ GitHub Release用:リリースノート 1つ(Upgrade Guide 付き)📰
  • ✅ CHANGELOG.md:Unreleased と新バージョン節を更新📚 (Keep a Changelog)
  • ✅ NuGet:PackageReleaseNotes(短文)📦 (Microsoft Learn)