Featured image of post コードナビゲーター【Facade】出航前点検、ブリッジに漏れた四系統の作法〜入口は一つでも、部屋は四つ残る〜

コードナビゲーター【Facade】出航前点検、ブリッジに漏れた四系統の作法〜入口は一つでも、部屋は四つ残る〜

出航前点検の手順書は「点検を1回呼ぶ」と1行なのに、実コードのブリッジ側では四系統の呼び出しが11手続き分並び、同じ11手続きが7箇所に散らばっていた。下位の内部順序が変わるたびに7箇所全部を直す羽目になる旧設計を、一枚の窓口 PreflightCheck に段取りを集約する Facade パターンで引き直します。Rubyのキーワード引数のデフォルト値による依存注入で、既定の入口を提供しつつ下位への直接アクセス余地を残す実装を解説します。

Featured image of post コードナビゲーター【Command】操舵訓練で消えた一手〜戻し方を知ってるのは、動かした本人だけ〜

コードナビゲーター【Command】操舵訓練で消えた一手〜戻し方を知ってるのは、動かした本人だけ〜

操舵訓練の一手をキーストロークで打ち間違えたとき、既に実行した yaw と thrust を戻す手段がコードに無く、日誌には "yaw変更" とだけ残っていた。動作をオブジェクトに引き上げ、実行と戻し方の両方をそのオブジェクトが持つ Command パターンを、Rubyの兄弟クラス群と履歴スタックで解説します。

Featured image of post コードナビゲーター【State】接舷シーケンスの飛び越し事故〜順番は、書き並べるものじゃなくて、渡っていくものよ〜

コードナビゲーター【State】接舷シーケンスの飛び越し事故〜順番は、書き並べるものじゃなくて、渡っていくものよ〜

接舷シーケンスの状態を文字列フラグと巨大case文で回した旧設計が、書き漏らしから「許されない遷移」を通してしまう。状態そのものをクラスに引き上げ、書けない場所を作って構造的に防ぐStateパターンを、Rubyのシンボルとダックタイピングで解説します。

Featured image of post コードナビゲーター【Decorator】保冷・防振・保険、掛け算で増えた積荷台帳〜一枚ずつ包んで重ねる航法術〜

コードナビゲーター【Decorator】保冷・防振・保険、掛け算で増えた積荷台帳〜一枚ずつ包んで重ねる航法術〜

積荷の保冷・防振・保険という3オプションを組み合わせごとのサブクラスで表現し、クラス数が指数的に増殖した旧設計を、Decoratorパターンで独立したラッパークラスの重ね掛けに引き直します。Rubyの継承と合成(is-a/has-a)の使い分けを解説します。