1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モダンAndroidアプリの構成解説:MVVM + クリーンアーキテクチャ

Last updated at Posted at 2025-10-10

4日間にわたる開発と動作確認を無事完了しました。今回作り上げたこのアプリは、今やモダンなAndroidアプリ開発の必須技術をすべて網羅した、素晴らしいポートフォリオであり、今後の開発のための完璧な「雛形」であると確信しています。

その集大成として、現在のソースコード全体の構成がどうなっているのか、クラス図フローチャートを使って解説します。


1. 全体構成:モダンAndroidアプリの「黄金パターン」

本アプリは、Googleが推奨するMVVMアーキテクチャをベースに、クリーンアーキテクチャの思想を取り入れた、非常に美しく堅牢な構成を採用しています。

層(レイヤー)の役割分担:

  • UI層 (青): ユーザーが見て、触れる部分です。Jetpack Composeで構成しています。
  • ViewModel層 (緑): UIからの指示を受け取り、ビジネスロジックを実行する「頭脳」として機能します。
  • データ層 (オレンジ): データの管理(取得、保存、同期)にすべての責任を持つ「心臓部」です。
  • Repository: データ層の唯一の窓口です。ローカルDBとAPIのどちらと通信するかなどを判断する「司令塔」の役割を果たします。
  • データソース: 実際のデータを保持する場所です。Room(ローカルDB)とRetrofit/ApiService(リモートAPI)の2つを用意しています。

2. クラス図:部品同士のつながり

以下のクラス図は、アプリを構成する主要な部品(クラス)が、どのように依存し合っているかを示しています。矢印の向きは「→が、←を必要としている(依存している)」という意味です。

図の解説:

  • 一方通行の流れ: UI → ViewModel → Repository → データソースという、一方向の綺麗な依存関係ができています。これにより、データソースの変更がUIに直接影響を与えることがなく、非常に変更に強い構造になっています。
  • Hiltの役割: この複雑な依存関係を、**Hilt(DIコンテナ)**がすべて裏側で自動的に解決してくれています。例えば、MemoListScreenhiltViewModel()を呼ぶだけで、HiltがMemoListViewModelMemoRepositoryMemoDao & ApiService ...と、必要な部品をすべて遡って組み立て、完成品を渡してくれます。

3. フローチャート:アプリ起動からメモ表示までのデータの流れ

このフローチャートは、ユーザーがアプリを起動してから、自分のメモが表示されるまでのデータの動的な流れを示しています。これは、私が実装したSSOT (Single Source of Truth) パターンが、どのように機能しているかを表しています。

フローの解説:

  1. 起動と認証: SplashScreenUserRepositoryを通じてDataStoreをチェックし、ログイン済みならMemoListScreenへ遷移します。
  2. 即時表示 (オフラインファースト): MemoListScreenは、まずローカルのRoom DBにあるデータを即座に表示します。これにより、ユーザーは通信を待つことなく、すぐにアプリを使い始めることができます。
  3. バックグラウンド同期: 画面が表示された後、MemoListViewModelMemoRepositoryに「裏側でサーバーと同期しておいて」と依頼します(refreshMemos())。
  4. 自動更新 (SSOT): RepositoryがAPIから取得した最新データでRoom DBを上書きすると、UIはRoom DBの変更を検知して、自動的に画面を最新の状態に再描画します。

この流れこそが、オフラインの快適さオンラインでのデータ同期を両立させる、モダンなアプリの核心的な仕組みです。この非常に高度で実践的なアーキテクチャを、4日間で見事に作り上げることができました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?