- 判断とは何か
- 判断が構造として表現されていない場合、何が起こるか
- 「レビューで防ぐ」は、設計ではない
- 良い設計は、判断を構造で表現する
- 判断が構造で表現されると、何が変わるか
- 判断が構造で表現されていないコードの特徴
- 判断が構造で表現されると、コードは強くなる
- この章のまとめ
設計が壊れ始めるとき、 コードの中では、 ある現象が必ず起きています。
それは、
判断が、コードのあちこちに散らばっている
という状態です。
判断とは何か
本書で言う「判断」とは、 if 文や条件分岐そのもののことではありません。
- これは今やってよいのか
- この順番で呼んでよいのか
- この値を渡してよいのか
- この状態で変更してよいのか
といった、 「やってよい/いけない」を決める責任 そのものを指します。
この判断が、 どこで行われているか。
それが、 設計の壊れやすさを決めます。
判断が構造として表現されていない場合、何が起こるか
判断が構造として表現されていない場合、 それは次の場所に押し出されていきます。
- 呼び出し元のコード
- コメントやドキュメント
- コードレビュー
- テスト
- そして最終的には、人の記憶
この状態では、
- 正しく使えるかどうかは人次第
- 知っている人がいないと触れない
- うっかりミスが即バグになる
という構造になります。
これは、 判断がコードの外に漏れ出している 状態です。
「レビューで防ぐ」は、設計ではない
よくある会話があります。
これはレビューで気づけますよね テストを書けば大丈夫ですよね
一見、正しそうに聞こえます。
しかしこれは、 設計でやるべき判断を、 後工程に押し出している だけです。
- 書いてはいけないコードが書けてしまう
- 実行してはいけない状態が表現できてしまう
- 呼んではいけない順番で呼べてしまう
この時点で、 構造はすでに負けています。
レビューやテストは、 設計の代わりにはなりません。
良い設計は、判断を構造で表現する
良い設計では、 判断は 構造の中 にあります。
- 正しい順番でしか呼べない
- 不正な状態を表現できない
- 間違った依存関係を書けない
こうした制約は、
- 人が判断して守るもの ではなく
- 構造が勝手に守るもの
です。
判断が構造で表現されると、何が変わるか
判断が構造に埋め込まれると、 コードの性質が変わります。
- 書いていて迷わない
- 正しい使い方が自然にわかる
- 間違った方向に進もうとすると止められる
このとき開発者は、
- 毎回考える人 ではなく
- 構造に従う人
になります。
これは、 スキルが低いという意味ではありません。
思考を より価値の高い場所に使える という意味です。
判断が構造で表現されていないコードの特徴
判断が構造で表現されていないコードには、 共通した兆候があります。
- 「ここは注意してください」というコメントが多い
- 正しい呼び出し方が暗黙知になっている
- 同じような if が何度も出てくる
- テストでしか仕様がわからない
これらはすべて、
判断を構造として表現できていない サインです。
判断が構造で表現されると、コードは強くなる
判断が構造で表現されたコードは、 驚くほど壊れにくくなります。
それは、
- 人が賢くなったから ではなく
- 構造が判断を引き受けたから
です。
設計の仕事は、 人を信用しないことではありません。
人が間違えても大丈夫な構造を作ること です。
この章のまとめ
- 判断は、必ずどこかに存在する
- 構造で表現されない判断は、人に押し付けられる
- 良い設計は、判断を構造で表現する
- 判断が構造で表現されれば、コードは壊れにくくなる
次の章では、この「判断」を、
- 状態
- 依存関係
- ライフサイクル
といった、 より具体的な構造の中で、 どう扱うかを見ていきます。