Kotlin Multiplatform Mobile でiOSとAndroidの実装差異を無くす
by
teamLab
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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/