🏷️

Semantic Versioning入門:patch / minor / major の違いと判断フロー

に公開
TL;DR

MAJOR.MINOR.PATCH の 3 ケタは “後方互換性” を軸に決める。

  • 互換を壊す → major
  • 互換を保った機能追加 → minor
  • バグ修正やドキュメント更新 → patch

はじめに

最近はClaude Codeを活用したAI駆動開発を主に行っているのですが、Git worktreeを使ったパラレル開発を効率化(支援)するCLIツール開発したいなと思い、現在開発中なのですが、開発過程でソフトウェアのバージョン番号について学んだため、備忘録として記事にまとめます。

1. Semantic Versioning とは?

ソフトウェアのバージョン番号を X.Y.Z(メジャー・マイナー・パッチ)で管理し、
数値だけで互換性の有無を伝えるルールです。npm や Maven など主要エコシステムが採用しています。

役割 互換性への影響 代表例
MAJOR 破壊的変更 後方互換性を壊す API 変更 1.x → 2.0.0
MINOR 機能追加 互換性 維持 した新機能 1.3.0 → 1.4.0
PATCH バグ修正 挙動を変えない修正・改善 1.4.2 → 1.4.3

0.x 系は「試験段階」とみなし、互換保証が緩いのが通例。

2. 判断フロー

変更 対応バージョン
scj delete コマンドを削除 major (2.0.0)
--json オプションを追加 minor (1.1.0)
CLI 出力の typo 修正 patch (1.0.1)

3. Changesets での指定方法

  1. コマンド実行
pnpm changeset            # 対話式プロンプト
  1. 指定例
---
'shadow-clone-jutsu': minor
---

Add GitHub Projects integration

マージすると自動で scj@1.1.0 タグ & GitHub Release が生成されます。

4. よくある誤解

誤解 理由
「見た目が変わったら major」 UI の非互換のみが対象 内部リファクタは影響なし
「大きな実装量=major」 量ではなく互換性 1 行の breaking change でも major
「0.x は自由に壊して OK」 ユーザーがいるなら慎重に プロダクション利用例も多い

5. まとめ

  • 互換性の有無で patch / minor / major を決める
  • 自動化ツール(Changesets / Release Please)を使うと運用が楽
  • ドキュメント・CI もバージョンルールに合わせて更新しよう

バージョン番号は “契約” です。破壊的変更をしたら堂々と major を上げましょう!

Discussion