Slide 1

Slide 1 text

.PSJ"UTVTIJ .PCJMFษڧձ8BOUFEMZºνʔϜϥϘ ,PUMJO.VMUJQMBUGPSNͰ΋,41Λ࢖͏ ,PUMJO.VMUJQMBUGPSN

Slide 2

Slide 2 text

株式会社サイバーエージェント 
 株式会社CyberZ OPENREC.tv 2019年度 未踏スーパークリエータ Mori Atsushi Twitter: @at_sushi_at 2019年度 未踏スーパークリエータ LINE株式会社(2023年4⽉〜) Android application engineer 
 詳解 Kotlin Coroutines [ 2021 ] Katalog / Koject / InsetsX

Slide 3

Slide 3 text

Kotlin Multiplatform Android / JVMだけでなく、iOSやWeb等、様々な 
 プラットフォームでもKotlinが動作する 最近だとComposeも 
 マルチプラットフォーム対応され、 
 UIの共通化も🙌 IUUQTLPUMJOMBOHPSHEPDTNVMUJQMBUGPSNIUNM

Slide 4

Slide 4 text

KSP (Kotlin Symbol Processing API) 軽量なコンパイラプラグインを作成するためのAPI ソースコードを解析し、コードを⽣成することができる インクリメンタル処理で⾼速に動作 様々なライブラリで使われている Room / Moshi / Glide / Epoxy IUUQTHJUIVCDPNHPPHMFLTQ

Slide 5

Slide 5 text

Kotlin Multiplatformでも KSPが使える! 🚀

Slide 6

Slide 6 text

プラグインの作成⽅法 ϓϩηοαʔ͸HSBEMFͰಈ͘ͷͰɺ +7.ͷ··Ͱେৎ෉ Kotlin Multiplatform向けでも作り⽅は基本⼀緒

Slide 7

Slide 7 text

SymbolProcessorを実装していく

Slide 8

Slide 8 text

利⽤⽅法(Single platform) ϓϥάΠϯΛ௥Ճ ϓϩηοαʔΛ༗ޮԽ

Slide 9

Slide 9 text

利⽤⽅法(Multiplatform) ϓϥοτϑΥʔϜຖʹࢦఆ͕ඞཁ

Slide 10

Slide 10 text

⽣成したコードを呼び出す 🏃

Slide 11

Slide 11 text

コード⽣成例 アノテーションをつけたinterfaceの実装を⾃動⽣成する ίʔυੜ੒ ͜ΕΛ࢖͍͍ͨ

Slide 12

Slide 12 text

Single platformの場合 普通に呼び出して使える

Slide 13

Slide 13 text

Multiplatformのプロジェクト ソースコードを階層構造にして管理できる IUUQTLPUMJOMBOHPSHEPDTNVMUJQMBUGPSNEJTDPWFSQSPKFDUIUNM

Slide 14

Slide 14 text

Multiplatformからのコード⽣成 プラットフォームごとにコードが⽣成される 
 → どの階層から呼び出せるのかわからない CVJMEHFOFSBUFELTQ ᵓᴷᴷMJOVY9 ᴹᵋᴷᴷMJOVY9.BJO ᴹᵋᴷᴷ%VNNZ4BNQMFLU ᵓᴷᴷNJOHX9 ᴹᵋᴷᴷNJOHX9.BJO ᴹᵋᴷᴷ%VNNZ4BNQMFLU ᵓᴷᴷNBDPT9 ᴹᵋᴷᴷNBDPT9.BJO ᴹᵋᴷᴷ%VNNZ4BNQMFLU ᵋᴷᴷ 4BNQMFLU

Slide 15

Slide 15 text

呼び出せるが、IDEで認識してくれない Multiplatformの場合 ੺͘දࣔ͞ΕΔ BVUPJNQPSU͞Εͳ͍

Slide 16

Slide 16 text

クイズ:どっちが呼び出される?

Slide 17

Slide 17 text

正解:② ,PUMJOίϯύΠϥ͸ Ұ൪͍ۙܕΛબ୒ͯ͘͠ΕΔ

Slide 18

Slide 18 text

IDEが認識してくれない回避策 ۭͷ࣮૷Λ༻ҙ͢Δ ੺͘ͳΒͳ͍

Slide 19

Slide 19 text

IDEが認識してくれない回避策 ͜ΕΛࣗಈੜ੒͢Δ ࣗಈੜ੒͞ΕͨίʔυΛݺΜͰ͘ΕΔ

Slide 20

Slide 20 text

引数の増減でも可能 Ҿ਺͕গͳ͍ํ͕ݺ͹ΕΔ

Slide 21

Slide 21 text

回避策の問題点 ࣗಈੜ੒͞Εͯͳͯ͘΋ίϯύΠϧ͕௨Δ Ϋϥογϡ͢Δ

Slide 22

Slide 22 text

理想的には? Source setごとにコードが⽣成 できると良さそう IUUQTHJUIVCDPNHPPHMFLTQJTTVFT DPNNPO.BJO EFTLUPQ.BJO MJOVY9.BJO HFOFSBUFELTQDPNNPO.BJO HFOFSBUFELTQEFTLUPQ.BJO HFOFSBUFELTQMJOVY9.BJO

Slide 23

Slide 23 text

Koject KSPを使ったKotlin Multiplatform向けの 
 DIコンテナライブラリ アノテーションで簡単に配布 マルチモジュールに対応 コンパイル時の依存グラフの確認 IUUQTHJUIVCDPNNPSJBUTVTIJLPKFDU