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
710
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
4.2k
Jetpack Composeで Reduxっぽいアーキテクチャを試す
moriatsushi
2
920
実例から学ぶJetpack Composeのパフォーマンス改善
moriatsushi
2
6.6k
WindowInsets 2022 feat. Jetpack Compose #ca_aab
moriatsushi
1
1.4k
Jetpack Composeで UI Catalog Libraryを 作っている話 #android_meetup
moriatsushi
1
1.1k
良いコードとは何か - エンジニア新卒研修 スライド公開
moriatsushi
92
150k
AndroidでKotlin Coroutineを使うときの注意点 | CA BASE NEXT
moriatsushi
4
3.1k
新卒1年目で Androidアプリの アーキテクチャ移行を主導した話
moriatsushi
1
450
マルチモジュールでandroidアプリを救う | Scramble Tech #0
moriatsushi
1
1.1k
Other Decks in Technology
See All in Technology
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
850
Docker Desktop で Docker を始めよう
zembutsu
PRO
0
170
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
3.4k
Godot Engineについて調べてみた
unsoluble_sugar
0
400
生成AIのビジネス活用
seosoft
0
110
2025年に挑戦したいこと
molmolken
0
160
FODにおけるホーム画面編成のレコメンド
watarukudo
PRO
2
280
AWS Community Builderのススメ - みんなもCommunity Builderに応募しよう! -
smt7174
0
180
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
350
生成AI × 旅行 LLMを活用した旅行プラン生成・チャットボット
kominet_ava
0
160
いま現場PMのあなたが、 経営と向き合うPMになるために 必要なこと、腹をくくること
hiro93n
9
7.7k
Git scrapingで始める継続的なデータ追跡 / Git Scraping
ohbarye
5
490
Featured
See All Featured
Facilitating Awesome Meetings
lara
51
6.2k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Done Done
chrislema
182
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
870
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Designing for Performance
lara
604
68k
Documentation Writing (for coders)
carmenintech
67
4.5k
Navigating Team Friction
lara
183
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
240
How to Think Like a Performance Engineer
csswizardry
22
1.3k
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