Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
jackson-module-kotlin 2.19の新機能とJackson 3.0に向けた取組
Search
wrongwrong
February 25, 2025
Technology
1
97
jackson-module-kotlin 2.19の新機能とJackson 3.0に向けた取組
https://love-kotlin.connpass.com/event/342756/
wrongwrong
February 25, 2025
Tweet
Share
More Decks by wrongwrong
See All by wrongwrong
スター1.1kリポジトリのメンテナやってたら確定申告が確定した話
k163377
1
120
jackson-module-kotlin 2.15 リリースノート解説
k163377
0
430
jackson-module-kogeraの紹介
k163377
0
400
Kotlin向けOSSに貢献してきて感じたアレコレ
k163377
0
320
jackson-module-kotlinを読もう!
k163377
0
1.8k
Java Reflectionから見たvalue class
k163377
0
680
Other Decks in Technology
See All in Technology
生成AI時代におけるAI・機械学習技術を用いたプロダクト開発の深化と進化 #BetAIDay
layerx
PRO
1
860
【2025 Japan AWS Jr. Champions Ignition】点から線、線から面へ〜僕たちが起こすコラボレーション・ムーブメント〜
amixedcolor
1
120
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
190
Microsoft Clarityでインサイトを見つけよう
nakasho
0
120
LLMでAI-OCR、実際どうなの? / llm_ai_ocr_layerx_bet_ai_day_lt
sbrf248
0
410
株式会社島津製作所_研究開発(集団協業と知的生産)の現場を支える、OSS知識基盤システムの導入
akahane92
1
1.3k
帳票構造化タスクにおけるLLMファインチューニングの性能評価
yosukeyoshida
1
220
Vision Language Modelと自動運転AIの最前線_20250730
yuyamaguchi
3
1k
마라톤 끝의 단거리 스퍼트: 2025년의 AI
inureyes
PRO
1
530
AWS表彰プログラムとキャリアについて
naoki_0531
1
150
バクラクによるコーポレート業務の自動運転 #BetAIDay
layerx
PRO
1
710
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
190
Featured
See All Featured
A Tale of Four Properties
chriscoyier
160
23k
The Language of Interfaces
destraynor
158
25k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
How to train your dragon (web standard)
notwaldorf
96
6.1k
How GitHub (no longer) Works
holman
314
140k
Facilitating Awesome Meetings
lara
54
6.5k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Code Review Best Practice
trishagee
69
19k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
Visualization
eitanlees
146
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Transcript
jackson-module-kotlin 2.19 の新機能と Jackson 3.0 に向けた取組 @wrongwrong 1
自己紹介 wrongwrong 株式会社justInCaseTechnorogiesバックエンドエンジニア 業務では Kotlin で Spring WebFlux している jackosn-module-kotlin
メンテナ アウトプットしているアカウント Qiita: @wrongwrong GitHub: k163377 2
jackson-module-kotlin 2.19 の新機能 特に大きいのは以下2点 大幅性能改善版 StrictNullChecks の追加 MissingKotlinParameterException のベースクラス変更 value
class 向け共通 KeyDeserializer の追加 全体: release-notes/VERSION-2.x · FasterXML/jackson-module-kotlin 3
大幅性能改善版 StrictNullChecks の追加 StrictNullChecks は、 List や Map の値の nullability
の厳密チェックオプション 無効では List<Any> や Map<*, Any> の値に null を入れられてしまう = Kotlin の null 安全が壊れ、アクセス時のヌルポに繋がる 有効にするとデシリアライズのスループットが悪くて70%未満まで低下する 安全性と性能を天秤にかける必要が有った デフォルトでは無効 -> 性能を大幅改善した NewStrictNullChecks オプションを追加した 4
大幅性能改善版 StrictNullChecks の追加 処理方式を変更することでスループットを圧倒的に改善した これまでは処理の度にリフレクションで型と nullability を確認していた jackson-databind の null
チェック機構を用い、初回のみ確認に変更 ベンチマークでは無効時比98%以上のスループットを保てた Benchmark スループット比 (before) スループット比 (after) スループット改 善率 E_5P.empty 73.8% 99.8% 1.34 E_5P.fiveContents 80.0% 98.7% 1.26 T_20P.empty 67.1% 99.7% 1.46 T_20P.fiveContents 73.5% 105.1% 1.30 5
大幅性能改善版 StrictNullChecks の追加 新方式では、 throw される例外が MissingKotlinParameterException から InvalidNullException へ変更される
メッセージも変更される 今はまだ古い StrictNullChecks も利用可能 新方式のメリットが非常に大きいため、最終的には移行予定 (古い処理を消せるとデシリアライズ全体が誤差レベルで高速化する) 6
MissingKotlinParameterException のベースクラス変更 MismatchedInputException から InvalidNullException へ変更される InvalidNullException は MismatchedInputException の子クラス
MissingKotlinParameterException と InvalidNullException を両方 catch して いる場合、前者を先に catch するよう変更が必要 KotlinModule から発生する例外を InvalidNullException に統一したかった 新 StrictNullChecks への移行 MissingKotlinParameterException の廃止へ向けた準備 名前や機能に幾つか問題点が有るため 7
value class 向け共通 KeyDeserializer の追加 value class を Map のキーに指定した場合、これまでは個別にカスタム
KeyDeserializer を定義する必要が有った databind 側のバグのせいで共通 KeyDeserializer が定義出来なかった 2.19 からは、共通 KeyDeserializer が利用できる ( databind 側のバグは自分で直した) 8
Jackson 3.0 に向けた取組 Jackson は近い内に 3.0 が出る予定 2月末までに 3.0.0-rc1 がリリース予定
大規模な破壊的変更も行われる パッケージ構成や関数の引数など 幾つかのデフォルト設定 9
StrictNullChecks デフォルト有効化 StrictNullChecks は、 List や Map の値の nullability の厳密チェックオプション
デフォルトが null 安全を破壊する状態なのは避けたい 前述のスループット改善により、デメリットもほぼ無くなった 投票でも反対が無かった -> デフォルト有効化を決断 10
SingletonSupport デフォルト有効化 SingletonSupport は、 object を別インスタンスにデシリアライズしない機能 デフォルトだと別インスタンスになるせいで、 Singleton === deserialized
が false になる Kotlin 観点で予想しにくい挙動 投票でも反対が無かった & スループット計測結果も大差無かった -> デフォルト有効化を決断 11
FAIL_ON_NULL_FOR_PRIMITIVES デフォルト有効化 ※ databind 側の変更 デシリアライズ時、プリミティブ型に対する null 入力をエラーにする機能 デフォルトでは 0
など Jackson 側のデフォルト値が設定されてしまい、エラ ーにならない 特に Kotlin で見ると予想しにくい挙動だった ( jackson-module-kotlin へ何度もイシューが立った) 個別のモジュール側で対処出来る問題ではなかった -> 自分から提案した所、最終的にデフォルト有効となった 12
終わりに Jackson も大分歴史のあるライブラリですが、新規開発も色々進んでます Jackson 3.0 の正式リリースまではまだ時間が有ります 試用や提案等々お待ちしています (スターや GitHub Sponsors
もお待ちしてます!) 13