ここまでの章では、

  • 設計とは判断を閉じ込める行為であること
  • 判断は必ず変わること
  • 壊れやすい設計は、判断の偏りから生まれること

を見てきました。

ここで、設計に対する前提を一段階更新します。

設計は、壊れないようにする行為ではありません。 壊れることを前提に、回収できる形にしておく行為です。

この章では、 「壊れる前提」を受け入れたときに初めて見えてくる設計の姿を掘り下げます。


壊れない設計を目指すと、判断は過剰に固められる

壊れない設計を目指すと、 設計者は無意識に、判断を強く閉じ込めようとします。

  • 将来の変更を想定しすぎる
  • 例外ケースをすべて先取りしようとする
  • 型や抽象で厳重に縛る

一見すると堅牢そうに見えますが、 ここには大きな落とし穴があります。

それは、 想定が外れた瞬間に、全体が一気に硬直する ということです。

壊れないように固めた設計ほど、 壊れたときの修復コストは高くなります。


壊れる設計と、壊してよい設計は違う

「壊れる前提」と言うと、 雑に作ってよい、という意味に受け取られることがあります。

しかし、それは違います。

  • 無秩序
  • 無境界
  • 無責任

な設計は、単に放棄です。

ここで言うのは、 壊れる場所が分かっている設計 です。

  • どこが変わりやすいか
  • どこは変わりにくいか
  • 壊れるとしたら、どこからか

これが説明できる状態を作ることが目的です。


「直しやすさ」は、後から付け足せない

よく、次のような言葉を耳にします。

  • まずは作って、あとで直せばいい
  • 動くものを早く出そう

これはスピードが求められる場面では正しい判断です。

ただし、 直しやすさを設計せずに作ったものは、後から直しにくい という事実もあります。

直しやすさとは、

  • 境界があること
  • 責務が分かれていること
  • 判断が局所化されていること

の積み重ねです。

直すという行為は、何かを後から付け加えることではありません。 すでに存在するコードを修正し、置き換え、削る行為です。 そのため、どんなに小さな変更であっても、既存の判断や構造に多かれ少なかれ影響を与えます。


壊れやすい場所は、あらかじめ弱くしておく

壊れやすい場所を、 あえて「弱く」設計するという考え方があります。

  • 差し替えやすい
  • 捨てやすい
  • 影響範囲が小さい

こうした性質を持たせることで、 壊れたときに迷わず手を入れられます。

これは、

  • 抽象を増やすこと
  • レイヤを増やすこと

とは限りません。

むしろ、 壊れる前提の場所ほど、構造はシンプルな方がよい 場合も多くあります。


判断の強度を揃えないという選択

すべての判断を、 同じ強度で閉じ込める必要はありません。

  • 型で完全に縛る判断
  • 境界として分ける判断
  • コメントやドキュメントに留める判断

これらはすべて、 判断をどの強さで残すか の違いです。

壊れる前提で設計するとは、 判断ごとに強度を変えることだとも言えます。


設計は、未来の自分への引き継ぎである

壊れたときにコードを触るのは、 未来の自分か、別の誰かです。

その人が、

  • どこを疑えばいいか
  • どこを壊していいか
  • どこは触らない方がいいか

を判断できるようにすること。

それが、 壊れる前提で設計するということです。

設計は、 未来への説明責任 でもあります。


壊すことを恐れなくなると、設計は楽になる

壊れることを前提にすると、 設計は少し楽になります。

  • 完璧を目指さなくてよくなる
  • 想定外を過剰に恐れなくてよくなる
  • 判断を置く場所に集中できる

設計は、 当てるゲームではありません。

選び直せる状態を作るゲームです。

次の章では、 判断を「コードとして残す」具体的な方法、 つまり名前・型・境界の話に進みます。

ここから先は、 設計が目に見える形になる章 です。