- 公開日
Jetpack Composeで実践するAndroid Clean Architecture
- Authors

- Name
- Nguyen Hong Son (Sam)
- @samhon1459

はじめに
このサンプルでは、Jetpack Compose、MVVM、Clean Architectureの考え方を使って、Androidアプリをどのように構成しているかを紹介します。実運用の複雑さを加える前に、依存関係、状態管理、テストの境界を理解しやすくするため、あえて小さな構成にしています。
ソースコードはCompose Clean Baseリポジトリで公開しています。日本語の元記事はQiitaでも確認できます。
Jetpack Composeを選ぶ理由
Jetpack Composeは、Androidのモダンな宣言的UI toolkitです。現在のstateに応じたUIをcomposable functionで表現するため、Viewとアプリ状態を手作業で同期するcodeを減らせます。
このサンプルでは、特に次の三点が役立っています。
- state中心のUI: 各画面を明確なUI stateから描画できます。
- 再利用しやすいcomponent: framework classを継承せず、小さな要素を組み合わせられます。
- 短いfeedback loop: previewと簡潔なKotlin codeにより、画面を素早く確認できます。
Architectureの考え方
Clean Architectureは、必ず従うframeworkではなく、依存関係を整理するための考え方です。大切なのは、業務上の判断がUI、storage、networkの具体的な実装へ直接依存しないことです。
このサンプルは、Androidのarchitecture推奨事項に近い形で、次の役割に分けています。
- Presentation: Compose画面とViewModelがUI stateを公開し、ユーザー操作を受け取ります。
- Domain: 独立してテスト・再利用する価値がある処理をuse caseとして表現します。
- Data: repositoryが安定したinterfaceの後ろでlocalとremoteのdata sourceをまとめます。
- Framework: Android固有のstorage、network、platform連携を外側の境界に置きます。
この分離によりテストしやすくなり、具体的な実装も交換しやすくなります。ただし、小さなアプリで無理にすべてのlayerを分ける必要はありません。architectureは複雑さを減らすために使うべきで、手順を増やすことが目的ではありません。
画面フロー
+-----------+ +-----------+ +------------+
| Splash | ------>| Login | ------>| Main |
| Screen | | Flow | | Flow |
+-----------+ +-----------+ +------------+
画面イメージ
スプラッシュ | ログイン | 登録 |
コース | 受講者 |
リポジトリ構成
主に三つの領域で構成しています。
- App: アプリのentry point、navigation、Compose UI、ViewModel、use case、data contract。
- buildSrc: build設定と、このサンプルで使うdependency versionの一元管理。
- Framework: persistence、preference、cache、共通base typeなど、Android固有の再利用可能な実装。
Presentationは、具体的なnetwork classやdatabase classではなく、domainのcontractに依存します。Repositoryがdata sourceの詳細を隠し、ViewModelが結果をimmutableなUI stateへ変換します。そのため、実際のserviceを呼んだりUIを描画したりせずに、画面の動作をテストできます。
テストと保守
特に価値が高いのは、use case、repositoryの動作、ViewModelのstate遷移を確認するテストです。Compose UI testは、重要なユーザーフローに絞ります。このバランスなら素早いfeedbackを得ながら、細かな見た目に依存する壊れやすいテストを増やさずに済みます。
機能を追加するときも、守るべき境界がある場合にだけ抽象化を増やすことを勧めます。中身をそのまま通すclassが多い五層構成より、役割が明確な二層構成のほうが良い場合もあります。
まとめ
このstarterは、state中心のUI、明確な依存関係、テスト可能な業務処理、外側に分離したframework codeという、Composeプロジェクトの保守しやすい基準を示しています。実際には、製品の規模とriskに合わせて調整してください。
質問や提案があれば、GitHubリポジトリのissue、またはLinkedInからご連絡ください。
スプラッシュ
ログイン
登録
コース
受講者