Slide 1

Slide 1 text

©2024 Kyash Inc. ©2024 Kyash Inc. KMPプロジェクトで マニュアルDIを使う選択 2024/10/23 rmakiyama(MAKIYAMA Ryo) potatotips #89 iOS/Android開発Tips共有会

Slide 2

Slide 2 text

©2024 Kyash Inc. 2 ● Kyash Inc (2022/10 -) ● Android Engineer ● Engineering Manager ● @_rmakiyama ● @rmakiyama MAKIYAMA Ryo 自己紹介

Slide 3

Slide 3 text

©2024 Kyash Inc. ©2024 Kyash Inc. Q: KMP導入しているよ 󰢥 3 3

Slide 4

Slide 4 text

©2024 Kyash Inc. ©2024 Kyash Inc. Q: KMP興味あるよ 󰢥 4 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

©2024 Kyash Inc. Kotlin MultiplatformとDI ● DI = DIライブラリではない ● 外部から依存を注入できればOK 󰢍 ○ 依存性逆転 ○ テスタブル DIライブラリを使わないという選択肢 6

Slide 7

Slide 7 text

©2024 Kyash Inc. DIライブラリを使わないという選択肢 7 ● われわれがやりたいことはこれ!

Slide 8

Slide 8 text

©2024 Kyash Inc. DIライブラリを使わないという選択肢 8 ● われわれがやりたいことはこれ! Constructor injection!💉

Slide 9

Slide 9 text

©2024 Kyash Inc. ©2024 Kyash Inc. Kyashの事例を紹介🗡󰜲 9 9 ※ 紹介するコードは説明のため実際のコードを簡略化したものとなります

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

©2024 Kyash Inc. KyashとKotlin Multiplatform ● 2017年4月頃からAndroidアプリの開発開始 ● 2021年10月ごろからKMP導入開始 ● 各OSの既存コードではDIライブラリを導入済み ○ Android: Hilt ○ iOS: Swinject KyashのKMPコンテキスト 11 KMP向けDIライブラリへの 置き換えコスト大

Slide 12

Slide 12 text

©2024 Kyash Inc. KyashとKotlin Multiplatform 手動によるDependency injectionを採用 ● 独自の依存関係DIコンテナクラスを実装 ● クライアントはDIコンテナから必要なインスタンスを取得 ● 引き続きAndroid/iOSではそれぞれのDIライブラリを利用 12 FYI: https://developer.android.com/training/dependency-injection/manual

Slide 13

Slide 13 text

©2024 Kyash Inc. KyashのKMP構成概略 13 ● ReactorKitを汲んだMVIライクな設計 ○ State/Action/Event ● 各OSでWrapper実装がある

Slide 14

Slide 14 text

©2024 Kyash Inc. 手動によるDependency injection 14

Slide 15

Slide 15 text

©2024 Kyash Inc. 手動によるDependency injection 15

Slide 16

Slide 16 text

©2024 Kyash Inc. 手動によるDependency injectionとHiltの相互運用 16

Slide 17

Slide 17 text

©2024 Kyash Inc. Thank you!! ● DI=DIライブラリではない ● チームやプロダクトにあったDIの選択をしよう ● 各社のいろんな事例が聞きたい! まとめ󰢥 17

Slide 18

Slide 18 text

©2024 Kyash Inc.

Slide 19

Slide 19 text

©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