Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KMPプロジェクトでマニュアルDIを使う選択
Search
rmakiyama
October 23, 2024
Technology
0
350
KMPプロジェクトでマニュアルDIを使う選択
potatotips #89 iOS/Android開発Tips共有会での登壇資料です 🙋🏻♂️
*
https://potatotips.connpass.com/event/331173/
rmakiyama
October 23, 2024
Tweet
Share
More Decks by rmakiyama
See All by rmakiyama
UI State設計とテスト方針
rmakiyama
4
1k
Jetpack Composeとデザインシステム
rmakiyama
0
960
TextField theme in Compose
rmakiyama
0
280
Androidエンジニアが1人という不安と向き合う
rmakiyama
6
6.8k
Jetpack Compose Canvas入門
rmakiyama
0
1.4k
HiltはDIをどうやってやっているのか
rmakiyama
1
280
Radiotalk Androidアプリにおけるモジュール分割の課題とこれから
rmakiyama
1
310
Androidでオーディオアプリを作るということ
rmakiyama
1
3.3k
getChangePayload in DiffUtil
rmakiyama
0
3.1k
Other Decks in Technology
See All in Technology
JavaのMCPサーバーで体験するAIエージェントの世界
tatsuya1bm
1
220
SwiftUI Transaction を徹底活用!ZOZOTOWN UI開発での活用事例
tsuzuki817
1
570
型システムを知りたい人のための型検査器作成入門
mame
13
3.2k
これならできる!Kotlin・Spring・DDDを活用したAll in oneのマイクロサービス開発術
demaecan
0
230
キャッシュレス決済のプロダクトから決済基盤への進化
b1a9id
0
220
ゆるSRE #11 LT
okaru
1
510
Introduction to Bill One Development Engineer
sansan33
PRO
0
250
Amazon DevOps Guru のベースラインを整備して1ヶ月ほど運用してみた #jawsug_asa / Amazon DevOps Guru trial
masahirokawahara
3
230
AIエージェント実践集中コース LT
okaru
1
200
Agent Development Kit によるエージェント開発入門
enakai00
19
2.8k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
38k
データ戦略部門 紹介資料
sansan33
PRO
1
3.2k
Featured
See All Featured
Making Projects Easy
brettharned
116
6.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
670
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Designing Experiences People Love
moore
142
24k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Building an army of robots
kneath
306
45k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
123
52k
Become a Pro
speakerdeck
PRO
28
5.4k
Into the Great Unknown - MozCon
thekraken
39
1.8k
Transcript
©2024 Kyash Inc. ©2024 Kyash Inc. KMPプロジェクトで マニュアルDIを使う選択 2024/10/23 rmakiyama(MAKIYAMA
Ryo) potatotips #89 iOS/Android開発Tips共有会
©2024 Kyash Inc. 2 • Kyash Inc (2022/10 -) •
Android Engineer • Engineering Manager • @_rmakiyama • @rmakiyama MAKIYAMA Ryo 自己紹介
©2024 Kyash Inc. ©2024 Kyash Inc. Q: KMP導入しているよ 3
3
©2024 Kyash Inc. ©2024 Kyash Inc. Q: KMP興味あるよ 4
4
©2024 Kyash Inc. Kotlin MultiplatformとDI • InsertKoinIO/koin • kosi-libs/Kodein •
evant/kotlin-inject • mori-atsushi/koject • etc… KMPにおけるDIライブラリの選択肢(Daggerは使えない…!) 5
©2024 Kyash Inc. Kotlin MultiplatformとDI • DI = DIライブラリではない •
外部から依存を注入できればOK ◦ 依存性逆転 ◦ テスタブル DIライブラリを使わないという選択肢 6
©2024 Kyash Inc. DIライブラリを使わないという選択肢 7 • われわれがやりたいことはこれ!
©2024 Kyash Inc. DIライブラリを使わないという選択肢 8 • われわれがやりたいことはこれ! Constructor injection!💉
©2024 Kyash Inc. ©2024 Kyash Inc. Kyashの事例を紹介🗡 9 9 ※
紹介するコードは説明のため実際のコードを簡略化したものとなります
©2024 Kyash Inc. KyashとKotlin Multiplatform • 2017年4月頃からAndroidアプリの開発開始 • 2021年10月ごろからKMP導入開始 •
各OSの既存コードではDIライブラリを導入済み ◦ Android: Hilt ◦ iOS: Swinject KyashのKMPコンテキスト 10
©2024 Kyash Inc. KyashとKotlin Multiplatform • 2017年4月頃からAndroidアプリの開発開始 • 2021年10月ごろからKMP導入開始 •
各OSの既存コードではDIライブラリを導入済み ◦ Android: Hilt ◦ iOS: Swinject KyashのKMPコンテキスト 11 KMP向けDIライブラリへの 置き換えコスト大
©2024 Kyash Inc. KyashとKotlin Multiplatform 手動によるDependency injectionを採用 • 独自の依存関係DIコンテナクラスを実装 •
クライアントはDIコンテナから必要なインスタンスを取得 • 引き続きAndroid/iOSではそれぞれのDIライブラリを利用 12 FYI: https://developer.android.com/training/dependency-injection/manual
©2024 Kyash Inc. KyashのKMP構成概略 13 • ReactorKitを汲んだMVIライクな設計 ◦ State/Action/Event •
各OSでWrapper実装がある
©2024 Kyash Inc. 手動によるDependency injection 14
©2024 Kyash Inc. 手動によるDependency injection 15
©2024 Kyash Inc. 手動によるDependency injectionとHiltの相互運用 16
©2024 Kyash Inc. Thank you!! • DI=DIライブラリではない • チームやプロダクトにあったDIの選択をしよう •
各社のいろんな事例が聞きたい! まとめ 17
©2024 Kyash Inc.
©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