リリースフロー
この章では、セマンティックバージョニング、CHANGELOG管理、タグ運用、リリースノートの自動生成について学びます。
セマンティックバージョニング
Section titled “セマンティックバージョニング”MAJOR.MINOR.PATCH例: 1.2.3バージョンの意味
Section titled “バージョンの意味”| 部分 | 意味 | いつ上げるか |
|---|---|---|
| MAJOR | メジャー | 後方互換性のない変更 |
| MINOR | マイナー | 後方互換性のある機能追加 |
| PATCH | パッチ | 後方互換性のあるバグ修正 |
1.0.0 → 1.0.1 # バグ修正1.0.1 → 1.1.0 # 新機能追加(後方互換あり)1.1.0 → 2.0.0 # 破壊的変更(後方互換なし)プレリリースとメタデータ
Section titled “プレリリースとメタデータ”# プレリリース(-に続けて識別子)1.0.0-alpha1.0.0-beta.11.0.0-rc.1
# メタデータ(+に続けて識別子)1.0.0+build.1231.0.0-beta.1+build.456バージョン比較
Section titled “バージョン比較”1.0.0 < 1.0.1 < 1.1.0 < 2.0.01.0.0-alpha < 1.0.0-beta < 1.0.0-rc.1 < 1.0.0CHANGELOG管理
Section titled “CHANGELOG管理”CHANGELOGの目的
Section titled “CHANGELOGの目的”- ユーザーに変更内容を伝える
- バージョン間の違いを明確に
- 破壊的変更への注意喚起
Keep a Changelog形式
Section titled “Keep a Changelog形式”# 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]
### Added- 新機能の説明
### Changed- 変更の説明
### Deprecated- 非推奨になった機能
### Removed- 削除された機能
### Fixed- バグ修正
### Security- セキュリティ修正
## [1.1.0] - 2024-01-15
### Added- ユーザー検索機能を追加 (#123)- ダッシュボードにグラフを追加 (#456)
### Fixed- ログインエラーを修正 (#789)
## [1.0.0] - 2024-01-01
### Added- 初回リリース
[Unreleased]: https://github.com/user/repo/compare/v1.1.0...HEAD[1.1.0]: https://github.com/user/repo/compare/v1.0.0...v1.1.0[1.0.0]: https://github.com/user/repo/releases/tag/v1.0.0CHANGELOGのベストプラクティス
Section titled “CHANGELOGのベストプラクティス”- ユーザー視点で書く: 技術的な詳細よりも影響を説明
- Issue/PRにリンク: 詳細を追跡可能に
- 破壊的変更を強調: 明確にマーク
- リリース日を記載: いつの変更かわかるように
# 軽量タグgit tag v1.0.0
# 注釈付きタグ(推奨)git tag -a v1.0.0 -m "Version 1.0.0"
# 過去のコミットにタグgit tag -a v1.0.0 abc1234 -m "Version 1.0.0"
# タグをプッシュgit push origin v1.0.0
# 全タグをプッシュgit push origin --tags# タグ一覧git tag
# パターンで絞り込みgit tag -l "v1.*"
# タグの詳細git show v1.0.0# ローカルタグを削除git tag -d v1.0.0
# リモートタグを削除git push origin --delete v1.0.0タグ命名規則
Section titled “タグ命名規則”推奨:v1.0.0 # vプレフィックス付き1.0.0 # プレフィックスなし
避ける:release-1.0.0 # 冗長version-1.0.0 # 冗長v1 # 不完全リリースノート自動生成
Section titled “リリースノート自動生成”GitHub Releasesの活用
Section titled “GitHub Releasesの活用”- リポジトリ → Releases → Draft a new release
- タグを選択または作成
- 「Generate release notes」をクリック
- 自動生成されたノートを編集
- Publish release
自動生成の設定
Section titled “自動生成の設定”.github/release.yml:
changelog: exclude: labels: - ignore-for-release - dependencies authors: - dependabot categories: - title: 🚀 New Features labels: - enhancement - feature - title: 🐛 Bug Fixes labels: - bug - bugfix - title: 📚 Documentation labels: - documentation - title: 🔧 Maintenance labels: - chore - maintenance - title: ⬆️ Dependencies labels: - dependencies - title: Other Changes labels: - "*"生成されるリリースノート例
Section titled “生成されるリリースノート例”## What's Changed
### 🚀 New Features* feat: ユーザー検索機能を追加 by @developer1 in #123* feat: ダッシュボードにグラフを追加 by @developer2 in #456
### 🐛 Bug Fixes* fix: ログインエラーを修正 by @developer1 in #789
### 📚 Documentation* docs: READMEを更新 by @developer3 in #101
**Full Changelog**: https://github.com/user/repo/compare/v1.0.0...v1.1.0自動リリースワークフロー
Section titled “自動リリースワークフロー”タグプッシュでリリース作成
Section titled “タグプッシュでリリース作成”name: Release
on: push: tags: - 'v*'
jobs: release: runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v4
- name: Create Release uses: softprops/action-gh-release@v1 with: generate_release_notes: true draft: false prerelease: ${{ contains(github.ref, '-') }}standard-versionによる自動化
Section titled “standard-versionによる自動化”npm install --save-dev standard-version{ "scripts": { "release": "standard-version", "release:minor": "standard-version --release-as minor", "release:major": "standard-version --release-as major", "release:patch": "standard-version --release-as patch" }}# 実行すると:# 1. package.jsonのバージョンを更新# 2. CHANGELOG.mdを更新# 3. コミットを作成# 4. タグを作成npm run release
# プッシュgit push --follow-tags origin mainsemantic-releaseによる完全自動化
Section titled “semantic-releaseによる完全自動化”name: Release
on: push: branches: [main]
jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0
- uses: actions/setup-node@v4 with: node-version: 20
- name: Install dependencies run: npm ci
- name: Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-releaseコミットメッセージからバージョンを自動決定:
feat: → MINOR バージョンアップfix: → PATCH バージョンアップBREAKING CHANGE: → MAJOR バージョンアップ中級者向けTips
Section titled “中級者向けTips”リリースブランチの活用
Section titled “リリースブランチの活用”# Git Flowスタイルmain ← release/v1.2.0 ← develop
# リリース前の調整git checkout -b release/v1.2.0 develop# バグ修正、バージョン更新等git checkout maingit merge release/v1.2.0git tag v1.2.0複数バージョンのサポート
Section titled “複数バージョンのサポート”# バージョン1.xと2.xを並行サポート# 1.x系のセキュリティ修正git checkout v1.xgit cherry-pick <commit>git tag v1.2.5git push origin v1.2.5
# 2.x系には別途対応git checkout main# ...リリース前チェックリスト
Section titled “リリース前チェックリスト”## リリースチェックリスト
### 準備- [ ] すべてのPRがマージ済み- [ ] CIが全てグリーン- [ ] CHANGELOG.mdを更新
### 確認- [ ] バージョン番号は正しいか- [ ] 破壊的変更の場合、MAJORを上げたか- [ ] リリースノートの内容は正確か
### リリース後- [ ] デプロイが成功したか確認- [ ] 主要機能の動作確認- [ ] 関係者への通知リリース通知の自動化
Section titled “リリース通知の自動化”# Slack通知- name: Notify Slack uses: 8398a7/action-slack@v3 with: status: custom custom_payload: | { "text": "🚀 New release: ${{ github.ref_name }}\nhttps://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}| 項目 | 内容 |
|---|---|
| バージョニング | セマンティックバージョニング(MAJOR.MINOR.PATCH) |
| CHANGELOG | Keep a Changelog形式、ユーザー視点で記載 |
| タグ | 注釈付きタグ、vプレフィックス推奨 |
| リリースノート | GitHub自動生成 + release.yml設定 |
リリースフローのベストプラクティス
Section titled “リリースフローのベストプラクティス”- セマンティックバージョニングを遵守: 破壊的変更は明確に
- CHANGELOGを更新: 自動化しても最終確認は人の目で
- タグで履歴を残す: いつでも過去バージョンに戻れるように
- 自動化を活用: 手動ミスを減らし、一貫性を保つ
- 通知を設定: 関係者にリリースを周知
次の章では、ブランチ保護ルールについて学びます。
Q1. セマンティックバージョニングのMAJOR.MINOR.PATCHで、後方互換性のない変更を行う場合、どれを上げますか?
Q2. CHANGELOGファイルのKeep a Changelog形式で、破壊的変更を示すセクションはどれですか?
Q3. GitHub Releasesで自動生成されるリリースノートの設定ファイルはどれですか?