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
520
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
5
2.4k
Jetpack Composeで Reduxっぽいアーキテクチャを試す
moriatsushi
2
660
実例から学ぶJetpack Composeのパフォーマンス改善
moriatsushi
2
5.7k
WindowInsets 2022 feat. Jetpack Compose #ca_aab
moriatsushi
1
1.3k
Jetpack Composeで UI Catalog Libraryを 作っている話 #android_meetup
moriatsushi
1
960
良いコードとは何か - エンジニア新卒研修 スライド公開
moriatsushi
84
140k
AndroidでKotlin Coroutineを使うときの注意点 | CA BASE NEXT
moriatsushi
4
2.7k
新卒1年目で Androidアプリの アーキテクチャ移行を主導した話
moriatsushi
1
390
マルチモジュールでandroidアプリを救う | Scramble Tech #0
moriatsushi
1
960
Other Decks in Technology
See All in Technology
Adaptor, Helmet, SSG
watany
0
130
Recap: Kotlin Language Features in 2.0 and Beyond (Michail Zarečenskij)
dalinaum
0
360
作りすぎない技術 - API時代の開発努力の在り方について考える / Thinking about the state of development efforts in the API era
yokawasa
4
4k
マルチエージェントで性能が上がったText-to-SQLのいま/Text-to-SQL
yoshidashingo
2
1.3k
まずはパネル「Table」を使い倒してみよう@GrafanaMeetupJapan#2
rinchoku
1
180
120リポジトリを1つのMonorepoに統合した理由
disc99
1
410
RDS for Db2 はじめの一歩・作り方編 #2/ 20240628 First RDS for Db2 creation
kyokonishito
0
180
What's is Bluesky
shinoharata
0
130
[Breizh Camp 2024] L’open-source n’est pas (déjà) mort
abrianceau
0
120
Four Keysだけじゃ足りなくない? 〜俺たちだけのFour Keysを探して〜
rinchsan
2
1.5k
APIライフサイクル管理の進化と生成AIの活用へ
hashitokyo
0
2.7k
個人開発でLIFFとMessagingAPIを使ってわかった5つのこと
diggymo
0
280
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
35
47k
Git: the NoSQL Database
bkeepers
PRO
423
64k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
How to train your dragon (web standard)
notwaldorf
78
5.4k
GraphQLとの向き合い方2022年版
quramy
35
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
10
3.7k
How STYLIGHT went responsive
nonsquared
92
4.9k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
The Brand Is Dead. Long Live the Brand.
mthomps
51
36k
StorybookのUI Testing Handbookを読んだ
zakiyama
14
4.8k
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