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
170
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
jackson-module-kotlin 2.19の新機能とJackson 3.0に向けた取組
https://love-kotlin.connpass.com/event/342756/
wrongwrong
February 25, 2025
More Decks by wrongwrong
See All by wrongwrong
関数呼び出しに対してコード生成したい!
k163377
1
120
スター1.1kリポジトリのメンテナやってたら確定申告が確定した話
k163377
1
180
jackson-module-kotlin 2.15 リリースノート解説
k163377
0
490
jackson-module-kogeraの紹介
k163377
0
460
Kotlin向けOSSに貢献してきて感じたアレコレ
k163377
0
430
jackson-module-kotlinを読もう!
k163377
0
2k
Java Reflectionから見たvalue class
k163377
0
760
Other Decks in Technology
See All in Technology
AIで政治は変わるのか? — 中高生と考えたAI時代の民主主義(東海高校サタデープログラム)
eitarosuda
0
360
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
1.6k
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
140
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
1
450
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
170
product engineering with qa
nealle
0
140
AIエージェントとPhysical AIが拓く製造業の変革(ハノーバーメッセリキャップ)
iotcomjpadmin
0
200
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
450
初めてのDatabricks勉強会
taka_aki
2
230
Agentic AI 時代のテスト手法: Kiro とはじめるプロパティベーステスト (AWS Summit Japan 2026 | DEV212)
ymhiroki
0
170
AI時代における最適なQA組織の作り方
ymty
3
330
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
1
510
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Design in an AI World
tapps
1
250
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
380
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
It's Worth the Effort
3n
188
29k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
210
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
4 Signs Your Business is Dying
shpigford
187
22k
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