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

jackson-module-kogeraの紹介

 jackson-module-kogeraの紹介

wrongwrong

January 24, 2023
Tweet

More Decks by wrongwrong

Other Decks in Programming

Transcript

  1. 目指せ kotlin-module 2.16 !? jackson-module-kogera の紹介 1

  2. スライドについて marp-vscode で作っています Markdown で簡単に書けてコードが綺麗に出るのでオススメ PDF で落として頂けば、スライド内のリンクは開けます 2

  3. 自己紹介 宮田 木織 株式会社justInCaseTechnorogiesバックエンドエンジニア 業務ではここ1年程 Kotlin で Spring WebFlux している

    アウトプットしているアカウント Qiita: @wrongwrong GitHub: k163377 3
  4. 今日話すこと 1/15に公開した ProjectMapK/jackson-module-kogera について プロジェクトの概要 プロジェクトの目的と現状 プロジェクトの今後 4

  5. プロジェクトの概要 5

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

    ProjectMapK / jackson-module-kogera まだ alpha 版 ただし、 jackson-module-kotlin から移植したテストは基本的に成功する 現状では jackson-module-kotlin の単純置換で利用可能 パッケージ・モジュール名は jackson-module-kotlin に合わせている 一応 Spring による自動構成が動く所までは確認済み (ただしパッケージ・モジュール名の変更予定あり) 6
  7. kogera の由来 そのまま日本語のコゲラから コゲラは日本最小のキツツキ 「 小鳥 ん!小さくてかわいい!」なライブラリを目指したかった K から始まるなるべく小さい鳥の名前にしたかった 7

  8. プロジェクトの目的と現状 8

  9. 理想的な jackson-module-kotlin を示したい jackson-module-kotlin は1年ほどメンテナ不在の状況だった メンテナが居た2年前も、正直活動は低調だった 「こんなことができそう」と分かっても、実際には取り込んで貰えなかった jackson-module-kotlin が劣っているように見えるのが歯がゆかった moshi

    や kotlinx.serialization に比べるとコード・性能共に劣って見えた 「 Spring では第一候補な扱いなのにこれでいいの?」と感じた 「こうなっていれば理想的!」というコードを示したかった そのためには破壊的変更を厭わずにできるプロジェクトが必要だった 9
  10. 具体的にやっていること kotlin-reflect の置き換え 高性能・低負荷化 value class サポートを含む高機能化 10

  11. 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
  12. kotlin-reflect を置き換える意義 サーバーサイド kotlin-reflect によるコールドブート時の大きな負荷が低減される Spring でも kotlin-reflect の置き換えが検討されている Android

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

    が指定されている Collection をバリデーションするオプション 現状では実装が非常に非効率で、デフォルトでは off になっている 局所的なベンチマークを見る限り大幅に高速化しているはず 13
  14. 高性能・低負荷化 リフレクションキャッシュの効率化・最適化 初期化・継続実行に関するベンチマークを見て調整する メモリ使用量の割に高速化していない内容の整理 Jackson 側にキャッシュされているパターン キャッシュする程効果が無いパターン メモリ消費量の低減 キャッシュ設定の非効率な部分の整理 現時点では消すだけ消して様子見の段階(調整はこれから)

    特に初期化時しか参照しない内容を解放出来るようにしたい 14
  15. value class サポートを含む高機能化 jackson-module-kotlin は value class サポートが未開拓 デシリアライズはほぼ完全に未サポート シリアライズもサポート出来ていない点が沢山有る

    kogera の実装状況 シリアライズ: サポートが困難なものを除き全機能動くはず デシリアライズ: 一部はサポート済み、鋭意開発中 他にもissueから良さげなものが有れば対応予定 15
  16. プロジェクトの今後 16

  17. beta 版への移行について 以下を達成したら beta 版へ移行予定 value class サポート 「現実的に無理」以外はサポート予定 Kotlin

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

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

  20. 終わりに ProjectMapK/jackson-module-kogera について紹介しました jackson-module-kotlin を始め界隈に結構影響の有る話だと思います というか影響の有る話にしていきたいです! スターや使ってみた報告お待ちしています! 特に意図せぬ破壊的変更が入っていないか気になっています 20