Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関数呼び出しに対してコード生成したい!

 関数呼び出しに対してコード生成したい!

Avatar for wrongwrong

wrongwrong

April 08, 2026

More Decks by wrongwrong

Other Decks in Technology

Transcript

  1. 自己紹介 wrongwrong jackson-module-kotlin メンテナ Qiita: @wrongwrong GitHub: k163377 現在転職活動中、サーバーサイド Kotlin

    の会社で働けたらと思ってます 懇親会等で是非お声がけ下さい 今日の発表内容とコンパイラプラグイン実装は、以下のリポジトリで公開しています k163377/codegen-for-call-site-sandbox 2
  2. コード生成する系ライブラリに感じている不満 Kotlin ソースを参照してコード生成するライブラリは基本的に利用側の型指定だけで は機能しない点で、リフレクションライブラリに劣る /* kotlinx.serializationの例 */ // これだけでは機能しない val

    projectCollection = Json.decodeFromString<List<Project>>(string) @Serializable // このアノテーション付与が必要 data class Project(val name: String, val language: String) 関数呼び出しで型を指定しているのだから、それをフックにコード生成して欲しい 3
  3. Kotlin Compiler Plugin での解決策 Kotlin Compiler Plugin はコンパイル中のコード全体を処理可能 もっとKotlin を好きになる!K2

    時代のKotlin Compiler Plugin 開発 / Kotlin Fest 2024 Kotlin Compiler Plugin で実現するCustom String Interpolation / Kotlin Fest 2025 Custom compiler plugins | Kotlin Documentation 関数呼び出しも処理対象とできるのでは? 4
  4. Kotlin Compiler Plugin での解決策 特定関数の呼び出しに対し以下が読めるなら、理論上実現できそう 呼び出し時の型引数 引数の型 登場する型それぞれの内容 実際に gradle

    プラグインをAI に作らせて仮説検証した CodegenTarget アノテーションを付与された関数の呼び出しが処理対象 以下のようなファイルを生成する ファイル名: 型引数1_型引数2_..._引数型1_... 内容: 型引数と引数型について、それのぞれの持つプロパティの列挙 5
  5. Kotlin Compiler Plugin での解決策 以下のような関数定義・呼び出しに対し、 @CodegenTarget // 生成のマーカー fun <T>

    process(value: String): Unit = Unit process<Int>("hello") // 呼び出し(解析対象) Int_String という名前のファイルが生成される ファイル内容は以下の通り Int String length: Int → 関数呼び出し解析によるコード生成は理論上実現可能 6
  6. オマケ: AI がヤバい話 今回の内容に関して、自分の技術的理解は全く追いついていません プラグインの内容は、ほぼ全て Claude と Junie の無料枠で作ったものです コード生成やコンパイラプラグイン作成はかなり難易度が高く、数年前からアイデア

    自体は有ったものの何度か作成を投げ出していました それが圧倒的短時間に実現できそうな目途が出てきているのはヤバいなと感じました 表に出せていないアイデアの有る方、是非一度AI に投げてみて欲しいです! 8