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

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

teamLab
PRO
September 16, 2022

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

iOSDC2022に公開されたセッション「Kotlin Multiplatform Mobile でiOSとAndroidの実装差異を無くす」のプレゼンテーションです。

チームラボでは、スマホアプリ開発者を募集しています。
少しでも、チームラボにご興味をお持ち頂けましたら、採用ページをご覧頂けますと幸いです。
https://www.team-lab.com/recruit/

teamLab
PRO

September 16, 2022
Tweet

More Decks by teamLab

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. チームラボについて

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. CI/CDサービスの利用

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  43. まとめ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide