第01章:契約ってなに?🤝✨
1. 「契約」=“利用者に約束すること”だよ🧾💞
プログラムって、だいたい 誰かが使う よね?👥 その「使う人(=利用者)」に対して、
- どう呼び出せる?📞
- 何を渡せばいい?📦
- 何が返ってくる?🎁
- どんなルールがある?📏
…みたいな “約束” をまとめたものが 契約(Contract) だよ🤝✨
2. 契約がある場所、めっちゃ多い😳🌈

「契約=API」って思いがちだけど、もっと広いよ〜!
- 関数の契約:引数・戻り値・副作用(ログ出す/保存する等)🧩
- モジュール/ライブラリの契約:外に公開するものだけが約束🎭
- データ(JSONなど)の契約:必須/任意、型、意味(例:statusの値の意味)🧾
- HTTP APIの契約:URL、メソッド、リクエスト/レスポンス、ステータス🌐
- イベントの契約:イベント名、payload、意味、順番(あるなら)📣⏱️
この教材は、こういう契約を 壊さず育てる のがテーマだよ🌱✨
3. “実装”と“契約”は別もの!🚪🏠
ざっくり言うとこう👇
- 契約:外から見える「入口のルール」🚪
- 実装:中の「作り方」🏠

契約をちゃんと切り分けると、
- 中身は改善しやすい(速くできる・整理できる)⚡🧹
- 利用者が安心して使える(壊れない)😌🛡️
ってなるよ〜!
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つ探す🔍📝
やることはシンプル!✨
-
自分のプロジェクトを開く📂
-
まずはこのへんを検索してみてね👇
- export
- public
- APIっぽいフォルダ名(api / routes / services など)
- JSONの返却っぽい所(res.json / return { ... } など)
-
「これって利用者への約束だな〜」って思うものを 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で加速🧠🤖⚡