https://docs.flutter.dev/app-architecture/case-study
🧭 概要
このガイドでは、Compass アプリという実例を通して、Flutter の推奨アーキテクチャ(MVVM パターン+Repository/Service 構成)をどのように実装するかを解説しています。Compass は旅行の行程を作成・予約できる本格的なサンプルアプリで、実運用を想定した大規模構成になっています。
🧩 学べる内容
Flutter のアーキテクチャガイドを実装する方法
Repository と Service を使ったデータ層設計
MVVM による UI 層設計
Command パターン を用いた安全な UI 更新
ChangeNotifier / Listenable による状態管理
Provider パッケージを用いた依存性注入
推奨アーキテクチャに沿ったテスト構成
大規模 Flutter アプリのための効果的なパッケージ構造
🏗️ パッケージ構成のポイント
📁 ディレクトリ構成(例)
lib/
├── ui/
│ ├── core/ # 共通UIウィジェットやテーマ
│ └──
テスト関連:
test/ # ユニット & ウィジェットテスト testing/ # モックやフェイクなどのテスト補助コード
💡 設計の考え方
UI層(View / ViewModel) は機能単位(feature-based)で整理。 → 各機能に1つの View と 1つの ViewModel を持つ。
データ層(Repository / Service) は型単位(type-based)で整理。 → 複数機能から再利用できるよう設計。
domain層 にはアプリ全体で共通するモデルを配置。
coreフォルダ はブランドテーマや共通UI(ボタン・フォーム等)を格納。
3種類の mainファイル(開発・ステージング・本番)を使い分け。
🔁 他のアーキテクチャとの関係
この事例は MVVM + ChangeNotifier を採用していますが、 同様の構成は Riverpod, flutter_bloc, Signals などでも実現可能です。 また、データ取得をメソッド呼び出しではなく Stream で実装することも可能です。
🧠 まとめ
Flutter チーム推奨の「MVVM + Repository + Service」構成を実例で解説。
コードの見通しが良く、スケーラブルでテスト容易性が高い。
FeatureごとにUI層を分割, Typeごとにデータ層を分離 が基本方針。