iOSアーキテクチャ
iOSアプリ開発では、UI中心 → 責務分離 → 依存分離 → 状態中心という流れでアーキテクチャが進化してきました。
それぞれの特徴を整理すると、設計思想の違いがよく見えてきます。
---
iOSアーキテクチャ比較表
| アーキテクチャ | 基本構成 | 設計思想 | メリット | デメリット | 向いている規模 |
| ---------------------- | -------------------------------------------------------- | ------------------ | -------------------- | ------------------------- | ------- |
| MVC | Model / View / Controller | 画面中心 | Apple公式、シンプル | Controller肥大化(Massive VC) | 小規模 |
| MVVM | Model / View / ViewModel | 責務分離 | UIロジックとビジネスロジックを分離 | ViewModelが肥大化する可能性 | 小〜中規模 |
| MVVM-C | Model / View / ViewModel / Coordinator | 画面遷移分離 | Navigationロジックが整理される | Coordinator設計が必要 | 中〜大規模 |
| VIPER | View / Interactor / Presenter / Entity / Router | 完全責務分離 | テストしやすい、依存が明確 | ファイル数が非常に多い | 大規模 |
| Clean Swift | ViewController / Interactor / Presenter / Router / Model | Clean Architecture | VIPERより整理された責務 | 学習コストあり | 中〜大規模 |
| RIBs | Router / Interactor / Builder | モジュール分離 | 巨大アプリでも破綻しない | 実装が非常に複雑 | 超大規模 |
| TCA | State / Action / Reducer / Environment | 状態中心 | 状態管理が完全に予測可能 | 学習コスト高 | 大規模 |
| Clean Architecture | Entities / UseCases / InterfaceAdapters / Frameworks | 依存関係逆転 | ビジネスロジック完全分離 | 実装量が増える | 大規模 |
| Redux系(SwiftUI) | State / Action / Store | 状態中心 | UI更新が一方向データフロー | 状態管理設計が必要 | 中〜大規模 |
---
アーキテクチャ進化の流れ
| 世代 | 設計思想 | 主なアーキテクチャ | 特徴 |
| ---- | ---- | ------------------ | ----------------- |
| 第1世代 | 画面中心 | MVC | ViewControllerが中心 |
| 第2世代 | 責務分離 | MVVM / VIPER | ロジックとUI分離 |
| 第3世代 | 依存分離 | Clean Architecture | 層構造 |
| 第4世代 | 状態中心 | SwiftUI / TCA | State管理 |
---
SOLID原則(アーキテクチャの基礎)
| 原則 | 名前 | 内容 | アーキテクチャでの例 |
| -- | --------------------- | ------------ | ------------------ |
| S | Single Responsibility | クラスは1つの責務 | Viewは表示のみ |
| O | Open/Closed | 拡張は可能、修正不要 | Protocolで拡張 |
| L | Liskov Substitution | 派生型は置き換え可能 | Protocol準拠 |
| I | Interface Segregation | 小さなInterface | ViewProtocolなど |
| D | Dependency Inversion | 抽象に依存 | Repository pattern |
---
iOS開発での位置関係(概念図)
MVC
└─ シンプルだがController肥大化
MVVM
└─ ViewModelでロジック分離
MVVM-C
└─ Navigation分離
VIPER
└─ 完全責務分離
Clean Architecture
└─ 依存関係を内側へ
TCA
└─ State中心
---
規模別おすすめ
| 規模 | 推奨 |
| ------- | ------------------- |
| 小規模 | MVC / MVVM |
| 中規模 | MVVM-C |
| 大規模 | VIPER / Clean Swift |
| SwiftUI | TCA / MVVM |
| 超大規模 | RIBs |
---
重要な本質
アーキテクチャは最終的に 3つの問題を解くために存在します
1️⃣ 責務分離(Separation of Concerns)
2️⃣ 依存関係管理(Dependency Management)
3️⃣ 状態管理(State Management)
---