$30 off During Our Annual Pro Sale. View Details »

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の実装差異を無くす 新田 陸

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

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

  4. チームラボについて

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    存在しない?
  35. ネイティブのコードをKMMから呼び出す方法

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

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

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

    iOS Android 共通の インターフェース
  39. 3. 実際にやってみたチーム開発での課題

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

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

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

  43. まとめ

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

  45. まとめ - iOSエンジニアがKMMにもつ疑問 Objective-C フレームワーク になる CI/CDサービスで フレームワーク 管理 Android

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

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