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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
wrongwrong
February 25, 2025
Technology
160
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
750
Other Decks in Technology
See All in Technology
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
1.3k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
690
手塩にかけりゃいいってもんじゃない
ming_ayami
0
240
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1k
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
120
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
2
190
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
240
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
580
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
680
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
110
Featured
See All Featured
BBQ
matthewcrist
89
10k
The Cult of Friendly URLs
andyhume
79
6.9k
Believing is Seeing
oripsolob
1
140
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
First, design no harm
axbom
PRO
2
1.2k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Design in an AI World
tapps
1
230
Become a Pro
speakerdeck
PRO
31
6k
Unsuck your backbone
ammeep
672
58k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
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