契約(Contract)設計(互換性・バージョニング)30章アウトライン🌸✨
第1章:契約ってなに?🤝✨
- ねらい:契約=「利用者に約束すること」をつかむ
- 学ぶ:契約の例(関数API/HTTP API/JSON/イベント)
- ミニ演習:自分の過去コードから「これは契約っぽい」を3つ探す🔍
- AI活用:「この機能の“利用者との約束”を箇条書きにして」 🧠🤖
第2章:互換性が壊れると何が起きる?😱💥
- ねらい:破壊変更の怖さを“具体例”で理解
- 学ぶ:壊れ方(ビルド落ち/実行時エラー/挙動が変わる)
- ミニ演習:変更1つでどんな人が困るか想像メモ📝
- AI活用:「この変更で困る利用者を3タイプ想像して」 👥🤖
第3章:契約の種類を整理しよう🗂️🌈
- ねらい:何に契約があるか“分類できる”ように
- 学ぶ:コード契約/データ契約/運用契約(サポート期間など)
- ミニ演習:自作アプリを契約マップにする🗺️
- AI活用:「このアプリに必要な契約一覧を作って」 🧾🤖
第4章:TypeScriptの型は契約の入り口🟦🧩
- ねらい:型=契約(でも万能じゃない)を理解
- 学ぶ:型で守れること/守れないこと(実行時)
- ミニ演習:型だけで防げない例を1つ書く✍️
- AI活用:「この型の弱点(実行時)を教えて」 ⚠️🤖
第5章:公開API面(Public Surface)を決める🎭🚪
- ねらい:どこを“約束”として公開するか決める
- 学ぶ:Public/Private、internalの考え方
- ミニ演習:公開関数を3つだけ選ぶ(他は隠す)🙈
- AI活用:「公開すべき最小APIを提案して」 ✨🤖
第6章:“互換性”の種類:後方互換・前方互換🔁🧠
- ねらい:互換の言葉で会話できるように
- 学ぶ:Backward/Forward、互換の方向の勘所
- ミニ演習:変更例を「どっち互換?」分類📌
- AI活用:「これは後方互換?理由も」 🧑🏫🤖
第7章:SemVer(X.Y.Z)をやさしく理解する🔢✨
- ねらい:MAJOR/MINOR/PATCHの判断ができる
- 学ぶ:破壊変更=MAJOR、追加=MINOR、修正=PATCH
- ミニ演習:10個の変更をバージョン判定クイズ化🎮
- AI活用:「変更例を10個出して、答えもつけて」 🧩🤖
第8章:“破壊変更”の定義を自分の教材に固定する📏🧾
- ねらい:何を破壊と呼ぶかブレなくする
- 学ぶ:公開API、戻り値、例外、データ形式の変更は危険
- ミニ演習:自分用「破壊変更リスト」作成📝
- AI活用:「この変更は破壊?ポリシー文章にして」 📜🤖
第9章:互換ポリシーを文章にする📜🖊️
- ねらい:契約を“運用”に落とす
- 学ぶ:サポート期間/非推奨期間/移行ガイドの方針
- ミニ演習:A4 1枚のポリシー案を書く🧡
- AI活用:「やさしい口調で短く整えて」 😊🤖
第10章:後方互換の基本パターン集🧰🌟
- ねらい:互換を保つ“型”を覚える
- 学ぶ:追加はOK/削除はNG寄り/意味変更は危険
- ミニ演習:安全な追加案・危険な変更案を作る⚖️
- AI活用:「互換を守る書き方に直して」 🔧🤖
第11章:段階的に変える(移行設計)🪜⏳
- ねらい:一気に変えない設計ができる
- 学ぶ:旧新併存、フラグ、段階リリース
- ミニ演習:Step1〜Step4の移行計画を書く🗓️
- AI活用:「段階移行プランを4ステップで」 🧭🤖
第12章:Deprecation(非推奨)を上手に出す🚧📣
- ねらい:利用者に優しい“廃止の礼儀”
- 学ぶ:告知→移行案内→期限→削除
- ミニ演習:非推奨メッセージ例を作る🧡
- AI活用:「女子大生向けにやさしく注意書きして」 🌸🤖
第13章:npmパッケージ契約①:公開API面の設計📦🚪
- ねらい:ライブラリの“入口”を小さく保つ
- 学ぶ:公開入口を絞る、内部を自由に変えられるようにする
- ミニ演習:公開関数を3つに制限する案を作る✂️
- AI活用:「公開面を最小化する設計案を」 🧠🤖
第14章:npmパッケージ契約②:配布の契約(入口・型・exports)📦🧾
- ねらい:配布で壊しがちなポイントを知る
- 学ぶ:エントリポイント、型の出し方、設定ミスの事故例
- ミニ演習:配布チェックリストを作る✅
- AI活用:「この配布構成の事故ポイントを列挙して」 🧯🤖
第15章:依存の向きと契約(崩れない土台)🧱🧭
- ねらい:契約が守られる構造をつくる
- 学ぶ:中心(方針)を外(詳細)から守る考え方
- ミニ演習:依存が逆向きになってる箇所を探す🔍
- AI活用:「依存を内側に寄せるリファクタ案」 🔁🤖
第16章:エラーも契約①:エラーの分類と境界😵💫➡️🙂
- ねらい:エラーを仕様として扱えるように
- 学ぶ:ドメインエラー/入力エラー/インフラエラー
- ミニ演習:エラー一覧(3分類)を作る📛
- AI活用:「この機能のエラーを分類して」 🗂️🤖
第17章:エラーも契約②:利用者に優しい返し方🎁✨
- ねらい:呼び出し側が直しやすいエラーにする
- 学ぶ:メッセージ、コード、原因、対処のガイド
- ミニ演習:悪いエラー→良いエラーに書き換え✍️
- AI活用:「直し方が分かるエラー文にして」 🧁🤖
第18章:データ契約①:JSONの約束(形・必須・任意)🧾🤝
- ねらい:データの契約を言語化できる
- 学ぶ:必須/任意、nullable、デフォルト値
- ミニ演習:JSONの仕様を“文章”で書く📜
- AI活用:「このJSON仕様を読みやすく整理して」 ✨🤖
第19章:データ契約②:実行時バリデーション(型だけじゃ足りない)🚫✅
- ねらい:実行時に守る必要を体感
- 学ぶ:境界でチェック、内部は信頼(メリハリ)
- ミニ演習:境界チェックの観点表を作る📋
- AI活用:「この入力で危ないケースを挙げて」 ⚠️🤖
第20章:データ進化①:安全な変更・危険な変更🧬⚖️
- ねらい:変更の安全度を判定できる
- 学ぶ:追加は比較的安全/削除・型変更は危険寄り
- ミニ演習:変更パターンをOK/注意/NGで分類📊
- AI活用:「この変更の互換性リスクを評価して」 🔍🤖
第21章:データ進化②:移行(migration)と併存の設計🪜⏳
- ねらい:古いデータも新しいデータも扱える
- 学ぶ:変換、デフォルト補完、段階移行
- ミニ演習:移行ステップを4段にする🗓️
- AI活用:「移行手順を利用者視点で書いて」 🧡🤖
第22章:HTTP API契約①:骨格(入力/出力/ステータス)🌐🦴
- ねらい:API契約の最小セットを固める
- 学ぶ:エンドポイント、リクエスト、レスポンス、ステータス
- ミニ演習:1つのAPI仕様をテンプレで書く🧾
- AI活用:「API仕様のたたき台を作って」 🛠️🤖
第23章:HTTP API契約②:認証とエラーの契約🔐📣
- ねらい:実運用で困らない設計にする
- 学ぶ:認証失敗・権限不足・入力ミスの統一
- ミニ演習:エラー形式テンプレを作る📛
- AI活用:「エラー形式を統一する案を」 ✅🤖
第24章:APIバージョニング①:戦略の選び方(URL/ヘッダ等)🧭🔁
- ねらい:自分の用途に合う方式が選べる
- 学ぶ:方式のメリデメ、移行のしやすさ
- ミニ演習:自分のアプリに最適な方式を選び理由を書く✍️
- AI活用:「この条件ならどの方式が良い?」 🤔🤖
第25章:APIバージョニング②:移行の運用(旧版サポート)⏳🧡
- ねらい:バージョン運用で炎上しない
- 学ぶ:サポート期限、告知、メトリクス(利用率)
- ミニ演習:廃止スケジュールを作る🗓️
- AI活用:「移行案内の文章を作って」 📣🤖
第26章:イベント契約(非同期の約束)📣⏱️
- ねらい:イベントの契約を壊さず育てる
- 学ぶ:イベント名、payload、バージョン、互換
- ミニ演習:イベント仕様テンプレを作る🧾
- AI活用:「イベント名を自然な“過去形の事実”で」 🧠🤖
第27章:古いクライアントを殺さないリリース🧟♀️➡️🙂
- ねらい:サーバ先行/クライアント先行でも壊れない
- 学ぶ:段階リリース、併存、フォールバック
- ミニ演習:時系列(Day1〜Day7)でリリース計画🗓️
- AI活用:「この順番なら安全?チェックして」 ✅🤖
第28章:互換性テスト①:観点(何が壊れやすい?)🔍🧪
- ねらい:“どこを見るべきか”が分かる
- 学ぶ:公開API、戻り値、例外、データ形式、意味変更
- ミニ演習:変更→影響→テスト観点の表を作る📋
- AI活用:「この変更のテスト観点を列挙して」 🧠🤖
第29章:互換性テスト②:最小テスト構成(型+ユニット)✅🧪
- ねらい:小さく始めて、確実に守る
- 学ぶ:型チェックの守備範囲、ユニットテストの守備範囲
- ミニ演習:重要な契約を3つテスト対象に選ぶ🎯
- AI活用:「この契約をテストにするとしたら?」 🧩🤖
第30章:CDC入門+CI+運用まとめ(最終章)🎓✅✨
-
ねらい:契約を“守り続ける仕組み”まで完成させる
-
学ぶ(まとめ):
- Consumer視点の期待(CDCの入口)🚪
- CIで止めるチェック項目(型/テスト/互換/変更履歴)🚦
- CHANGELOG・リリースノート・ADRで伝える📰📚
-
ミニ演習(キャップストーン):
- 1つ小さなAPI/ライブラリを想定して
- 契約(仕様)→互換ポリシー→移行計画→テスト観点→リリースノート を1セット作る📦🧾
-
AI活用:
- 「契約チェックリストでレビューして。改善点も」 🔍🤖
- AI拡張は、GitHubやOpenAI系のものを“レビュー係”として使う想定でOKだよ😊✨
- VS CodeはMicrosoftのエディタ前提で統一🎀