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
No More NoSuchMethodError
Search
TATSUNO Yasuhiro
October 14, 2026
Programming
100
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
No More NoSuchMethodError
For
https://server-side-kotlin-meetup.connpass.com/event/405098/
TATSUNO Yasuhiro
October 14, 2026
More Decks by TATSUNO Yasuhiro
See All by TATSUNO Yasuhiro
ゆくKotlin くるRust
exoego
1
390
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
1.1k
Bun に LCOV 出力を実装した
exoego
2
410
terraform-provider-aws にプルリクして マージされるまで
exoego
2
550
ライブラリをパブリッシュせずにすばやく試す
exoego
2
400
esbuild 最適化芸人
exoego
3
2.8k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
980
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
140
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
870
Other Decks in Programming
See All in Programming
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
660
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
180
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
110
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
300
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
940
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
140
contenteditable と日本語入力に向き合う
colorful12
0
210
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
130
Simple Storage Service(S3) is not simple
iwatsukayura
0
300
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
Design in an AI World
tapps
1
360
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Evolving SEO for Evolving Search Engines
ryanjones
0
330
The Pragmatic Product Professional
lauravandoore
37
7.5k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
From π to Pie charts
rasagy
1
400
Six Lessons from altMBA
skipperchong
29
4.5k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Designing for Timeless Needs
cassininazir
1
530
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Transcript
😭 本番障害 塩 漬 No More NoSuchMethodError け Server-Side Kotlin
Meetup vol.20, 2026-10-14, TATSUNO Yasuhiro, @exoego
筆者プロフィール TATSUNO Yasuhiro 株式会社ヘンリー 医療情報システム戦略統括本部 SWE プレビュー環境、印刷基盤、認証認可基盤、AWS移⾏⼿伝い exoego 好きなプログラミング⾔語:Scala、Rust、Go、Java
ライブラリ 更新してますか? Renovate や Dependabot を⼊れたものの プルリクを何ヶ⽉も放置してるやつ いねえよなぁ!!?
ライブラリ更新してたら NoSuchMethodError を 踏みすぎてつらかったので 静的解析ツールを作りました ⼈柱募集お試しください!
ライブラリ更新のモチベーション バグ修正 Kotlin の DB ライブラリ 新機能
あと連⽇世間を騒がしてる 改ざん! 情報漏洩! サービス停止!
各事案の要因は⾊々あろうが JVM でも ライブラリの脆弱性が攻撃に使われてきた 2015 Commons Collections 2015 Spring EL
2016 Struts 1 2017 Struts 2 2017〜 Jackson 2017〜 Fastjson 2019 Ktor 2020 Ktor 2021 Log4j2 2022 Spring Kotlin の話題 これで最後です
ISO/IEC 27017 とか認証取得にも関係する 12.6.1 技術的ぜい弱性の管理 クラウドサービスプロバイダは、提供するクラ ウドサービスに影響し得る技術的ぜい弱性の管 理に関する情報をクラウドサービスカスタマが 利⽤できるようにすることが望ましい。 CRITICAL
や HIGH な脆弱性を残したまま情報公開しちゃう?
更新していくぞ〜 挙動の破壊的変更はマイナーバージョンアップだからないだろうし テストもちゃんと書いてるから⼤丈夫やろ〜〜
M h c u S o N r o r
r E d o h t e 😇 これってさぁ! 静かに壊れる… ってコト!? NoClassDe fFoundErro r s e c c A l ega r o r sEr
①弊社コード利⽤ ②google-cloud-firestore:3.47.0 の内部コード 利⽤ ③ opentelemetry-grpc-1.6:2.23.0-alpha ④SqlStatementSanitizer が 使えるバージョンに otel系ライブラリを更新した
opentelemetry-jdbc:2.25.0-alpha の内部コード ⑥⾮互換:newClientInterceptor が 2.25.0 で削除 ⑤opentelemetry-grpc-1.6:2.25.0-alpha version.ref を⼀緒にしてたので つられて更新 ⑦NoSuchMethodError: 'ClientInterceptor GrpcTelemetry.newClientInterceptor()'
🤔 そもそもなぜ 起きるんだ? 静的型付⾔語の利点ってコンパイル時に 型の誤りを検知してくれるはずでは?
Class ファイルのバイナリ⾮互換で起きる • google-cloud-firestore:3.47.0 は、古い依存バージョンのシグネチャで コンパイル済 • ⼀⽅、実⾏時のクラスパスには新しいバージョンがり、古いシグネ チャが消えてた(バイナリ⾮互換) •
コンパイル時、ライブラリの class ファイルまでチェックされない でも実際どう⾔うこと? と思ったので図解を作ってみた https://www.exoego.net/jvm-visualized/
じゃあ逆に 定数プールを見れば 破壊的変更を検出できる ……ってコト!?
作った https://github.com/exoego/uika バイナリ⾮互換の内容 と取れそうな対策
クラスファイルのスキャンは⼗分速い
既存⼿法との⽐較 uika(本提案) やること 結合テスト ライブラリのバイトコードの変化 Spring や Ktor などを起動 と、⾃コード側で使ってるものを
し、ライブラリひと通り 付き合わせ、破壊的変更を検出 ロードされる形でテスト E2E (End-to-End) テスト 個別のコンポーネントだけでな く、連携する複数コンポ(多く の場合 Web UI やモバイルアプ リ含む)を結合してテスト タイミング PR(プルリクエスト) PR PR〜定期実⾏ 処理時間 数⼗秒〜数分 数分〜数⼗分 数⼗分〜数時間 強み 速い リフレクションも含めて テスト追加不要 検出できる(テスト書け テストない部分もある程度検出可 ば) モックがちな外部連携を実際に テストできる(テスト書けば) 弱み リフレクションを使った呼出は 検出不能 環境構築の敷居 インフラ稼働コスト 個別PRマージ後にテストが動く ので気づくまでにかなり時間差 ツールが未成熟!! 呼出部分のテストを追加 し忘れると検出不能
静的解析ツール uika ⼈柱募集 Gradle, Maven, sbt, Clojure 他対応 結合テスト、E2Eと組み合わせて ライブラリ更新を安全に!!
終