android-development について
Android 開発者向けのガイドです。Kotlin の規約、アプリのアーキテクチャ、UI パターン、テスト、性能管理を扱います。
主な機能
- 01Kotlin の命名・設計規則
- 02Clean Architecture と MVI の指針
- 03ナビゲーションと UI 状態の実践
- 04ユニット・UI テストの指針
- 05ライフサイクルとバックグラウンド処理
活用シーン
- 01Android プロジェクトで Kotlin のスタイルを統一
- 02アプリのレイヤーと UI 状態を設計
- 03ViewModel とナビゲーションのテスト計画
- 04ライフサイクル対応や遅延処理の設計
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill android-developmentインストール後、Claude Code で/android-developmentを入力して読み込まれたか確認します。
詳細
Android 開発のベストプラクティス
Kotlin の一般的なガイドライン
基本原則
- すべてのコードとドキュメントには英語を使用します
- 変数と関数の型は常に明示的に宣言します
any型は避け、必要なカスタム型を作成します- 関数本体内の空行はなくします
命名規則
- PascalCase:クラス、インターフェース、列挙型
- camelCase:変数、関数、メソッド
- underscores_case:ファイル、ディレクトリ
- UPPERCASE:環境変数、定数
- マジックナンバーは避け、代わりに定数を定義します
- 関数名は動作を表す動詞で始めます
- ブール型の変数には、
isLoading、hasError、canDeleteのような接頭辞を使用します
関数の設計
- 関数の命令数は20未満に抑え、単一の責務を持たせます
- 動詞を基に命名します
- ブール値を返す関数には、
is、has、またはcanを接頭辞として付けます - 値を返さない関数には、
execute、save、sendを接頭辞として付けます - 早期リターン、ユーティリティへの切り出し、高階関数を使ってネストを減らします
- null チェックの代わりにデフォルト引数を使用します
- パラメーターはオブジェクトにまとめます(RO-RO パターン)
データとクラス
- データ構造にはデータクラスを使用します
- プリミティブ型は複合型にカプセル化し、内部で検証します
- 不変性を重視し、変化しない値には
valを使用します - SOLID 原則に従い、継承よりもコンポジションを優先します
- クラスの命令数は200未満、パブリックメソッドは10個以下、プロパティは10個以下にします
例外処理
- 例外は予期しないエラーに限って使用します
- 想定される問題の修正やコンテキストの追加が必要な場合にのみ、例外をキャッチします
- ドメインエラーにはカスタム例外型を作成します
Android アーキテクチャ
クリーンアーキテクチャ
- レイヤーを明確に分離したクリーンアーキテクチャを実装します
- データの永続化とキャッシュにはリポジトリパターンを使用します
- ビジネスロジックはユースケースまたはインタラクターに配置します
- UI、ドメイン、データの各レイヤーの関心事を分離します
プロジェクト構成
app/
├── data/ # Data sources, repositories, models
├── domain/ # Use cases, domain models, interfaces
├── presentation/ # UI components, ViewModels, state
└── di/ # Dependency injection modules
MVI パターン
- 状態とイベントの管理には MVI パターンを採用します
- ViewModel は UI の状態を単一の不変な状態オブジェクトとして管理します
- UI コンポーネントは状態を監視し、それに応じて描画します
- ユーザーのインテントやイベントは、単一のエントリーポイントを通じて処理します
- 副作用を予測可能かつ追跡可能に保ちます
UI 開発
ナビゲーション
- フラグメントとアクティビティのルーティングには Navigation Component を使用します
- アプリのフローに合わせてナビゲーショングラフを定義します
- ディープリンクは Navigation Component を通じて処理します
- 型安全なナビゲーション引数には Safe Args を実装します
メインアクティビティの構成
- MainActivity で主要なナビゲーションを管理します
- メインの遷移先(ホーム、プロフィール、設定など)には BottomNavigationView を使用します
- 構成変更後もナビゲーション状態が適切に維持されるようにします
View Binding と状態
- 型安全なビューアクセスには ViewBinding を使用します
- UI 状態の管理には Flow または LiveData を使用します
- ライフサイクルを考慮した方法で状態の変化を監視します
- ローディング、エラー、成功の各状態を一貫して処理します
UI フレームワークの選択
- Jetpack Compose が特に必要とされる場合を除き、Jetpack Compose よりも XML レイアウトとフラグメントを優先します
- 複雑なレイアウトには ConstraintLayout を使用します
- Material 3 のデザインガイドラインを適用します
- さまざまな画面サイズに対応するレスポンシブデザインを実践します
認証フロー
認証画面は適切な順序で構成します。
- スプラッシュ画面 - アプリの初回起動
- ログイン画面 - ユーザー認証
- 登録画面 - 新規ユーザー登録
- パスワードを忘れた場合の画面 - パスワードの復旧
- メール認証画面 - メールアドレスの認証
テスト
ユニットテスト
- Arrange-Act-Assert の規約に従います
- ViewModel、ユースケース、リポジトリをテストします
- 依存関係にはテストダブルを使用します
- ビジネスロジックを十分にカバーします
UI テスト
- UI コンポーネントのウィジェットテストを実装します
- API モジュールの統合テストを作成します
- ナビゲーションフローをテストします
- インストルメンテーションテストには Espresso を使用します
ベストプラクティス
ライフサイクル管理
- ライフサイクルイベントを適切に処理します
- 不適切なライフサイクル処理によるメモリーリークを避けます
- ライフサイクルを考慮したコンポーネントを使用します
バックグラウンド処理
- 非同期処理には Coroutines を使用します
- キャンセルを適切に処理します
- 延期可能なバックグラウンド処理には WorkManager を使用します
依存性注入
- 依存性注入には Hilt または Dagger を使用します
- 依存関係を適切にスコープ設定します
- DI の設定を整理しておきます
パフォーマンス
- メインスレッドでの処理を避けます
- DiffUtil を使用して RecyclerView を最適化します
- 重いリソースには遅延読み込みを使用します
- メモリ使用量をプロファイリングして最適化します
コメント
Markdown 対応