Android Kotlin Compose 開発 は何をしますか?
Kotlin、Jetpack Compose、MVVM、Hilt、Room 3、DataStore、Paging 3、またはマルチモジュールプロジェクトを使用した Android アプリを開発する際に使用します。 Android プロジェクト、スクリーン、ViewModel、リポジトリ、フィーチャーモジュールの作成リクエストや、Android アーキテクチャパターンに関する質問に対応します。
クイックリファレンス
| タスク | 参照ファイル |
|---|---|
| プロジェクト構造とモジュール | modularization.md |
| アーキテクチャ層(Domain、Data、UI、Common...) | architecture.md |
| Compose パターン、マテリアルモーション、アニメーション、Modifier、安定性 | compose-patterns.md |
| アクセシビリティ、TalkBack、ラベルコピー、ライブ領域、Espresso a11y チェック | android-accessibility.md |
| 通知、フォアグラウンドサービス、メディア/オーディオ、PiP、共有シート | android-notifications.md |
| データ同期とオフラインファーストパターン | android-data-sync.md |
| Material 3 テーマ設定、スペーシングトークン、カテゴリフィット、ダイナミックカラー | android-theming.md |
| Navigation3、アダプティブナビゲーション、大画面品質階層 | android-navigation.md |
| Kotlin ベストプラクティス、View ライフサイクル相互運用 | kotlin-patterns.md |
| コルーチンベストプラクティス | coroutines-patterns.md |
| Gradle、プロダクトフレーバー、BuildConfig、ビルドパフォーマンス | gradle-setup.md |
| テストアプローチ | testing.md |
| 国際化と地域化 | android-i18n.md |
| アイコン、アダプティブランチャー仕様、カスタム描画 | android-graphics.md |
| ランタイムパーミッション | android-permissions.md |
| Kotlin 委譲パターン | kotlin-delegation.md |
| クラッシュレポート | crashlytics.md |
| StrictMode ガードレール | android-strictmode.md |
| マルチモジュール依存関係 | dependencies.md |
| コード品質(Detekt) | code-quality.md |
| コードカバレッジ(JaCoCo) | android-code-coverage.md |
セキュリティ、Play Integrity(Standard/Classic)、サーバーデコード、 requestHash/nonce、階層化ポリシー、対策;Credential Manager;補助的なローカルルートチェック | android-security.md |
| デザインパターン | design-patterns.md |
| パフォーマンス、Play Vitals、オプションの CI レポート(Play Developer Reporting API)、起動、再コンポジション、ジャンク、バッテリー | android-performance.md |
| デバッグ、Logcat レベル、ANR、Gradle エラーパターン、R8、メモリリーク | android-debugging.md |
| マイグレーションガイド(XML、RxJava、ナビゲーション、Compose、Room 2→3) | migration.md |
ワークフロー決定木
新しいプロジェクトを作成する場合?
→ assets/settings.gradle.kts.template から設定とモジュールインクルードを開始します
→ assets/libs.versions.toml.template からバージョンカタログを開始します
→ assets/convention/ 内のすべてのファイルを build-logic/convention/src/main/kotlin/ にコピーします
→ build-logic/settings.gradle.kts を作成します(assets/convention/QUICK_REFERENCE.md を参照)
→ ルートの settings.gradle.kts に includeBuild("build-logic") を追加します
→ gradle/libs.versions.toml にプラグインエントリを追加します(assets/convention/QUICK_REFERENCE.md を参照)
→ assets/proguard-rules.pro.template を app/proguard-rules.pro にコピーします
→ modularization.md を読んで構造とモジュールタイプを確認します
→ gradle-setup.md をビルドファイルとビルドロジックに使用します
Gradle/ビルドファイルを設定する場合?
→ gradle-setup.md をモジュール build.gradle.kts のパターンに使用します
→ gradle-setup.md → 「ビルドパフォーマンス」を最適化ワークフロー、診断、ボトルネックトラブルシューティングに使用します
→ assets/convention/ からプロジェクトの build-logic/ に Convention プラグインをコピーします
→ 設定手順と例については assets/convention/QUICK_REFERENCE.md を参照してください
→ assets/proguard-rules.pro.template を app/proguard-rules.pro にコピーして R8 ルールを設定します
コード品質 / Detekt を設定する場合?
→ code-quality.md を Detekt Convention プラグインの設定に使用します
→ assets/detekt.yml.template からルールを開始し、Compose ルールを有効にします
依存関係を追加または更新する場合?
→ dependencies.md に従います
→ 依存関係が不足している場合は assets/libs.versions.toml.template を更新します
新しい機能/モジュールを追加する場合? → modularization.md のモジュール命名規則に従います → 機能モジュールにプレゼンテーション層を実装します → 依存関係フローに従います:機能 → コア/ドメイン → コア/データ
UI 画面/コンポーネントを構築する場合?
→ compose-patterns.md を画面アーキテクチャ、状態、コンポーネント、Modifier について読んでください
→ compose-patterns.md -> 状態管理 -> 「読み込みとリフレッシュ UX」を使用して、読み込み中およびリフレッシュ中の安定したレイアウトを実現します(コンテキストを消去する全画面スピナーを避ける)
→ android-theming.md を使用して Material 3 の色、タイポグラフィ、シェイプを設定します
→ 常に Kotlin コードを kotlin-patterns.md に準拠させます
→ 機能モジュールに Screen + ViewModel + UiState を作成します
→ 可能な場合は core/ui の共有コンポーネントを使用します
状態とイベントを処理する場合?
→ 状態には StateFlow を使用します。厳密な単発 UI コマンドには Channel + receiveAsFlow() を使用します。マルチキャストまたはリプレイを意図したイベントには SharedFlow を使用します(coroutines-patterns.md を参照)
→ SavedStateHandle でプロセス終了を乗り切ります(compose-patterns.md を参照)
アプリテーマを設定する場合(色、タイポグラフィ、シェイプ)?
→ android-theming.md に従って Material 3 テーマとダイナミックカラーを設定します
→ MaterialTheme.colorScheme のセマンティックカラーロールを使用します(ハードコードされた色は禁止)。各塗りつぶしにはその on* パートナーをペアにします - 色ペアルール を参照
→ Color.kt に完全な M3 カラーセットを宣言します(サーフェスコンテナ、ディム/ブライト、*Fixed/*FixedDim)。これによりダイナミックカラーとコントラストバリアントの一貫性が保たれます - 完全なカラーロールリファレンス と サーフェスコンテナ階層 を参照
→ 奥行きはまずコンテナのトーンで表現し、影は任意のコンテンツの上に浮かぶコンポーネントにのみ使用します - トーンによるエレベーションと影 を参照
→ インタラクティブな境界線/フォーカスには outline、装飾的な区切り線には outlineVariant を使用します - outline と outlineVariant を参照
→ ユーザー設定で切り替え可能なライト/ダークテーマをサポートします
→ API 31+ ではダイナミックカラー(Material You)を有効にし、ブランド/拡張色を primary に調和させます - ブランドカラーの調和 を参照
→ Android 14+ (API 34) のシステムコントラストスライダーに対応するため、中/高コントラストスキームバリアントを提供し、UiModeManager.getContrast() を読み取ります - ユーザーコントラスト設定 を参照
→ 地域限定のパレットオーバーライド(破壊的スコープ、メディアツールバーなど)には、colorScheme.copy(...) を使用したネストされた MaterialTheme を使用します - スコープテーマ を参照
→ Card / OutlinedCard / ElevatedCard は重要性ではなくサーフェスの分離に基づいて選択し、シェイプはトークンレベルでオーバーライドします - カードバリアント と コンポーネントシェイプデフォルト を参照
任意の Kotlin コードを記述する場合? → 常に kotlin-patterns.md に従います → 実践が architecture.md、modularization.md、compose-patterns.md と一致していることを確認します
データ/ドメイン層を設定する場合?
→ architecture.md を読んでください
→ Hilt の @Binds、スコープ、DI アンチパターン:architecture.md -> ドメイン層 -> 「依存関係インジェクションのセットアップ」
→ core/domain にリポジトリインターフェースを作成します
→ core/data に Room 3/Retrofit/DataStore を使用した実装を作成します
→ 単純なキーと値のペアには DataStore、複雑なリレーショナルデータには Room 3(suspend / Flow DAO、SQLiteDriver)を使用します
リストとスクロールを実装する場合?
→ 安定したキーと contentType を持つ LazyColumn/LazyRow を使用します(compose-patterns.md を参照)
→ 大規模データセットには Paging 3 を使用します(compose-patterns.md -> 「Paging 3」を参照)
ナビゲーションを処理する場合? → アダプティブナビゲーションには Navigation3 を使用します(android-navigation.md を参照) → ナビゲーションのアンチパターンを避けます(android-navigation.md -> 「ナビゲーションアンチパターン」を参照)
パフォーマンスを最適化する場合?
→ android-performance.md のパフォーマンスチェックリストに従います
→ ユーザーが自動化された Play Console のバイタル(CI/Slack、Play Console UI なし)を要求した場合は、android-performance.md → オプション:Play Vitals の可観測性(Play Developer Reporting API) を使用します
→ 高頻度のテキスト入力には BasicTextField2 を使用します
テストする場合? → testing.md をテストの哲学とパターンについて読んでください → Flow の放出テストには Turbine を使用します(testing.md -> 「Turbine を使用した Flow 放出のテスト」を参照) → Repository を作成します