android-architecture について
Android アプリの設計やリファクタリングを行う開発者向けの、モダンなアーキテクチャとモジュール化のガイドです。UI・Domain・Data の分離、Hilt による依存性注入、複数モジュール構成を扱います。
主な機能
- 01UI・Domain・Data のレイヤー構成
- 02内側へ向かう依存ルール
- 03Hilt による依存性注入
- 04コアと機能ごとのモジュール分割
- 05StateFlow による ViewModel と UI の連携
活用シーン
- 01Android アプリのレイヤー構成を計画する
- 02ビジネスロジックを Android フレームワークから分離する
- 03本番アプリを機能モジュールに分割する
- 04Hilt でオブジェクトの依存関係を管理する
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ new-silvermoon/ awesome-android-agent-skills --skill android-architectureインストール後、Claude Code で/android-architectureを入力して読み込まれたか確認します。
詳細
Android のモダンアーキテクチャとモジュール化
手順
Android アプリケーションを設計またはリファクタリングする際は、Guide to App Architecture と Clean Architecture の原則に従ってください。
1. 上位レイヤー
アプリケーションを3つの主要なレイヤーで構成します。依存関係は、コアロジックに向かって内側へ(または下位へ)流れるようにします。
- UI レイヤー(プレゼンテーション):
- 責務:データの表示とユーザー操作の処理です。
- コンポーネント:アクティビティ、フラグメント、Composable、ViewModel。
- 依存関係:Domain レイヤー(または単純な場合は Data レイヤー)に依存します。Data レイヤーの実装詳細に直接依存してはいけません。
- Domain レイヤー(ビジネスロジック)[任意ですが推奨]:
- 責務:複雑なビジネスルールと再利用性をカプセル化します。
- コンポーネント:ユースケース(例:
GetLatestNewsUseCase)、ドメインモデル(純粋な Kotlin のデータクラス)。 - 純粋な Kotlin:Android フレームワークへの依存関係を含めてはいけません(
android.*のインポートは禁止です)。 - 依存関係:リポジトリのインターフェースに依存します。
- Data レイヤー:
- 責務:アプリケーションデータの管理(取得、キャッシュ、保存)です。
- コンポーネント:リポジトリ(実装)、データソース(Retrofit API、Room DAO)。
- 依存関係:外部ソースとライブラリのみに依存します。
2. Hilt による依存性注入
すべての依存性注入に Hilt を使用します。
- @HiltAndroidApp:
Applicationクラスに付与します。 - @AndroidEntryPoint:アクティビティとフラグメントに付与します。
- @HiltViewModel:ViewModel に付与し、標準の
constructorインジェクションを使用します。 - モジュール:
- アプリ全体のシングルトン(例:Network、Database)には、
@Moduleと@InstallIn(SingletonComponent::class)を使用します。 - インターフェースの実装をバインドするには、抽象クラスで
@Bindsを使用します(@Providesより簡潔です)。
- アプリ全体のシングルトン(例:Network、Database)には、
3. モジュール化の戦略
本番アプリでは、ビルド時間の短縮と関心事の分離のために、マルチモジュール戦略を採用します。
- :app:機能をつなぐメインのエントリーポイントです。
- :core:model:共有ドメインモデル(純粋な Kotlin)。
- :core:data:リポジトリ、データソース、データベース、ネットワーク。
- :core:domain:ユースケースとリポジトリのインターフェース。
- :core:ui:共有 Composable、テーマ、リソース。
- :feature:[name]:独自の UI と ViewModel を含む独立した機能モジュールです。
:core:domainと:core:uiに依存します。
4. 実装チェックリスト
-
Domainレイヤーに Android への依存関係がないことを確認します。 - リポジトリでは、メインセーフな suspend 関数をデフォルトで使用します(必要に応じて内部で
Dispatchers.IOを使用します)。 - ViewModel は
StateFlowを介して UI レイヤーとやり取りします(android-viewmodelスキルを参照)。
コメント
Markdown 対応