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
Kotlin MultiplatformでもKSPを使う
Search
Mori Atsushi
August 01, 2023
Technology
1
680
Kotlin MultiplatformでもKSPを使う
Mobile勉強会 Wantedly × チームラボ #10
https://teamlab.connpass.com/event/289576/
Mori Atsushi
August 01, 2023
Tweet
Share
More Decks by Mori Atsushi
See All by Mori Atsushi
Kotlin Coroutinesで共有リソースに正しくアクセスする
moriatsushi
6
3.9k
Jetpack Composeで Reduxっぽいアーキテクチャを試す
moriatsushi
2
860
実例から学ぶJetpack Composeのパフォーマンス改善
moriatsushi
2
6.4k
WindowInsets 2022 feat. Jetpack Compose #ca_aab
moriatsushi
1
1.4k
Jetpack Composeで UI Catalog Libraryを 作っている話 #android_meetup
moriatsushi
1
1.1k
良いコードとは何か - エンジニア新卒研修 スライド公開
moriatsushi
89
140k
AndroidでKotlin Coroutineを使うときの注意点 | CA BASE NEXT
moriatsushi
4
2.9k
新卒1年目で Androidアプリの アーキテクチャ移行を主導した話
moriatsushi
1
420
マルチモジュールでandroidアプリを救う | Scramble Tech #0
moriatsushi
1
1.1k
Other Decks in Technology
See All in Technology
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
500
Taming you application's environments
salaboy
0
190
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
170
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
620
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
We Have a Design System, Now What?
morganepeng
50
7.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Agile that works and the tools we love
rasmusluckow
327
21k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Typedesign – Prime Four
hannesfritz
40
2.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Writing Fast Ruby
sferik
627
61k
Building Applications with DynamoDB
mza
90
6.1k
Transcript
.PSJ"UTVTIJ .PCJMFษڧձ8BOUFEMZºνʔϜϥϘ ,PUMJO.VMUJQMBUGPSNͰ,41Λ͏ ,PUMJO.VMUJQMBUGPSN
株式会社サイバーエージェント 株式会社CyberZ OPENREC.tv 2019年度 未踏スーパークリエータ Mori Atsushi Twitter: @at_sushi_at
2019年度 未踏スーパークリエータ LINE株式会社(2023年4⽉〜) Android application engineer 詳解 Kotlin Coroutines [ 2021 ] Katalog / Koject / InsetsX
Kotlin Multiplatform Android / JVMだけでなく、iOSやWeb等、様々な プラットフォームでもKotlinが動作する 最近だとComposeも マルチプラットフォーム対応され、
UIの共通化も🙌 IUUQTLPUMJOMBOHPSHEPDTNVMUJQMBUGPSNIUNM
KSP (Kotlin Symbol Processing API) 軽量なコンパイラプラグインを作成するためのAPI ソースコードを解析し、コードを⽣成することができる インクリメンタル処理で⾼速に動作 様々なライブラリで使われている Room
/ Moshi / Glide / Epoxy IUUQTHJUIVCDPNHPPHMFLTQ
Kotlin Multiplatformでも KSPが使える! 🚀
プラグインの作成⽅法 ϓϩηοαʔHSBEMFͰಈ͘ͷͰɺ +7.ͷ··Ͱେৎ Kotlin Multiplatform向けでも作り⽅は基本⼀緒
SymbolProcessorを実装していく
利⽤⽅法(Single platform) ϓϥάΠϯΛՃ ϓϩηοαʔΛ༗ޮԽ
利⽤⽅法(Multiplatform) ϓϥοτϑΥʔϜຖʹࢦఆ͕ඞཁ
⽣成したコードを呼び出す 🏃
コード⽣成例 アノテーションをつけたinterfaceの実装を⾃動⽣成する ίʔυੜ ͜ΕΛ͍͍ͨ
Single platformの場合 普通に呼び出して使える
Multiplatformのプロジェクト ソースコードを階層構造にして管理できる IUUQTLPUMJOMBOHPSHEPDTNVMUJQMBUGPSNEJTDPWFSQSPKFDUIUNM
Multiplatformからのコード⽣成 プラットフォームごとにコードが⽣成される → どの階層から呼び出せるのかわからない CVJMEHFOFSBUFELTQ ᵓᴷᴷMJOVY9 ᴹᵋᴷᴷMJOVY9.BJO ᴹᵋᴷᴷ%VNNZ4BNQMFLU ᵓᴷᴷNJOHX9
ᴹᵋᴷᴷNJOHX9.BJO ᴹᵋᴷᴷ%VNNZ4BNQMFLU ᵓᴷᴷNBDPT9 ᴹᵋᴷᴷNBDPT9.BJO ᴹᵋᴷᴷ%VNNZ4BNQMFLU ᵋᴷᴷ 4BNQMFLU
呼び出せるが、IDEで認識してくれない Multiplatformの場合 ͘දࣔ͞ΕΔ BVUPJNQPSU͞Εͳ͍
クイズ:どっちが呼び出される?
正解:② ,PUMJOίϯύΠϥ Ұ൪͍ۙܕΛબͯ͘͠ΕΔ
IDEが認識してくれない回避策 ۭͷ࣮Λ༻ҙ͢Δ ͘ͳΒͳ͍
IDEが認識してくれない回避策 ͜ΕΛࣗಈੜ͢Δ ࣗಈੜ͞ΕͨίʔυΛݺΜͰ͘ΕΔ
引数の増減でも可能 Ҿ͕গͳ͍ํ͕ݺΕΔ
回避策の問題点 ࣗಈੜ͞Εͯͳͯ͘ίϯύΠϧ͕௨Δ Ϋϥογϡ͢Δ
理想的には? Source setごとにコードが⽣成 できると良さそう IUUQTHJUIVCDPNHPPHMFLTQJTTVFT DPNNPO.BJO EFTLUPQ.BJO MJOVY9.BJO HFOFSBUFELTQDPNNPO.BJO HFOFSBUFELTQEFTLUPQ.BJO
HFOFSBUFELTQMJOVY9.BJO
Koject KSPを使ったKotlin Multiplatform向けの DIコンテナライブラリ アノテーションで簡単に配布 マルチモジュールに対応 コンパイル時の依存グラフの確認 IUUQTHJUIVCDPNNPSJBUTVTIJLPKFDU