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
920
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin MultiplatformでもKSPを使う
Mobile勉強会 Wantedly × チームラボ #10
https://teamlab.connpass.com/event/289576/
Mori Atsushi
August 01, 2023
More Decks by Mori Atsushi
See All by Mori Atsushi
モバイルアプリ開発のためのDesign Doc実践ガイド
moriatsushi
4
680
原則から考える保守しやすいComposable関数設計
moriatsushi
3
830
Kotlin Coroutinesで共有リソースに正しくアクセスする
moriatsushi
6
5.6k
Jetpack Composeで Reduxっぽいアーキテクチャを試す
moriatsushi
2
1.2k
実例から学ぶJetpack Composeのパフォーマンス改善
moriatsushi
3
7.7k
WindowInsets 2022 feat. Jetpack Compose #ca_aab
moriatsushi
1
1.7k
Jetpack Composeで UI Catalog Libraryを 作っている話 #android_meetup
moriatsushi
1
1.4k
良いコードとは何か - エンジニア新卒研修 スライド公開
moriatsushi
103
160k
AndroidでKotlin Coroutineを使うときの注意点 | CA BASE NEXT
moriatsushi
4
3.5k
Other Decks in Technology
See All in Technology
穢れた技術選定について
watany
17
5.5k
AIが実装を自走する時代の認知負債との戦い
lycorptech_jp
PRO
0
160
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
300
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.3k
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
480
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
850
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
3
4.1k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
750
はじめてのWDM
miyukichi_ospf
1
150
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Accessibility Awareness
sabderemane
1
160
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Being A Developer After 40
akosma
91
590k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
Optimizing for Happiness
mojombo
378
71k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
340
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
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