第1章では、設計とは「判断」を扱う行為である、という前提を置いた。

では次に浮かぶ疑問は、こうだろう。

なぜ判断は、システムを壊すのか。

判断は必要なものだ。 それなのに、なぜ判断が増えるほど、 コードは触りづらくなっていくのか。

この章では、 判断そのものが悪いわけではない という事実から出発し、 それでもシステムが壊れていく理由を丁寧に掘り下げていく。


判断は「悪者」ではない

まず、はっきりさせておきたい。

判断は、設計において避けるべきものではない。

「判断が多いコードは悪い」 「ロジックは少ないほうがよい」

こうした言葉は、しばしば聞かれるが、 それは半分しか正しくない。

判断がなければ、ソフトウェアは振る舞えない。 要件を満たすこともできない。

問題は、 判断が存在することではなく、 判断が制御されていないこと だ。


判断は、必ず寿命を持つ

すべての判断には、寿命がある。

  • 今は正しいが、将来は分からない
  • この前提が崩れたら成立しない
  • 別の文脈では通用しない

それでも私たちは、 あたかもその判断が永遠に正しいかのように、 コードに埋め込んでしまう。

設計が壊れ始めるのは、 判断の寿命が尽きた瞬間だ。

しかし実際には、 その瞬間がはっきりと分かることは少ない。

少しずつ前提がズレ、 少しずつ例外が増え、 気づいたときには全体が歪んでいる。


判断が「広がる」ときに起きること

判断が一箇所に閉じ込められていれば、 その寿命が尽きても、修正は局所的で済む。

しかし判断が広がっていると、 話はまったく変わる。

  • 同じ判断が、複数の場所に存在する
  • 微妙に違う形でコピーされている
  • どれが本体か分からない

この状態では、 一つの判断を変えることが、 システム全体を揺るがす行為になる。

結果として、 誰も判断を変えられなくなる。


「変更が怖い」という感覚の正体

現場でよく聞く言葉がある。

「この辺、変更すると影響範囲が分からなくて…」

これは、技術力不足の告白ではない。 設計上の問題だ。

変更が怖いとは、 判断がどこにあるか分からない という状態を指している。

  • 触る前に全体を読む必要がある
  • テストがあっても安心できない
  • レビューでも確信が持てない

こうしてコードは、 徐々に「触れない領域」へと変わっていく。


判断は、静かに増殖する

判断が怖いのは、 増えていることに気づきにくい点にある。

最初は、 「このケースだけ特別に」 という一行の if かもしれない。

しかしその判断が閉じ込められていなければ、 同じ前提が別の場所でも必要になる。

やがて、 似たような分岐が点在し、 少しずつズレたロジックが生まれる。

誰も全体像を把握できなくなったとき、 システムはすでに壊れ始めている。


再利用が判断を壊す瞬間

再利用は、善であるかのように語られることが多い。

しかし再利用は、 判断を壊す強力なトリガーにもなり得る。

本来、特定の文脈でのみ成立していた判断が、 別の文脈に持ち込まれる。

その結果、

  • 例外対応が増える
  • フラグやオプションが増える
  • 呼び出し側の責務が曖昧になる

再利用が問題なのではない。

判断のスコープを超えて使われること が問題なのだ。


判断が壊れると、構造も壊れる

判断が歪み始めると、 それを支えている構造も耐えきれなくなる。

  • 責務が曖昧になる
  • 境界が曖昧になる
  • クラス名が実態を表さなくなる

こうなると、 構造を直そうとしても、うまくいかない。

なぜなら、 壊れているのは構造ではなく、 その中に閉じ込められているはずだった判断 だからだ。


まとめ

  • 判断そのものは悪ではない
  • 判断には必ず寿命がある
  • 判断が広がると、変更は恐怖になる
  • 再利用は、判断を壊す引き金になり得る
  • 構造が壊れる前に、判断はすでに壊れている

次章では、 こうした問題に対して、 判断をどのように閉じ込めるのか を、 具体的な技術として扱っていく。