Model Y Model Z DB table_x table_y table_z JOIN JOIN Controller → Models → DB の依存に境界がないため、 どのControllerからも任意のModelを参照でき、Model間も自由に結合する なぜつらいのか ― 密結合が伝播しやすい構造 11
DB(JOIN で密結合) Controller → Models → DB が直接依存 モジュラーモノリス Module A Controller Model Module B Controller Model Module C Controller Model DB Schema A Schema B Schema C 単一 DB(スキーマで論理分離) ドメイン境界で分割・単一デプロイ マイクロサービス Service A Controller Model DB Service B Controller Model DB Service C Controller Model DB サービスごとに独立 DB 完全分離・個別デプロイ モジュラーモノリスとは モノリスの開発体験を保ちながら、内部をモジュールに分割するアーキテクチャ “ 16
する 後者は Shopify では Platform コンポーネントと呼ばれ、基盤的な位置づけ → つまり、機能的なパッケージが存在してもよい 機能的なパッケージは存在してもよいの? "We are faced with a dichotomy: some components are domains, while others are designed around the functional role they play in the application." “ 25
E Model F AI ? ? ? 影響範囲が不明 暗黙の依存が絡み合い AIが影響範囲を特定できない モジュラーモノリス Order Public API Notification Public API Customer Model UseCase Public API AI ✓ 責務と影響範囲が明確 公開APIが境界となり AIが責務と影響範囲を把握できる AI駆動開発との親和性が高い 37
パッケージごとに並列で実装 Order AI Agent 1 Model UseCase Public API DTO spec/ テスト作成 Customer AI Agent 2 Model UseCase Public API DTO spec/ テスト作成 Shipping AI Agent 3 Model UseCase Public API DTO spec/ テスト作成 契約(公開API)さえ決めれば、内部実装は同時並行で進められる パッケージ単位でAIに並列開発を任せやすい 38
AI がミス Shipping Model Public UseCase ✓ Notification Model Public UseCase ✓ Product Model Public UseCase ✓ Payment Model Public UseCase AIに実装を任せた結果の失敗の影響が限定的 パッケージ丸ごとAIに書き直させるコストも限定的 AIの失敗コストを最小化できる 40