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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
rmakiyama
October 23, 2024
Technology
0
490
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
1.2k
Jetpack Composeとデザインシステム
rmakiyama
0
1.2k
TextField theme in Compose
rmakiyama
0
320
Androidエンジニアが1人という不安と向き合う
rmakiyama
6
7k
Jetpack Compose Canvas入門
rmakiyama
0
1.5k
HiltはDIをどうやってやっているのか
rmakiyama
1
310
Radiotalk Androidアプリにおけるモジュール分割の課題とこれから
rmakiyama
1
350
Androidでオーディオアプリを作るということ
rmakiyama
1
3.3k
getChangePayload in DiffUtil
rmakiyama
0
3.3k
Other Decks in Technology
See All in Technology
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
140
ナレッジワーク IT情報系キャリア研究セッション資料(情報処理学会 第88回全国大会 )
kworkdev
PRO
0
200
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
250
Everything Claude Code を眺める
oikon48
7
4.3k
Tebiki Engineering Team Deck
tebiki
0
27k
Cortex Code CLI と一緒に進めるAgentic Data Engineering
__allllllllez__
0
290
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
2
130
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
830
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.2k
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
180
Lambda Web AdapterでLambdaをWEBフレームワーク利用する
sahou909
0
130
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
710
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
The SEO identity crisis: Don't let AI make you average
varn
0
410
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
76
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Abbi's Birthday
coloredviolet
2
5.4k
Deep Space Network (abreviated)
tonyrice
0
90
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
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