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

KMMで始めるマルチプラットフォーム開発

 KMMで始めるマルチプラットフォーム開発

shinsuke-fujita

April 20, 2023
Tweet

More Decks by shinsuke-fujita

Other Decks in Programming

Transcript

  1. 5 • KMP = Kotlin Multiplatformの略 KMMとは? • Kotlinを利⽤して複数プラットフォームに対応したアプリケー ションを開発する技術やそのエコシステム全体を指します。

    Web、モバイル、デスクトップの各プラットフォーム間でアプ リケーションロジックを共有しながら、ユーザーにとってネイ ティブなエクスペリエンスを維持することができます。
  2. 6 • KMM = Kotlin Multiplatform Mobileの略 KMMとは? • Kotlin

    Multiplatform Mobileは、 iOSおよびAndroidアプリ開発の ためのSDKです。クロスプラットフォームとネイティブアプリを 作成する際の利点をすべて兼ね備えています。 • 前述したKotlin Multiplatformに加えて、いくつかのモバイルア プリケーション開発に特化した技術を総称して、 Kotlin Multiplatform Mobileと呼んでいます。 • 実はまだbetaで、2023年末までにstableに昇格予定 「KMM = Kotlin Multiplatform + Mobile Features」
  3. 9 Kotlin Multiplatformの仕組み • Kotlinのマルチプラットフォームライブラリを使⽤すると、マルチプラッ トフォームロジックを共通コードとプラットフォーム固有のコードで再利 ⽤することができます。共通コードは、HTTP、serialization、coroutines の管理などの⽇常的なタスクをカバーする⼀連のライブラリに依存するこ とができます。 •

    プラットフォームと相互運⽤するためには、プラットフォームに特化した バージョンのKotlinを使⽤します。Kotlinのプラットフォーム固有バージョ ン(Kotlin/JVM、Kotlin/JS、Kotlin/Native)には、Kotlin⾔語の拡張、プ ラットフォーム固有のライブラリやツールが含まれています。 • これらのプラットフォームを通じて、プラットフォームのネイティブコー ド(JVM、JS、Native)にアクセスし、すべてのネイティブ機能を活⽤する ことができます。
  4. 15 • 導⼊準備 Android Studio/Xcode、JDK、KotlinMultiplatform Mobile pluginなどをインストール KMMプロジェクトの作成⽅法 1. Android

    StudioにてNew Project => Kotlin Multiplatform App を選択 2. アプリ名やパッケージ名を⼊⼒、初期モジュールの名前を決め る、iOS framework distributionを選択してFinish!
  5. • 作成直後のプロジェクト構成は以下の通り KMMプロジェクトの作成⽅法 • androidApp・・・AndroidアプリケーションにビルドするKotlinモ ジュール。通常のAndroidライブラリとしてsharedモジュールに依 存する。 • iosApp・・・iOSアプリケーションにビルドするXcodeプロジェク ト。iOS

    frameworkとしてsharedモジュールに依存する。 • shared・・・両OSに共通するロジック、共有すべきコードを含む Kotlinモジュール。3つのsource setで構成されている • commonMain・・・プラットフォーム共通のソースセット • androidMain/iosMain・・・それぞれのOS向けのソースセット 16
  6. 18 • 個⼈で作っていたQiitaAPIを⽤いて記事⼀覧を取得する仕組みを KMMプロジェクトで作ってみました(Androidのみ) 実践編 Multiplatform dependencies Navtive dependencies 通信

    Ktor、Ktrofitなど Retrofit DI Koin、Koject、kotlin-injectなど Hilt、Dagger ViewModel moko-mvvmなど Android lifecycle ViewModel • なお、commonMainではマルチモジュールライブラリしか利⽤ できないのでHiltやRetrofitというAndroid開発では⼀般的なライ ブラリが使えない
  7. 19 • モジュール構成 実践編 app feature domain Androidプロジェクト KMMプロジェクト data

    androidApp iosApp feature shared domain data ※sharedモジュール内でそ れ以降のレイヤーのクラスを 持つリポジトリも散⾒されて るので、何がいいのかはまだ 確⽴されてない?
  8. 20 • モジュール構成 実践編 l androidApp l Application、MainActivity l data

    l repository、datasource、api、response l domain l usecase l feature l Android UI(JetpackCompose) l iosApp l SwiftUI l shared l KoinModule
  9. 21 • 実⾏結果 実践編 l androidApp l iosApp framework not

    found Pods_iosApp・・・ linker command failed with exit code 1・・・ no such module ʻsharedʼ・・・ Execution failed for task ':shared:embedAndSignAppleFrameworkForXcode'. > Please run the embedAndSignAppleFrameworkForXcode task from Xcode ('SDK_NAME', 'CONFIGURATION', 'TARGET_BUILD_DIR', 'ARCHS' and 'FRAMEWORKS_FOLDER_PATH' not provided) モウユルシテ・・・
  10. 22 • KMM導⼊によるメリットもあるが、デメリット(Java資産が使えない、iOSのデ バッグがしづらい)も結構あるので導⼊には設計をしっかりして⽤法⽤量を守るべ し まとめ • やってみて意外?とiOSの知識が求められるケースがあるので、Androidエンジニ ア単独で⾊々やろうと⼤変になりがちな気がする •

    ライブラリも共有コードではAndroid開発で使えたものが使えないなど制約がある ので、事前の設計などでしっかりと詳細を決めた⽅がよさそう • KMMはまだBetaなので、ググってみてもKMMプロジェクトの形は⾊々模索され てる • 逆に⾔えば探求するチャンスとも⾔えそう
  11. 23 ご 清 聴 あ り が と う ご

    ざ い ま し た ! ! ! まとめ
  12. 24 Kotlin Mulitplatform https://kotlinlang.org/docs/multiplatform.html How Kotlin Multiplatform works https://kotlinlang.org/docs/multiplatform.html#how-kotlin-multiplatform-works Install

    the necessary tools https://kotlinlang.org/docs/multiplatform-mobile-setup.html#install-the-necessary-tools Connect to platform-specific APIs https://kotlinlang.org/docs/multiplatform-connect-to-apis.html Get started with Kotlin Multiplatform for mobile https://kotlinlang.org/docs/multiplatform-mobile-getting-started.html#0 参考リンク