compose-ui について
再利用しやすく、テスト可能で高性能な UI を作る Android 開発者向けの Jetpack Compose 実践ガイドです。状態管理、Modifier、最適化、テーマ、プレビューを扱います。
主な機能
- 01状態のホイスティングと単方向データフロー
- 02Modifier の引数と適用順序
- 03remember と derivedStateOf による最適化
- 04MaterialTheme とリソースの整理
- 05Composable のプレビュー実践
活用シーン
- 01UI 状態を呼び出し元へ移す
- 02不要な再コンポーズを減らす
- 03コンポーネントのテーマを統一する
- 04公開 Composable のプレビューを用意する
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ new-silvermoon/ awesome-android-agent-skills --skill compose-uiインストール後、Claude Code で/compose-uiを入力して読み込まれたか確認します。
詳細
Jetpack Compose のベストプラクティス
手順
パフォーマンスが高く、再利用可能で、テストしやすい Composable を作成するには、次のガイドラインに従ってください。
1. 状態のホイスト(単方向データフロー)
可能な限り状態を呼び出し元に移動し、Composable をステートレスにします。
- パターン:関数シグネチャは通常、次のようになります。
@Composable fun MyComponent( value: String, // 状態は下方向に流れる onValueChange: (String) -> Unit, // イベントは上方向に流れる modifier: Modifier = Modifier // 標準の修飾子パラメーター ) - メリット:UI を単純な状態の保存から切り離せるため、プレビューやテストが容易になります。
- ViewModel との連携:画面レベルの Composable が ViewModel から状態を取得し(
viewModel.uiState.collectAsStateWithLifecycle())、それを下位に渡します。
2. 修飾子
- デフォルトパラメーター:任意パラメーターの先頭には、必ず
modifier: Modifier = Modifierを指定します。 - 適用:この
modifierは、Composable のルートレイアウト要素に適用します。 - 順序が重要です:
padding().clickable()とclickable().padding()は異なります。パディング部分もクリック可能にしたい場合は、一般に、パディングなどのレイアウトに影響する修飾子をクリックリスナーの後に適用します。
3. パフォーマンスの最適化
remember:再コンポジションをまたいでコストの高い計算結果をキャッシュするには、remember { ... }を使用します。derivedStateOf:スクロール位置のように状態が頻繁に変化する一方で、UI がしきい値や要約(例:「トップへ戻る」ボタンの表示)にだけ反応すればよい場合は、derivedStateOf { ... }を使用します。これにより、不要な再コンポジションを防げます。val showButton by remember { derivedStateOf { listState.firstVisibleItemIndex > 0 } }- ラムダの安定性:不安定な型が子要素の再コンポジションを引き起こさないよう、メソッド参照(例:
viewModel::onEvent)や記憶されたラムダを優先してください。
4. テーマとリソース
- ハードコードされた色やテキストスタイルの代わりに、
MaterialTheme.colorSchemeとMaterialTheme.typographyを使用します。 - 複数の機能で共有する場合は、単純な UI コンポーネントを専用のファイル(例:
DesignSystem.ktやComponents.kt)にまとめます。
5. プレビュー
- 公開 Composable ごとに、private なプレビュー関数を作成します。
@Preview(showBackground = true)を使用し、該当する場合はライトモードとダークモードのプレビューを含めます。- ステートレス Composable のプレビューには、ダミーの静的データを渡します。
コメント
Markdown 対応