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
100
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
Jetpack Composeとデザインシステム
rmakiyama
0
590
TextField theme in Compose
rmakiyama
0
220
Androidエンジニアが1人という不安と向き合う
rmakiyama
5
6.5k
Jetpack Compose Canvas入門
rmakiyama
0
1.3k
HiltはDIをどうやってやっているのか
rmakiyama
1
220
Radiotalk Androidアプリにおけるモジュール分割の課題とこれから
rmakiyama
1
260
Androidでオーディオアプリを作るということ
rmakiyama
1
3.2k
getChangePayload in DiffUtil
rmakiyama
0
2.9k
ContextThemeWrapperでthemeをより賢く
rmakiyama
1
2k
Other Decks in Technology
See All in Technology
Delta Commit…の最近...
akuwano
2
130
管理画面とユーザー機能の調和を取り戻す!~クエリパフォーマンス改善の成功物語~ / Restore harmony between administrative and user functions!
minisera
1
350
複数の外部サービスデータの統合と変換を実現する Railsのインポートアーキテクチャ / Rails import architecture for integration and transformation of multiple external service data
aiandrox
0
370
さくっと実践!Postmanを活用した高品質で持続可能なAPI管理
yokawasa
5
370
Reality is not an End-to-End Prediction Problem: Applied NLP in the Age of Generative AI
inesmontani
PRO
0
220
とある事業会社にとっての Kaggler の魅力
hakubishin3
7
1.6k
寒冷地稲作の歴史にみるコミュニティ
miu_crescent
2
140
Road to Single Activity Uncovered
yurihondo
0
110
VPoE Meetup Vol.1 VPoEとして実践してきたことと反省点
coconala_engineer
2
190
Deep dive into Nuxt Server Components
wattanx
1
1.4k
エンジニアのドメイン知識獲得コストを低減するアプリケーションデザイン
ryo_nagata_
3
170
プログラミング写経のすすめ
natsutan
0
180
Featured
See All Featured
Building an army of robots
kneath
302
42k
How GitHub (no longer) Works
holman
311
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Raft: Consensus for Rubyists
vanstee
136
6.6k
GitHub's CSS Performance
jonrohan
1030
460k
How to train your dragon (web standard)
notwaldorf
88
5.6k
We Have a Design System, Now What?
morganepeng
50
7.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
No one is an island. Learnings from fostering a developers community.
thoeni
19
2.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9k
GraphQLとの向き合い方2022年版
quramy
43
13k
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