Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
jackson-module-kotlin 2.19の新機能とJackson 3.0に向けた取組
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
wrongwrong
February 25, 2025
Technology
180
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
140
スター1.1kリポジトリのメンテナやってたら確定申告が確定した話
k163377
1
190
jackson-module-kotlin 2.15 リリースノート解説
k163377
0
530
jackson-module-kogeraの紹介
k163377
0
480
Kotlin向けOSSに貢献してきて感じたアレコレ
k163377
0
450
jackson-module-kotlinを読もう!
k163377
0
2k
Java Reflectionから見たvalue class
k163377
0
790
Other Decks in Technology
See All in Technology
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
730
Kiro Crewをはじめよう
kizawa2020
1
160
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
6k
go-sqletch
moznion
0
140
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
WasmをRustにする
sansantech
PRO
0
250
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Tell your own story through comics
letsgokoyo
1
1.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
BBQ
matthewcrist
90
10k
Accessibility Awareness
sabderemane
1
250
Ethics towards AI in product and experience design
skipperchong
2
430
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
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