Slide 1

Slide 1 text

Kotlin Multiplatform Mobile で iOSとAndroidの実装差異を無くす 新田 陸

Slide 2

Slide 2 text

自己紹介 チームラボ株式会社 新田 陸 iOSエンジニア 5年目

Slide 3

Slide 3 text

チームラボについて チームラボプラネッツ チームラボボーダレス

Slide 4

Slide 4 text

チームラボについて

Slide 5

Slide 5 text

Kotlin Multiplatform Mobile (KMM) 「ネイティブのUXを保ったまま、ロジックをiOSとAndroidで共有する」

Slide 6

Slide 6 text

我々のチームでは チームラボでは2年前からKMMを使用しています なぜ我々がKMMを採用するに至ったか 1. ロジック部分の品質を求められるプロジェクトだった 2. OS間での実装差異が問題となっている

Slide 7

Slide 7 text

OS間での実装差異の解消 原因としては - 実装するエンジニアの認識のズレ - 言語仕様の違い 例えどれだけ念入りにやったとしても、この問題はいつか必ず発生する

Slide 8

Slide 8 text

OS間での実装差異の解消 KMMはiOSとAndroidで、同じコードを使う ことでOS間の実装差異を無くす Kotlin Multiplatform Mobile → iOSでKotlinのコードを動作させる

Slide 9

Slide 9 text

目次 1. KMMを使うことのメリットと役割分担 2. iOSエンジニアがKMMにもつ疑問 3. 実際にやってみたチーム開発での課題

Slide 10

Slide 10 text

1. KMMを使うことのメリットと役割分担

Slide 11

Slide 11 text

メリット コードを共通化することでOS間での動作の差異を減らす

Slide 12

Slide 12 text

すべてのコードをKMMで共通化すべきか UI Bluetooth ビジネスロジック APIの差異が大きい ❌共通化が難しい OSのAPIの差異で考える APIの差異が小さい ⭕共通化しやすい

Slide 13

Slide 13 text

すべてのコードをKMMで共通化すべきか KMM公式の使用例 KMM+SwiftUI

Slide 14

Slide 14 text

KMMとネイティブでの役割分担 KMM担当 View ViewModel ネイティブ担当

Slide 15

Slide 15 text

我々のチームではここまでの層を任せることにした KMM担当 ネイティブ担当 iOSメンバー Androidメンバー KMMメンバー View ViewModel

Slide 16

Slide 16 text

2. iOSエンジニアがKMMにもつ疑問

Slide 17

Slide 17 text

Q. KotlinのコードはどのようにSwift上で動作するのか? Q. KMMをiOSプロジェクトに組み込む方法は? Q. リポジトリの管理方法については? Q. 我々が普段やっているところをKMMでやるならどうするのか?

Slide 18

Slide 18 text

Q. KotlinのコードはどのようにSwift上で動作するのか?

Slide 19

Slide 19 text

Q. KotlinのコードはどのようにSwift上で動作するのか? A. Objective-Cのフレームワークに変換して利用する Kotlinのコード Objective-C Framework KMM

Slide 20

Slide 20 text

Q. KMMをiOSプロジェクトに組み込む方法は?

Slide 21

Slide 21 text

Q. KMMをiOSプロジェクトに組み込む方法は? A. Objective-Cのフレームワークに変換して利用する

Slide 22

Slide 22 text

Q. リポジトリの管理方法については?

Slide 23

Slide 23 text

Q. リポジトリの管理方法については 公式のサンプルでは全てのコードを一つのリポジトリで管理 共同リポジトリ .swift 全てのコードを一つのリポジトリに .kt android .kt KMM

Slide 24

Slide 24 text

Q. リポジトリの管理方法については フレームワークさえあればよい Objective-C Framework

Slide 25

Slide 25 text

Framework リポジトリ KMMリポジトリ .kt リポジトリを3つに分割する iOSリポジトリ .swift 更新のたびに 再生成 CocoaPods SwiftPM などで取得

