Contractの推論可能性

良いContractの条件——I/Fから内部のStructureが推察可能であること

なぜ重要か

ソフトウェアの利用者はContractを通じて内部のStructureを推察し、「この状態ならこう相互作用できるはず」と推論する。

Contract が Structure を推察可能にする
→ 推察に基づいて利用する
→ 推察通りに動く(= 期待通り)
→ それが Requirements と合致する(= 正しい)

この経路の起点が推論可能性であり、推論可能性が低ければ、利用者は試行錯誤やドキュメント参照に頼ることになる。

推論可能性を高める手段

型の表現力が最も直接的な手段。

// 推論しやすい — 型がStructureを伝えている
type Order =
  | { status: "draft" }
  | { status: "paid"; paidAt: Date }
  | { status: "shipped"; paidAt: Date; shippedAt: Date };

// 推論しにくい — Structureが隠れている
type Order = {
  status: string;
  paidAt: Date | null;
  shippedAt: Date | null;
};

前者は型を見ただけで状態遷移の構造が推察できる。これはMake Illegal States Unrepresentableの原則と直結する。

「ドメインの認知構造がコードに反映されている」こととの関係

ドメイン知識を持つ観測者がI/Fを見たとき、自分のドメイン理解からStructureを正しく推察できる状態——これがドメインとコードの同型性であり、FBループが速い理由でもある。

認知的距離との関係

推論可能性が高い = ドメイン知識を持つ観測者がI/Fから内部Structureを正しく推察できる = 送受信者の認知スキーマが一致している状態。つまり推論可能性とは、認知的距離を最小化するContract設計の指標。認知フィードバック設計においてフィードバック速度を規定する変数でもある。

関連