差し込み口と変換(ヘキサゴナル)
Alistair Cockburn の「ポートとアダプター」では、アプリは画面・テスト・バッチのどれからでも同じように動かせ、データベースから切り離して作れるようにする。テストで本物の DB を使わずに済むのも、このおかげ。
動くコードを、変えやすいコードにする考え方です。
リファクタリング・技術的負債・ドメイン駆動設計・依存の向きを、Laravel の例で見ていきます。
Martin Fowler の定義では、外から見た動きを変えずに、中の作りを整えること。小さな変形を 1 つずつ重ねます。番号を押すと、コードが 1 歩ずつ変わります(色の付いた行が、その歩で変わった所)。コードは作り物です。
「においがする」とは、奥に問題がありそうな、表に出たしるしのこと(Kent Beck が名付けた言い方)。においは、すぐ直す合図ではなく、よく見る合図です。
Ward Cunningham が考えたたとえです。散らかったコードは借金のようなもので、新しい機能を足すたびに余分にかかる手間が「利子」です。Martin Fowler の例では、作りが分かりやすければ 4 日で済む機能が、散らかっていると 6 日かかり、差の 2 日が利子になります。
AI がコードを作る速さが、人が理解する速さを追い越すと、負債はコードの外にもたまります。研究者の Margaret-Anne Storey は、負債を 3 つに分けて考えることを提案しています(2026 年)。「生成 AI は、ソフトウェアづくりの難しさを取り除くのではなく、置き場所を変える」。
Eric Evans が本で広めた、業務(ドメイン)の言葉と決まりを中心にコードを組み立てる考え方です。全部を取り入れなくても、入口の 3 つだけで、会話とコードがそろってきます。
Robert C. Martin(Uncle Bob)の決まりでは、コードの依存は内側にだけ向けます。内側の「決まり」は、外側のデータベースや画面の名前を知りません。場面を選ぶと、直す所が光ります。図の分け方は一例です。
Alistair Cockburn の「ポートとアダプター」では、アプリは画面・テスト・バッチのどれからでも同じように動かせ、データベースから切り離して作れるようにする。テストで本物の DB を使わずに済むのも、このおかげ。
コントローラーやメソッドの引数に型を書くと、Laravel が組み立てて渡してくれる。差し替えたい所は、インターフェースを決めて、実装を外側に置く。
小さなアプリなら、Laravel の標準の形(MVC)で十分なことが多い。層を増やすほど、読む場所も増える。困ってから分ける。設計パターン「実務で出てくる所」も見てください。
サービスをいくつに分けるかは、あとから変えにくい決定です。
AI はコードを速く書きますが、整える・まとめる判断は、人がします。AI の成果物を確かめるも見てください。
確かめたものに印を付けてください(この端末にだけ残ります)。