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

KMPプロジェクトでマニュアルDIを使う選択

rmakiyama
October 23, 2024

 KMPプロジェクトでマニュアルDIを使う選択

potatotips #89 iOS/Android開発Tips共有会での登壇資料です 🙋🏻‍♂️
* https://potatotips.connpass.com/event/331173/

rmakiyama

October 23, 2024
Tweet

More Decks by rmakiyama

Other Decks in Technology

Transcript

  1. ©2024 Kyash Inc. 2 • Kyash Inc (2022/10 -) •

    Android Engineer • Engineering Manager • @_rmakiyama • @rmakiyama MAKIYAMA Ryo 自己紹介
  2. ©2024 Kyash Inc. Kotlin MultiplatformとDI • InsertKoinIO/koin • kosi-libs/Kodein •

    evant/kotlin-inject • mori-atsushi/koject • etc… KMPにおけるDIライブラリの選択肢(Daggerは使えない…!) 5
  3. ©2024 Kyash Inc. Kotlin MultiplatformとDI • DI = DIライブラリではない •

    外部から依存を注入できればOK 󰢍 ◦ 依存性逆転 ◦ テスタブル DIライブラリを使わないという選択肢 6
  4. ©2024 Kyash Inc. ©2024 Kyash Inc. Kyashの事例を紹介🗡󰜲 9 9 ※

    紹介するコードは説明のため実際のコードを簡略化したものとなります
  5. ©2024 Kyash Inc. KyashとKotlin Multiplatform • 2017年4月頃からAndroidアプリの開発開始 • 2021年10月ごろからKMP導入開始 •

    各OSの既存コードではDIライブラリを導入済み ◦ Android: Hilt ◦ iOS: Swinject KyashのKMPコンテキスト 10
  6. ©2024 Kyash Inc. KyashとKotlin Multiplatform • 2017年4月頃からAndroidアプリの開発開始 • 2021年10月ごろからKMP導入開始 •

    各OSの既存コードではDIライブラリを導入済み ◦ Android: Hilt ◦ iOS: Swinject KyashのKMPコンテキスト 11 KMP向けDIライブラリへの 置き換えコスト大
  7. ©2024 Kyash Inc. KyashとKotlin Multiplatform 手動によるDependency injectionを採用 • 独自の依存関係DIコンテナクラスを実装 •

    クライアントはDIコンテナから必要なインスタンスを取得 • 引き続きAndroid/iOSではそれぞれのDIライブラリを利用 12 FYI: https://developer.android.com/training/dependency-injection/manual
  8. ©2024 Kyash Inc. Appendix 19 https://insert-koin.io/docs/reference/koin-mp/kmp/ https://kosi-libs.org/kodein/7.22/index.html https://github.com/evant/kotlin-inject https://mori-atsushi.github.io/koject/ https://developer.android.com/training/dependency-injection/manual

    https://github.com/DroidKaigi/conference-app-2024/blob/main/core/model/src/commonMain /kotlin/io/github/droidkaigi/confsched/model/compositionlocal/LocalRepository.kt https://blog.kyash.co/entry/2023/12/05/095604