🌟 アプリ内部構造の選定ガイド
アプリケーション内部構造(Structural Styles)は、外側のトポロジーや通信方式とは異なり、コードベースの変更容易性・保守性・テスト性に直接影響する領域 である。
本ガイドでは、主要な構造スタイルをどのように選ぶべきかを、実務で役立つ判断基準に基づいて整理する。
なお、MVC / MVP / MVVM / MVU などの UI パターンは、あくまでプレゼンテーション層の構造を扱うものであり、Hexagonal や Layered のようなアプリ全体の内部構造スタイルとは別軸で成立する。そのため、"Hexagonal + MVVM" のように、内部構造スタイルと UI パターンを組み合わせて採用することが一般的である。 ここで扱う UI 主導 / Domain 主導は、あくまで「どの層を設計の起点とするか」という観点であり、UI パターンそのものはプレゼンテーション層に限定された構造である。バックエンド側では Hexagonal / Layered などのスタイルと併存させることができる。
✅ 判断軸 1:ドメインの複雑性(Domain Complexity)
最初に見るべきは、対象ドメインがどれほど複雑かである。
● 低い(CRUD 中心)
- Transaction Script
- Active Record
- Table Module
向いている理由:
ロジックが薄く、複雑なモデル表現が不要であるため。
● 中程度(業務ルールが一定程度存在)
- Domain Model Layered
- MVC / MVVM など UI 主導構造
- 複数のサービスと連携するがドメインはそこまで難しくないケース
● 高い(複雑なルール・状態遷移・不変条件)
- Hexagonal
- Clean Architecture
- Onion Architecture
向いている理由:
依存方向ルールによりドメインモデルが外部から独立し、変更に強くなる。
✅ 判断軸 2:変更容易性(Changeability)
どこが頻繁に変わるのか?
どの層が多様な UI / API / 永続化方式に晒されるのか?
● プレゼンテーション層が頻繁に変わる
- Hexagonal(Port/Adapter により UI を差し替えやすい)
● 永続化が変わる可能性が高い
- Hexagonal / Clean(Domain → Infrastructure の依存を逆転させる)
● とにかく素早く書きたい
- Transaction Script / Active Record
✅ 判断軸 3:チーム規模と構造化要求
● 小規模(1〜3 人)
- Active Record
- Transaction Script
- MVVM / MVC
● 中規模(4〜10 人)
- Domain Model Layered
- MVC → MVVM への移行なども選択肢
● 大規模・複数チーム
- Hexagonal
- Clean Architecture
- Onion Architecture
- Modular Monolith(構造と境界を明確にする)
✅ 判断軸 4:テスト戦略(Testing Strategy)
● 単体テストを最重要視する
- Hexagonal / Clean(Port/Adapter による isolation が効く)
● 結合テスト中心
- Classic Layered
● 手動テストに依存(レガシー / 短期開発)
- Active Record でも実務上成立する
✅ 判断軸 5:UI 主導か Domain 主導か
● UI 主導(表示が中心・複雑 UI)
- MVC
- MVP
- MVVM
- MVU
● Domain 主導(業務ロジックが中心)
- Domain Model Layered
- Hexagonal / Clean
🧭 最終選定チャート(Mermaid)
✅ まとめ
Structural Styles は「どれが優れているか」ではなく、
どのような構造が、プロダクトの性質・複雑性・チーム体制・変更要求に適しているか
によって選択される。
- ドメインが複雑なら Dependency Rule 系(Hexagonal / Clean)
- 小規模・短期なら Transaction Script / Active Record
- UI 主導なら MVC / MVVM
- チームが大きくなるほど、境界の明確化が重要になる
アプリ内部構造は、外側のトポロジーや Integration、Data と連動しつつも、
コードの保守性を支える最も具体的なアーキテクチャレイヤ である。