Slide 26

Slide 26 text

KMM更新しました! Pullしてビルドします! 1. KMMのビルド環境を揃える 2. KMMのリポジトリをPullする 3. KMMをビルドする

Slide 27

Slide 27 text

CI/CDサービスの利用

Slide 28

Slide 28 text

Framework リポジトリ KMMリポジトリ .kt CI/CDによるフレームワークの自動ビルド iOSリポジトリ .swift CI/CD

Slide 29

Slide 29 text

Q. iOSで普段やっているところをKMMでやるならどうするのか?

Slide 30

Slide 30 text

Q. iOSで普段やっているところをKMMでやるならどうするのか? URL Session Core Data KeyChain データ永続化 API通信 キーチェーン

Slide 31

Slide 31 text

Q. iOSで普段やっているところをKMMでやるならどうするのか? iOS/Swift URL Session Core Data KeyChain

Slide 32

Slide 32 text

Q. iOSで普段やっているところをKMMでやるならどうするのか? iOS/Swift URL Session Core Data KeyChain KMM/Kotlin Ktor SQLDelight Kissme

Slide 33

Slide 33 text

Q. iOSで普段やっているところをKMMでやるならどうするのか? iOS/Swift Core ML 機械学習 Local Authentication 生体認証 KMM/Kotlin

Slide 34

Slide 34 text

Q. iOSで普段やっているところをKMMでやるならどうするのか? iOS/Swift Core ML 機械学習 KMM/Kotlin Local Authentication 生体認証 存在しない?

Slide 35

Slide 35 text

ネイティブのコードをKMMから呼び出す方法

Slide 36

Slide 36 text

iOS独自のコードをKMMから呼び出す方法 KMM iOS Android

Slide 37

Slide 37 text

iOS独自のコードをKMMから呼び出す方法 KMM iOS Android MLKit Biometric Core ML Local Authentication

Slide 38

Slide 38 text

iOS独自のコードをKMMから呼び出す方法 KMM iOS Android MLKit Biometric Core ML Local Authentication iOS Android 共通の インターフェース

Slide 39

Slide 39 text

3. 実際にやってみたチーム開発での課題

Slide 40

Slide 40 text

KMMのコードへの理解 iOSメンバー Androidメンバー KMMメンバー ネイティブ KMM

Slide 41

Slide 41 text

KMMのコードへの理解 iOSメンバー Androidメンバー KMMメンバー ビジネスロジック・ インターフェースの理解 KMMの利用箇所の把握 ネイティブ KMM

Slide 42

Slide 42 text

KMMのコードへの理解 ネイティブとKMMの相互理解を密に行う ビジネスロジックを理解したiOSメンバーであれば、KotlinのコードさえかければKMMの 実装を担うこともできる →iOSメンバーがKMMの実装に入ることもできる

Slide 43

Slide 43 text

まとめ

Slide 44

Slide 44 text

まとめ - KMMを使うことのメリットと役割分担 KMMはiOSとAndroidで、同じコードを使うことでOS間の実装差異を無くす ビジネスロジックをKMMで共通化するのが良い

Slide 45

Slide 45 text

まとめ - iOSエンジニアがKMMにもつ疑問 Objective-C フレームワーク になる CI/CDサービスで フレームワーク 管理 Android KMM iOS ネイティブとKMMで 平行して開発

Slide 46

Slide 46 text

まとめ - 実際にやってみたチーム開発での課題 iOSメンバー Androidメンバー KMMメンバー ビジネスロジック・ インターフェースの理解 KMMの利用箇所の把握 ネイティブ KMM

Slide 47

Slide 47 text

チームラボについて このように我々はチーム開発について 日々改善を進めております。 ご興味・ご質問などある方はスポンサー ブースで受け付けております。 チームラボ 公式ページ https://www.team-lab.com/