Conventional CommitsとSemantic Release
Conventional Commitsがsemantic-releaseで自動バージョニングとchangelog生成を可能にする方法を学びます。コミットからリリースまでの完全なワークフローを解説します。
Best Practices
詳細な説明
Conventional Commitsによる自動リリース
Conventional Commitsの主な動機の1つは、完全に自動化されたリリースワークフローを可能にすることです。semantic-releaseのようなツールはコミット履歴を分析して次のバージョン番号を決定し、changelogを生成し、手動介入なしにリリースを公開します。
仕組み
- 前回のリリースからのコミットを分析
- コミットタイプに基づいてバージョンバンプを決定:
fix:→ patch (1.0.0 → 1.0.1)feat:→ minor (1.0.0 → 1.1.0)BREAKING CHANGEまたは!→ major (1.0.0 → 2.0.0)
- コミットメッセージからchangelogを生成
- GitタグとGitHubリリースを作成
- npm、PyPIなどにパッケージを公開
セットアップ
npm install -D semantic-release
{
"release": {
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
"@semantic-release/git"
]
}
}
コミットからリリースへのマッピング
| 前回リリースからのコミット | 次のバージョン |
|---|---|
fix: handle null input |
Patch: 1.2.3 → 1.2.4 |
feat: add export feature |
Minor: 1.2.3 → 1.3.0 |
feat!: redesign API |
Major: 1.2.3 → 2.0.0 |
fix: A + feat: B |
Minor: 1.2.3 → 1.3.0 |
fix: A + feat!: B |
Major: 1.2.3 → 2.0.0 |
生成されるChangelog
semantic-releaseはコミットをタイプ別にグループ化:
## [1.3.0] - 2024-03-15
### Features
- **auth:** add OAuth2 login flow (#234)
- **api:** add batch processing endpoint (#256)
### Bug Fixes
- **parser:** handle escaped quotes (#245)
- **ui:** fix layout shift on mobile (#251)
リリースをトリガーしないタイプ
以下のコミットタイプはリリースをトリガーしません:
docs:— ドキュメントのみstyle:— フォーマット変更refactor:— 動作変更なしtest:— テスト追加chore:— メンテナンスタスクci:— CI設定build:— ビルドシステムの変更
これにより、ユーザー向けの変更がある場合にのみリリースが行われます。
ユースケース
mainへのマージが自動的に次のバージョンを決定し、changelogを生成し、GitHubリリースを作成し、npmパッケージを公開する、完全に自動化されたリリースパイプラインをセットアップしたいと考えています。Conventional Commitsがこのプロセスをどのように推進するか、各コミットタイプがバージョニングにとって何を意味するかを理解する必要があります。