mcpField
A
android-architecture

android-architecture

github.com/new-silvermoon開発992676 回インストール13 週間前に更新
リポジトリ

android-architecture について

Android アプリの設計やリファクタリングを行う開発者向けの、モダンなアーキテクチャとモジュール化のガイドです。UI・Domain・Data の分離、Hilt による依存性注入、複数モジュール構成を扱います。

主な機能

  1. 01UI・Domain・Data のレイヤー構成
  2. 02内側へ向かう依存ルール
  3. 03Hilt による依存性注入
  4. 04コアと機能ごとのモジュール分割
  5. 05StateFlow による ViewModel と UI の連携

活用シーン

  1. 01Android アプリのレイヤー構成を計画する
  2. 02ビジネスロジックを Android フレームワークから分離する
  3. 03本番アプリを機能モジュールに分割する
  4. 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 より簡潔です)。
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 スキルを参照)。

コメント