Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
KSPで自動生成コードを作る
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
bugdog24
April 22, 2023
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
KSPで自動生成コードを作る
KSPの概要、使い方について簡単に説明したスライドです。
bugdog24
April 22, 2023
More Decks by bugdog24
See All by bugdog24
Flutter入門講座
bugdog24
0
170
Androidに自作AIをのっけたい
bugdog24
0
150
Other Decks in Technology
See All in Technology
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
350
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
160
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
1
130
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
260
LocalStack を使ったサーバーレスアプリケーション開発 / Serverless Development with LocalStack
kakakakakku
1
390
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.7k
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
150
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
130
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.4k
12 個 Tool と、 4,096 Token
hlum
0
130
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
170
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
940
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
Optimizing for Happiness
mojombo
378
71k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
How to build a perfect <img>
jonoalderson
1
6.1k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
980
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
700
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
30 Presentation Tips
portentint
PRO
1
430
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
KSPで 自動生成コードを作る 起塚 亮
起塚 亮 自己紹介 岡山大学工学部 24卒 Androidエンジニア 趣味:刀鑑賞、麻雀、プログラミング @bugdog24
KSPとは
- Kotlin Symbol Processingの略 - コンパイラプラグイン用API - コードの自動生成プログラムを 書くときに利用
コンパイル
コンパイル etc…
etc… コンパイル 既存ファイル 読み取り
コンパイル etc… コード生成して ファイル追加
コンパイル etc… 生成しなくなるまで ラウンドを回す
etc… 全てのファイルを コンパイル コンパイル
コンパイル etc…
KSPの利点 高速 Kaptよりも2倍近い速度で動作可能 実装コスト シンプルなAPIセットで構成 バージョン間の互換性 Kotlinのバージョンが違っても動作可能
作ってみる
Compose用ViewModelFactory 生成プログラム
一見便利だが引数があると・・・
None
- ボイラーコードを書く必要がある - 引数を追加するたびに書き直す必要あり - コンパイル時に気づけない
これを付けることで対応する Factoryを生成するようにする
1. 依存関係を追加 2. SymbolProcessorを実装 3. SymbolProcessorProviderを実装 4. Meta-INFに登録
2. SymbolProcessorを実装 3. SymbolProcessorProviderを実装 4. Meta-INFに登録 1. 依存関係を追加
None
1. 依存関係を追加 3. SymbolProcessorProviderを実装 4. Meta-INFに登録 2. SymbolProcessorを実装
None
毎ラウンド呼ばれる処理 引数のResolverから各ファイルにアクセス可能
生成終了時の処理を記述
プロセッサーがエラーを投げた時の処理を記述 *他のプロセッサーがエラーを投げても 呼び出される
今回の用途だと process関数だけ実装でOK!
None
指定されたアノテーションのついた要素を取得
処理出来るものと出来ないものを分ける
依存
依存 自動生成されるコードだとすると?
依存 スーパークラスを参照できない😭
依存 次のラウンドだと存在するかも? ?
直接関連する要素が参照可能かどうか 検証してくれる
生成コードを作る
ファイルに書き出す
どのファイルが変更されたら コードの再生成を行うか指定
生成
生成 変更 再生成
生成 変更
ビルド時間を短縮
関連するファイル群 可変長引数で指定
aggregating?🤔
生成 変更
生成 変更 aggregating = trueの時 関係ないファイルの変更 でも再生成される
生成 変更 aggregating = falseの時 関係ないファイルの変更 では再生成されない(isolate)
基本はfalseでOK!
他のファイル変更時に 再生成するかどうか
パッケージ名、ファイル名の指定
コードを出力(outputStream)
処理しなかった要素を返す
None
2. SymbolProcessorを実装 1. 依存関係を追加 4. Meta-INFに登録 3. SymbolProcessorProviderを実装
None
先ほど作ったクラスを インスタンス化するだけ
2. SymbolProcessorを実装 1. 依存関係を追加 3. SymbolProcessorProviderを実装 4. Meta-INFに登録
None
None
完成🤩 動かしてみる
None
None
None
None
自動生成された関数
対応状況
- Room - RxHttp - Koin Annotations - Epoxy 対応済み
- Room - RxHttp - Koin Annotations - Epoxy 対応済み
Dagger Hiltは未対応
そのうちKaptからKSPに完全移行されるはず
ご清聴 ありがとうございました!