Skip to main content

第01章:契約ってなに?🤝✨

1. 「契約」=“利用者に約束すること”だよ🧾💞

プログラムって、だいたい 誰かが使う よね?👥 その「使う人(=利用者)」に対して、

  • どう呼び出せる?📞
  • 何を渡せばいい?📦
  • 何が返ってくる?🎁
  • どんなルールがある?📏

…みたいな “約束” をまとめたものが 契約(Contract) だよ🤝✨


2. 契約がある場所、めっちゃ多い😳🌈

Contract Locations

「契約=API」って思いがちだけど、もっと広いよ〜!

  • 関数の契約:引数・戻り値・副作用(ログ出す/保存する等)🧩
  • モジュール/ライブラリの契約:外に公開するものだけが約束🎭
  • データ(JSONなど)の契約:必須/任意、型、意味(例:statusの値の意味)🧾
  • HTTP APIの契約:URL、メソッド、リクエスト/レスポンス、ステータス🌐
  • イベントの契約:イベント名、payload、意味、順番(あるなら)📣⏱️

この教材は、こういう契約を 壊さず育てる のがテーマだよ🌱✨


3. “実装”と“契約”は別もの!🚪🏠

ざっくり言うとこう👇

  • 契約:外から見える「入口のルール」🚪
  • 実装:中の「作り方」🏠

Implementation vs Contract

契約をちゃんと切り分けると、

  • 中身は改善しやすい(速くできる・整理できる)⚡🧹
  • 利用者が安心して使える(壊れない)😌🛡️

ってなるよ〜!


4. TypeScriptだと「型」が契約の入口になる🟦🧩

TypeScriptは、契約を で表しやすいのが強み✨ たとえば「ユーザーを取得する関数」の契約👇

export type User = {
id: string;
name: string;
nickname?: string; // 任意(なくてもOK)
};

export async function fetchUser(id: string): Promise<User> {
// ここは実装(中身)
const res = await fetch(`/api/users/${id}`);
return await res.json();
}

このコードで “契約” っぽいのはどこ?🤔💭

  • 公開されてる型(User) 🧾
  • 公開されてる関数名(fetchUser) 📛
  • 引数(id: string) 📦
  • 戻り値(Promise 🎁

こういう「外に見えるもの」が、利用者への約束になりやすいよ🤝✨


5. 契約は「最小でいい」💡✂️

契約は大きいほど、後で変えるのが大変😵‍💫💦 なので最初は 公開するものを小さくする のがコツ!

  • まずは “これだけ約束すれば使える” を目指す🎯
  • 迷ったら 公開しない(後から公開はできる)🙈✨

6. 「契約っぽいもの」を見分けるチェックリスト✅🔍

次のどれかに当てはまったら、それは契約の可能性が高いよ!

  • export してる(外から触れる)📤
  • 名前が付いてる(他人が呼ぶ)📛
  • 引数/戻り値/形式が決まってる📦🎁
  • 「これを渡したらこうなる」が決まってる⚙️
  • 変更したら誰かが困る気がする😨

7. ミニ演習:自分の過去コードから「契約っぽい」を3つ探す🔍📝

やることはシンプル!✨

  1. 自分のプロジェクトを開く📂

  2. まずはこのへんを検索してみてね👇

    • export
    • public
    • APIっぽいフォルダ名(api / routes / services など)
    • JSONの返却っぽい所(res.json / return { ... } など)
  3. 「これって利用者への約束だな〜」って思うものを 3つメモ📝💞

メモのテンプレ(これでOK!)👇

  • ① これは何の契約?(関数 / データ / API / イベント)🧩🧾🌐📣
  • ② 利用者は何を渡す?📦
  • ③ 利用者は何を期待する?🎁
  • ④ もし変えたら誰が困りそう?😱

8. AI活用:契約を“言語化”するプロンプト集🧠🤖✨

コードを見ても「約束」を言葉にするのって、最初むずいよね🥺 AIにはここを手伝ってもらおう!

8.1 まずは契約を箇条書きにしてもらう📌

  • 「この関数(またはモジュール)の利用者との約束を、箇条書きで5つにして。引数・戻り値・副作用も入れて」

8.2 “利用者タイプ”を想像してもらう👥

  • 「このAPI(または関数)を使う人を3タイプ想像して、何を期待してるか書いて」

8.3 仕様テンプレを作ってもらう🧾

  • 「この関数の契約を、短い仕様テンプレ(入力・出力・例・注意点)にして。やさしい口調で」

8.4 “壊れやすいポイント”を先に教えてもらう⚠️

  • 「この契約で、変更すると破壊的になりやすい点を3つ教えて」

9. 2026年2月の“最新メモ”🗓️✨

この章は概念が中心だけど、学習中に見るツール周りは新しいほどラクだよ〜💻💞

  • TypeScriptの最新安定版は 5.9.3(GitHub ReleasesのLatest) 🟦✨ (GitHub)
  • Node.jsは v24がActive LTS(安定運用向け)🟢 (Node.js)
  • VS Codeは 1.108 が利用可能(更新ページ上の表示)🧩 (Visual Studio Code)
  • ちなみにTypeScriptは将来に向けて “ネイティブ版プレビュー” の動きもあるよ(開発体験が速くなる系)⚡ (Microsoft Developer)

10. ちいさな理解チェック🎓✅

Q1:契約ってなに?(一言で)🤝 Q2:契約と実装の違いは?🚪🏠 Q3:自分のコードで「契約っぽい」と思ったものを1つ、入力と出力で説明してみて📦🎁


まとめ🌸✨

  • 契約=利用者への約束🤝
  • 契約は 関数・データ・API・イベント などいろんな所にある🌈
  • TypeScriptでは 型が契約の入口 になりやすい🟦🧩
  • 契約は 小さく、言語化は AIで加速🧠🤖⚡