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

jackson-module-kogeraの紹介

wrongwrong
January 24, 2023

 jackson-module-kogeraの紹介

https://github.com/ProjectMapK/jackson-module-kogera の紹介

Server-Side Kotlin Meetup vol.7 『Kotlin × OSS』発表資料
https://server-side-kotlin-meetup.connpass.com/event/269443/

wrongwrong

January 24, 2023
Tweet

More Decks by wrongwrong

Other Decks in Programming

Transcript

  1. このプロジェクトは何? jackson-module-kotlin のリライトプロジェクト 現状は JitPack.io で成果物を公開中( gradle や Maven から利用可能)

    ProjectMapK / jackson-module-kogera まだ alpha 版 ただし、 jackson-module-kotlin から移植したテストは基本的に成功する 現状では jackson-module-kotlin の単純置換で利用可能 パッケージ・モジュール名は jackson-module-kotlin に合わせている 一応 Spring による自動構成が動く所までは確認済み (ただしパッケージ・モジュール名の変更予定あり) 6
  2. 理想的な jackson-module-kotlin を示したい jackson-module-kotlin は1年ほどメンテナ不在の状況だった メンテナが居た2年前も、正直活動は低調だった 「こんなことができそう」と分かっても、実際には取り込んで貰えなかった jackson-module-kotlin が劣っているように見えるのが歯がゆかった moshi

    や kotlinx.serialization に比べるとコード・性能共に劣って見えた 「 Spring では第一候補な扱いなのにこれでいいの?」と感じた 「こうなっていれば理想的!」というコードを示したかった そのためには破壊的変更を厭わずにできるプロジェクトが必要だった 9
  3. kotlin-reflect の置き換え kotlin-reflect を kotlinx-metadata-jvm と Java Reflection で置き換える kotlin-reflect

    は3MBのサイズを持つ巨大なライブラリ これを kotlinx-metadata-jvm (1MB)と Java Reflection で置き換える kotlinx-metadata-jvm は Kotlin の Metadata を読み出すライブラリ Jackson のユースケースに最適化した処理を実装するイメージ 置き換えによって2MB程の軽量化とメソッド数の削減が行われる kogera にて実装済み 11
  4. kotlin-reflect を置き換える意義 サーバーサイド kotlin-reflect によるコールドブート時の大きな負荷が低減される Spring でも kotlin-reflect の置き換えが検討されている Android

    ( Android 周り詳しくないので補足頂けると非常に嬉しいです) 64K問題の回避が容易になる kotlin-reflect は 16,000 以上のメソッド(@2017年)を持つ アプリの容量軽減に繋がる 12
  5. 高性能・低負荷化 デシリアライズの高速化 コンストラクタ/ファクトリ関数呼び出しの最適化 kotlin-reflect がやっていた処理を最適化するもの ユースケースによっては3倍程の高速化を達成 strictNullChecks オプション有効化時の挙動の最適化 非 null

    が指定されている Collection をバリデーションするオプション 現状では実装が非常に非効率で、デフォルトでは off になっている 局所的なベンチマークを見る限り大幅に高速化しているはず 13
  6. value class サポートを含む高機能化 jackson-module-kotlin は value class サポートが未開拓 デシリアライズはほぼ完全に未サポート シリアライズもサポート出来ていない点が沢山有る

    kogera の実装状況 シリアライズ: サポートが困難なものを除き全機能動くはず デシリアライズ: 一部はサポート済み、鋭意開発中 他にもissueから良さげなものが有れば対応予定 15
  7. beta 版への移行について 以下を達成したら beta 版へ移行予定 value class サポート 「現実的に無理」以外はサポート予定 Kotlin

    1.6 以下のサポート(現状は 1.7 を利用している) CI のグリッドテストを整備したい Java バージョン毎の検証も整備したい パッケージ・モジュール名の変更 移行時に Maven Central への公開を検討中 リポジトリの扱いなど含めて Jackson のメンテナの方と調整したい 17
  8. 更に未来の話 jackson-module-kotlin 2.16 になるかも(最新は2.14) Jackson のメンテナの方とやり取りしていく 移行に当たって Spring のコミッタの方からもサポート頂けるかも kogera

    の成果や移行に向けた準備は順次本体に反映予定 自分が jackson-module-kotlin のメンテナになるかも jackson-module-kotlin は1年以上メンテナ不在の状況だった メンテナ不在で変更を進めるのは不可能ということで立候補した 18