セマンティックバージョニング
MAJOR.MINOR.PATCH の 3 桁でソフトウェアの互換性を表現するバージョニング規約
開発プラクティスパッケージ管理
セマンティックバージョニングとは
セマンティックバージョニング (SemVer) は、MAJOR.MINOR.PATCH の 3 桁でソフトウェアの互換性を表現するバージョニング規約である。Tom Preston-Werner (GitHub 共同創業者) が策定。
バージョン番号の意味
MAJOR.MINOR.PATCH
2. 1. 3
MAJOR: 後方互換性のない変更 (破壊的変更)
MINOR: 後方互換性のある機能追加
PATCH: 後方互換性のあるバグ修正
具体例
| 変更内容 | バージョン変更 |
|---|---|
| バグ修正 | 1.0.0 → 1.0.1 |
| 新機能追加 (既存 API は変更なし) | 1.0.1 → 1.1.0 |
| API の破壊的変更 | 1.1.0 → 2.0.0 |
| セキュリティパッチ | 2.0.0 → 2.0.1 |
npm でのバージョン指定
{
"dependencies": {
"express": "^4.18.0",
"lodash": "~4.17.0",
"typescript": "5.3.3"
}
}
| 記法 | 意味 | 許容範囲 |
|---|---|---|
^4.18.0 |
MINOR, PATCH の更新を許可 | 4.18.0 〜 4.x.x |
~4.17.0 |
PATCH の更新のみ許可 | 4.17.0 〜 4.17.x |
5.3.3 |
完全固定 | 5.3.3 のみ |
破壊的変更の例
// v1: 文字列を返す
function getUser(id: string): string { ... }
// v2: オブジェクトを返す (破壊的変更 → MAJOR を上げる)
function getUser(id: string): User { ... }
プレリリースバージョン
1.0.0-alpha.1 → アルファ版
1.0.0-beta.1 → ベータ版
1.0.0-rc.1 → リリース候補
1.0.0 → 正式リリース
0.x.x の特別ルール
0.x.x: 初期開発段階
→ MINOR の変更でも破壊的変更が許容される
→ 1.0.0 で安定版を宣言
Conventional Commits との連携
feat: 新機能追加 → MINOR を上げる
fix: バグ修正 → PATCH を上げる
feat!: 破壊的変更 → MAJOR を上げる
BREAKING CHANGE: → MAJOR を上げる
自動的にバージョンを決定し、CHANGELOG を生成できる。
さらに掘り下げるなら関連書籍が参考になる。