Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jetpack Composeとデザインシステム

Jetpack Composeとデザインシステム

rmakiyama

May 13, 2024
Tweet

More Decks by rmakiyama

Other Decks in Programming

Transcript

  1. ©2024 Kyash Inc. ©2024 Kyash Inc. Jetpack Composeと デザインシステム 2024/05/13

    rmakiyama(MAKIYAMA Ryo) Jetpack Composeの課題〜モバイルアプリの品質改善を考える〜
  2. ©2024 Kyash Inc. 2 • Kyash (2022/10 -) • Android

    Engineer • Engineering Manager • @_rmakiyama • @rmakiyama MAKIYAMA Ryo 自己紹介
  3. ©2024 Kyash Inc. KyashとJetpack Compose • 2021年5月から導入開始 • Fragmentの上にComposeViewを載せる運用 •

    新規実装する画面は基本的にJetpack Composeを利用 • 大小含め100画面以上を実装 Jetpack Composeがデファクトスタンダード󰚗 4 ※2024年5月現在
  4. ©2024 Kyash Inc. Jetpack Composeとデザインシステム • Material2?Material3? • MaterialThemeをそのまま使う?カスタムする? •

    コンポーネントの粒度は? • 答えはプロダクトによって違う💡 テーマ設定やコンポーネント分割は悩みが多い 7
  5. ©2024 Kyash Inc. KyashとJetpack Composeとデザインシステム • KyashのデザインシステムをMaterial 2ベースで実装する • マテリアルシステムを置き換える形で実装する

    • ボタンなどはマテリアルコンポーネントを利用する • 独自のマスターコンポーネントを実装する デザインシステム実装のアプローチ 9 ※ 説明に使うコードは説明のためにプロダクションコードから改変しているものもあります
  6. ©2024 Kyash Inc. KyashとJetpack Composeとデザインシステム • KyashのデザインシステムをMaterial 2ベースで実装する • マテリアルシステムを置き換える形で実装する

    • ボタンなどはマテリアルコンポーネントを利用する • 独自のマスターコンポーネントを実装する デザインシステム実装のアプローチ 10 ※ 説明に使うコードは説明のためにプロダクションコードから改変しているものもあります
  7. ©2024 Kyash Inc. KyashのデザインシステムをMaterial 2ベースで実装する Kyash Interface Guideline • プロダクトとしての一貫性の担保

    • 作業・意思決定の効率化とデザインの拡張性 • ユーザビリティの向上 KIG 11
  8. ©2024 Kyash Inc. KyashのデザインシステムをMaterial 2ベースで実装する • KIGもMaterial 2をベースとしている ◦ “デザイン

    システムを M2 から M3 に移行した後で段階的な移行を開始”することが推奨されている • 既存の画面はこれまでMaterial 2ベースで実装されている ◦ 既存の画面の置き換えは優先度が低いため、移行する場合、共存する期間が長いことが想定される Why Material 2 12 https://developer.android.com/develop/ui/compose/designsystems/material2-material3?hl=ja#when-migrate
  9. ©2024 Kyash Inc. マテリアルコンポーネントを利用する/Buttons/KyashButtonDefault 21 • ButtonDefaultsを参考にしている • デフォルトの色を指定しつつ 個別に変更もしやすいようなAPI

    https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/material/material/src /commonMain/kotlin/androidx/compose/material/Button.kt;l=406-419
  10. ©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 26 スロットベースのレイアウトとして実装 • 個別に任意のスタイルを適用しやすい • 要素が増えてもAPIをシンプルに保てる

    ※ 利用するときに少し冗長になる Slot https://developer.android.com/develop/ui/compose/layouts/basics?hl=ja#slot-based-layouts https://github.com/androidx/androidx/blob/androidx-main/compose/docs/compose-component-api-guidelines.md#slot-parameters
  11. ©2024 Kyash Inc. Thank you!! • マテリアルシステムをベースにKIGデザインシステムを実装 • マテリアルコンポーネントの資産を活かしたAPIの設計 •

    スロットベースのレイアウトを活用して独自コンポーネントを実装 • 生産性の向上と一貫性のあるデザインをアプリに適用することができる まとめ󰢥 33
  12. ©2024 Kyash Inc. Appendix 35 https://developer.android.com/develop/ui/compose/designsystems https://developer.android.com/develop/ui/compose/designsystems/material2-material3?hl=j a#when-migrate https://developer.android.com/develop/ui/compose/designsystems/custom?hl=ja#replacing- systems

    https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ma terial/material/src/commonMain/kotlin/androidx/compose/material/Button.kt;l=406-419 https://developer.android.com/develop/ui/compose/layouts/basics?hl=ja#slot-based-layouts https://github.com/androidx/androidx/blob/androidx-main/compose/docs/compose-compone nt-api-guidelines.md#slot-parameters https://zenn.dev/kyash/articles/267566e787f9e6