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
420
jackson-module-kogeraの紹介
k163377
0
400
Kotlin向けOSSに貢献してきて感じたアレコレ
k163377
0
320
jackson-module-kotlinを読もう!
k163377
0
1.7k
Java Reflectionから見たvalue class
k163377
0
680
Other Decks in Technology
See All in Technology
Semantic Machine Intelligence for Vision, Language, and Actions
keio_smilab
PRO
2
370
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
本当にわかりやすいAIエージェント入門
segavvy
9
5.3k
AI Ready API ─ AI時代に求められるAPI設計とは?/ AI-Ready API - Designing MCP and APIs in the AI Era
yokawasa
20
5.5k
PHPでResult型やってみよう
higaki_program
0
180
「現場で活躍するAIエージェント」を実現するチームと開発プロセス
tkikuchi1002
6
930
全部AI、全員Cursor、ドキュメント駆動開発 〜DevinやGeminiも添えて〜
rinchsan
11
5.6k
Frontier Airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
frontierairlineswithflyagent
0
100
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.7k
AI時代にも変わらぬ価値を発揮したい: インフラ・クラウドを切り口にユーザー価値と非機能要件に向き合ってエンジニアとしての地力を培う
netmarkjp
0
210
LLM拡張解体新書/llm-extension-deep-dive
oracle4engineer
PRO
27
7.8k
Deep Security Conference 2025:生成AI時代のセキュリティ監視 /dsc2025-genai-secmon
mizutani
5
3.9k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Balancing Empowerment & Direction
lara
1
480
Adopting Sorbet at Scale
ufuk
77
9.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Site-Speed That Sticks
csswizardry
10
710
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
The Cost Of JavaScript in 2023
addyosmani
51
8.6k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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