第1章 バージョンで何が変わるの?📦😵💫
(SemVer+互換ポリシー:はじめの一歩🌱✨)
1) 今日できるようになること🎯✨

この章のゴールはこれだけでOKだよ〜😊💕
- バージョン番号が「作者の都合」じゃなくて、**利用者を安心させる“約束”**だとわかる🤝✨
- 「互換性」「契約」「約束」が、なぜ設計の話になるのかが腹落ちする🧠🧩
- SemVer(MAJOR/MINOR/PATCH)は、**“約束を共有するためのルール”**だと説明できる📘✨ (Semantic Versioning)
2) まず最初にあるある💥「更新したら壊れた」
ある日のあなた(利用者側)👩💻🍌
- いつも通り依存パッケージを更新
- テスト回したら…落ちる😱
- あるいは、動くけど結果が違う…もっと怖い😇🌀
ここで一番つらいのは、**「何が起きたのか予想できない」**ことなんだよね🥲 だからこそ、バージョン番号が役に立つように設計されてるの✨
3) バージョン番号って、結局なに?🔢✨
バージョン番号は、ただの飾りじゃなくて…
**「この変更は安全だよ / 注意してね / 壊れるよ」**を 利用者に伝えるための“サイン”🏷️👀
SemVerでは、MAJOR.MINOR.PATCH の3つに意味を持たせて、**互換性(後方互換)**の有無を伝えるよ📘✨
- MAJOR:互換性を壊す変更(利用者が困る可能性大)💔
- MINOR:互換性を保った機能追加✨
- PATCH:互換性を保ったバグ修正🐛 …というのが基本ルールだよ〜 (Semantic Versioning)
4) 「互換性」ってなに?🤝🔍(超やさしく)
互換性(後方互換)がある✅
古い使い方のままでも、だいたい動く / コンパイル通る / 意味が同じ✨
互換性が壊れる❌(破壊的変更)
今までの使い方だと、動かない / コンパイル通らない / 意味が変わる😱
ここで大事なのは、“作者にとって些細”でも、利用者には致命傷ってこと💥 「1行変えれば直るじゃん」は、利用者が1000人いたら1000回の悲鳴になるよ〜😭📣
5) 「契約」「約束」って何のこと?📜✨
ここで言う“契約”は、法的な話じゃなくて、開発上の約束だよ😊
- 作者:「この範囲は変えない(or 変えるならバージョンで知らせる)」
- 利用者:「じゃあ安心してそれに依存するね」
この“約束の対象”が、次に出てくる超重要ワード👇
✅ 公開API(Public API)📣
利用者が「使っていい」と信じて依存する部分のこと。 たとえば…
- export されている関数・クラス・型
- 設定オプション
- イベント名
- CLIコマンド
- 返ってくるデータ形(レスポンス構造) みたいなやつ🧰✨
SemVerは「公開APIの互換性」を軸にして考えるのが基本だよ📘 (Semantic Versioning)
6) ここで現実の小ネタ🧂(TypeScriptはちょい特殊)
TypeScript本体(コンパイラ)の世界では、一般的なSemVerの感覚とズレることがあるよ〜⚠️ 「minorでも破壊が入りうる」前提で扱おう、という整理が紹介されてるよ📌 (Semver TS)
※この教材では「あなたが作る/配布するTSライブラリ」を、SemVerの気持ちよさで運用できるようになるのがゴールだよ🧩✨(TypeScript本体の事情で“依存側が揺れる”話は、後半で事故らないために触れるよ〜🛡️)
7) ミニ演習📝✨(10〜15分)
演習:自分が使ってるライブラリを1つ選ぼう📦
例:zod / axios / dayjs / lodash など(好きなのでOK)💕
手順👣
-
そのライブラリの「利用者として頼ってるもの」を思い出す🤔
-
「公開APIっぽいもの」を3つ書く📝(関数名・型名・オプション名など)
-
それぞれに、ひとこと理由を書く
- 「これが消えたら困る」
- 「ここが変わったらコード直す」
- 「戻り値の形が変わると影響大」…みたいに👀
書き方例(こんな雰囲気でOK)💡
- API①:〇〇関数(理由:呼び出し側が直撃)
- API②:〇〇型(理由:型エラーで一斉に止まる)
- API③:〇〇オプション(理由:挙動が変わると怖い)
8) AI活用🤖✨(そのままコピペ用)
目的:あなたの「公開APIっぽいもの」を言語化してもらう🗣️✨
プロンプト①:公開API候補を出してもらう🧠
「私は “(ライブラリ名)” を使っています。利用者が依存しやすい“公開API”候補を10個挙げて、なぜそれが公開APIと言えそうかも一言ずつ説明して。初心者向けにやさしい口調で。」
プロンプト②:あなたの3つをレビューしてもらう🔍
「次の3つを“公開APIっぽい”観点でレビューして。利用者が困る度合い(大/中/小)もつけて。
- (あなたのメモ①)
- (あなたのメモ②)
- (あなたのメモ③)」
プロンプト③:READMEに貼れる短い説明に整える📌
「次の文章をREADME向けに、短く・わかりやすく整えて。箇条書き中心で。 (あなたの説明文)」
9) まとめ🌸(この章で一番大事な1行)
バージョン番号は、利用者に向けた“安心のサイン”で、公開APIの約束を伝えるためにある📦🤝✨
SemVerは、その約束を「MAJOR/MINOR/PATCH」に落とし込む基本ルールだよ📘 (Semantic Versioning)
10) 次章へのワクワク予告🎬✨
次は、いよいよ MAJOR/MINOR/PATCH が何を意味するのかを、変更例で体感していくよ〜🔢🎯 「この変更、どれ上げる?」クイズがめっちゃ楽しいやつ😆💕
(演習で選んだライブラリ、次章でも使うと理解が爆速になるよ🚀✨)