Slide 1

Slide 1 text

©2024 Kyash Inc. ©2024 Kyash Inc. Jetpack Composeと デザインシステム 2024/05/13 rmakiyama(MAKIYAMA Ryo) Jetpack Composeの課題〜モバイルアプリの品質改善を考える〜

Slide 2

Slide 2 text

©2024 Kyash Inc. 2 ● Kyash (2022/10 -) ● Android Engineer ● Engineering Manager ● @_rmakiyama ● @rmakiyama MAKIYAMA Ryo 自己紹介

Slide 3

Slide 3 text

©2024 Kyash Inc. 3 Kyashについて お支払いも お金の管理も かんたんに Visaプリペイドカードとスマホで、いつでもどこでも、かんたんにお支払い。 アプリへのリアルタイムな履歴反映や自動カテゴリー分類で、お金の管理もかんたんに。

Slide 4

Slide 4 text

©2024 Kyash Inc. KyashとJetpack Compose ● 2021年5月から導入開始 ● Fragmentの上にComposeViewを載せる運用 ● 新規実装する画面は基本的にJetpack Composeを利用 ● 大小含め100画面以上を実装 Jetpack Composeがデファクトスタンダード󰚗 4 ※2024年5月現在

Slide 5

Slide 5 text

©2024 Kyash Inc. Jetpack Composeとデザインシステム 5 https://developer.android.com/develop/ui/compose/designsystems Androidにはマテリアルデザインというベースのデザインシステムがあり、 Jetpack Compose を使用すると、デザイン システムを簡単に実装できる。

Slide 6

Slide 6 text

©2024 Kyash Inc. Jetpack Composeとデザインシステム 6 https://developer.android.com/develop/ui/compose/designsystems Androidにはマテリアルデザインというベースのデザインシステムがあり、 Jetpack Compose を使用すると、デザイン システムを簡単に実装できる。 🤔

Slide 7

Slide 7 text

©2024 Kyash Inc. Jetpack Composeとデザインシステム ● Material2?Material3? ● MaterialThemeをそのまま使う?カスタムする? ● コンポーネントの粒度は? ● 答えはプロダクトによって違う💡 テーマ設定やコンポーネント分割は悩みが多い 7

Slide 8

Slide 8 text

©2024 Kyash Inc. ©2024 Kyash Inc. Kyashの事例を紹介󰦖 8 8

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

©2024 Kyash Inc. KyashのデザインシステムをMaterial 2ベースで実装する Kyash Interface Guideline ● プロダクトとしての一貫性の担保 ● 作業・意思決定の効率化とデザインの拡張性 ● ユーザビリティの向上 KIG 11

Slide 12

Slide 12 text

©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

Slide 13

Slide 13 text

©2024 Kyash Inc. マテリアルシステムを置き換える ● Primary/Success/Error/etc… ● デザイナーと認識を合わせやすいように 命名などはKIGに揃える e.g. Colors 13

Slide 14

Slide 14 text

©2024 Kyash Inc. マテリアルシステムを置き換える/Colors 14 https://developer.android.com/develop/ui/compose/designsystems/custom?hl=ja#replacing-systems

Slide 15

Slide 15 text

©2024 Kyash Inc. マテリアルシステムを置き換える ● 独自のシステム ● CompositionLocalを活用する Spacing 15

Slide 16

Slide 16 text

©2024 Kyash Inc. マテリアルシステムを置き換える/Spacing 16

Slide 17

Slide 17 text

©2024 Kyash Inc. マテリアルシステムを置き換える/Spacing 17

Slide 18

Slide 18 text

©2024 Kyash Inc. マテリアルコンポーネントを利用する ● マテリアルコンポーネントの資産を活かす ● 極力ピュアな実装意識する e.g. Buttons 18

Slide 19

Slide 19 text

©2024 Kyash Inc. マテリアルコンポーネントを利用する/Buttons 19 ● マテリアルコンポーネントのAPIに合わせる ● 色のレパートリーをデフォルト実装で表現

Slide 20

Slide 20 text

©2024 Kyash Inc. マテリアルコンポーネントを利用する/Buttons 20 ● マテリアルコンポーネントのAPIに合わせる ● 色のレパートリーをデフォルト実装で表現

Slide 21

Slide 21 text

©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

Slide 22

Slide 22 text

©2024 Kyash Inc. マテリアルコンポーネントを利用する/Buttons/Easy 22 ● Stringを受け取るコンポーザブルも用意 ● 標準のボタンをEasyに使う

Slide 23

Slide 23 text

©2024 Kyash Inc. 独自のマスターコンポーネント 23 e.g. Cell ● ラベルと値を表示するコンポーネント ● テキストのスタイルなどは変動がある

Slide 24

Slide 24 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 24

Slide 25

Slide 25 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 25 🤯

Slide 26

Slide 26 text

©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

Slide 27

Slide 27 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 27 󰗨

Slide 28

Slide 28 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 28 スロットベースでも ベーシックなスタイルを適用したい ● ラベルとその値のテキストはBodyスタイル ● 値のテキストカラーはtextColorTertialy ● スロットで毎回指定するのは避けたい 󰢁

Slide 29

Slide 29 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 29

Slide 30

Slide 30 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 30

Slide 31

Slide 31 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 31

Slide 32

Slide 32 text

©2024 Kyash Inc. 独自のマスターコンポーネント/Cell 32

Slide 33

Slide 33 text

©2024 Kyash Inc. Thank you!! ● マテリアルシステムをベースにKIGデザインシステムを実装 ● マテリアルコンポーネントの資産を活かしたAPIの設計 ● スロットベースのレイアウトを活用して独自コンポーネントを実装 ● 生産性の向上と一貫性のあるデザインをアプリに適用することができる まとめ󰢥 33

Slide 34

Slide 34 text

©2024 Kyash Inc.

Slide 35

Slide 35 text

©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