Slide 1

Slide 1 text

© 2024 Wantedly, Inc. Make your Android app into Multiplatform app DroidKaigi 2024 AfterNight 2024/10/10 ウォンテッドリー株式会社 久保出雅俊

Slide 2

Slide 2 text

© 2024 Wantedly, Inc. wantedly.com/id/kubode @swiz_ard @kubode

Slide 3

Slide 3 text

© 2024 Wantedly, Inc. 目的 クロスプラットフォーム開発の1つの可能性を紹介

Slide 4

Slide 4 text

© 2024 Wantedly, Inc. 1つの可能性 Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく

Slide 5

Slide 5 text

© 2024 Wantedly, Inc. 1つの可能性 Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく 👉 既存コードを活かしつつ、継続的にリリース可能

Slide 6

Slide 6 text

© 2024 Wantedly, Inc. Compose Multiplatformとは Jetpack ComposeのKotlin Multiplatform版 ● Composeとほぼ同じAPI ● Android互換を意識したAPI

Slide 7

Slide 7 text

© 2024 Wantedly, Inc. ● パッケージ名がandroidx.compose ● Lifecycle, ViewModel, Navigation ● Multiplatform Resources Compose MultiplatformのAndroidとの互換性

Slide 8

Slide 8 text

© 2024 Wantedly, Inc. Multiplatform Resources Androidのsrc/main/resをある程度そのまま Compose Multiplatformに持ち込める

Slide 9

Slide 9 text

© 2024 Wantedly, Inc. ● AndroidXのKotlin Multiplatform化 ○ Room, DataStore, Paging, etc. ● 各種KotlinライブラリのKMP化、CMP化 ○ Coil, Koin, etc. Compose Multiplatform以外の実現可能性

Slide 10

Slide 10 text

© 2024 Wantedly, Inc. つまり Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく 👉 AndroidのコードがすべてKotlinで、UIがすべてJetpack Composeで、Android依存がほぼなく、すべてのライブラリが KMP対応していれば実現できるはず

Slide 11

Slide 11 text

© 2024 Wantedly, Inc. 実際に途中までやってみた

Slide 12

Slide 12 text

© 2024 Wantedly, Inc. 対象 android/sunflowerをiOSでも動作するようにしてみる 🍴 kubode/sunflower 理由 ● もともとがXMLだったものをCompose化したアプリ ● RoomやPagingなどKMP化したAndroidXを利用 ● ほどよいコード量とテストコード

Slide 13

Slide 13 text

© 2024 Wantedly, Inc. 手順 ● [ ] KMPでないライブラリをKMPへ移行 ○ Gson → KotlinX Serialization ○ Retrofit → Ktor ○ Glide → Coil ○ Dagger → Koin ● [ ] Compose Multiplatform化 ○ res → Multiplatform Resources ○ Navigation ● [ ] iOSターゲットの追加 ○ Androidネイティブなコードをexpect/actualでiOS用に書き直し ○ iOSアプリとして動作させる

Slide 14

Slide 14 text

© 2024 Wantedly, Inc. 手順 ● ✅ KMPでないライブラリをKMPへ移行 ○ Gson → KotlinX Serialization ○ Retrofit → Ktor ○ Glide → Coil ○ Dagger → Koin ● ✅ Compose Multiplatform化 ○ res → Multiplatform Resources ○ Navigation ● [ ] iOSターゲットの追加 ○ Androidネイティブなコードをexpect/actualでiOS用に書き直し ○ iOSアプリとして動作させる

Slide 15

Slide 15 text

© 2024 Wantedly, Inc. 達成できていること ✅ 各手順でAndroidアプリとしてビルド、テスト、動作 つまり… Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく (ただしAndroidでのみ動作)

Slide 16

Slide 16 text

© 2024 Wantedly, Inc. 難点 iOSターゲットを追加すると…

Slide 17

Slide 17 text

© 2024 Wantedly, Inc. 現実の課題 ● Deeplink ● パフォーマンス ● 実施する価値 ● etc.

Slide 18

Slide 18 text

© 2024 Wantedly, Inc. まとめ ● クロスプラットフォーム開発の1つの可能性を紹介 ● Compose MultiplatformのAndroid互換性の良さ ● 個人的には可能性を感じるが、まだまだ早い手法 ○ Deeplinkやパフォーマンスの課題 ○ 時間が解決するはず