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
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方
Search
竹内 雅和
November 14, 2025
Technology
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方
竹内 雅和
November 14, 2025
More Decks by 竹内 雅和
See All by 竹内 雅和
Java正規表現エンジン(NFA)の仕組みと パフォーマンスを維持するための最適化手法
takeuchi_132917
0
300
Other Decks in Technology
See All in Technology
あけおめLINE 傾向とその対策
nasa9084
0
340
手を動かして実感する、Kiro が変える開発体験
inariku
0
390
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.3k
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
110
AWS FinOps Agent 結局何が得意なの?
siromi
0
210
Datadog で始める トークンセーフティなAI 導⼊と定着
vkbaba
1
110
SREへの勘違いに気づいた後の話
tomodakengo
0
180
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
1
600
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
190
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
120
AWS App Runnerから Cloudflare Workersへ移行した話
ryota09
0
110
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
130
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.8k
Prompt Engineering for Job Search
mfonobong
0
460
How STYLIGHT went responsive
nonsquared
100
6.3k
Practical Orchestrator
shlominoach
192
12k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Speed Design
sergeychernyshev
33
2.1k
Believing is Seeing
oripsolob
1
230
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
Transcript
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方 2025/11/15 JJUG CCC 2025 Fall #jjug_ccc_i 竹内
雅和 (@tm0920.bsky.social)
自己紹介 ・竹内 雅和 ・入社6年目 ・主にバックエンド担当 ・フロント/クラウドもちょっと触る ・Springの経験は3年くらい ・Bluesky:@tm0920.bsky.social ▪ 今回の資料
↓
目次 • 学びの停滞感について • ググっても解決しない問題との遭遇 • Springの基礎 • デバッグのコツ •
まとめ
学びの停滞感について • ”おまじない” • 「中級者への壁」
”おまじない” • @Autowired をつけると DIされる • @Transactional をつけるとトランザクションできる • @Controller,
@Service … • Service 層を実装するときは必ず IF を定義する
「中級者への壁」 • なぜ動くのか、説明できない • チュートリアル レベルの学習は終えた。 • 応用的な実装や、原因不明のエラーに遭遇すると手が止まる。 • ググっても、自分のケースに合う答えがなかなか見つからない…。
次に何をどう学べば良いの?
ググっても解決しない問題との遭遇 • 一般的に想定されるアプリとDB • 今回のPJのアプリとDB • ググってみても…。 • Mapperから先の処理が全く分からない…。 •
挫折ポイント
一般的に想定されるアプリとDB 接続先のDBは固定
今回のPJのアプリとDB ユーザー毎に接続先のDBが違う
ググってみても…。 • AbstractRoutingDataSource というクラスを使うらしい…。 • 自分の環境では上手く動かない…。 • 記事に書いてある説明の内容が全く分からない…。 Datasource、SpringManagedTransaction …???
Mapper から先の処理が全く分からなかった
背後に何かいる
ここを調べるには?
挫折ポイント(普通にデバッグしても追えない) MapperはInterfaceで定義 このメソッドを実装しているクラス?
挫折ポイント(普通にデバッグしても追えない) @Autowired で DIされて Mapperの実装クラスが入っているは ず。 ここにブレークポイント & ステップイン すれば良いのでは?
挫折ポイント(普通にデバッグしても追えない) UserMapperは…? updateOne() は…? invoke() なんて呼んでませ んけど…?
挫折ポイント(普通にデバッグしても追えない) UserMapperは…? updateOne() は…? invoke() なんて呼んでませ んけど…? 普通にデバッグしても追えない…
Springの基礎を知る • IoCとは • AOPとは • AOPを実現する仕組み
IoC とは ※ 参考:『Spring 徹底入門』(株式会社NTTデータ 著)
IoC とは ※ 参考:『Spring 徹底入門』(株式会社NTTデータ 著)
IoC とは ※ 参考:『Spring 徹底入門』(株式会社NTTデータ 著)
AOP とは ※ 参考:Spring AOP Tutorial for Beginners - Step
by Step with Example https://www.javaguides.net/2019/05/understanding-spring-aop-concepts-and-terminology-with-example.html
AOP とは ※ 参考:Spring AOP Tutorial for Beginners - Step
by Step with Example https://www.javaguides.net/2019/05/understanding-spring-aop-concepts-and-terminology-with-example.html
AOP とは ※ 参考:Spring AOP Tutorial for Beginners - Step
by Step with Example https://www.javaguides.net/2019/05/understanding-spring-aop-concepts-and-terminology-with-example.html
AOP とは ※ 参考:Spring AOP Tutorial for Beginners - Step
by Step with Example https://www.javaguides.net/2019/05/understanding-spring-aop-concepts-and-terminology-with-example.html
AOP とは
AOPとは ※ 参考:『Spring 徹底入門』(株式会社NTTデータ 著)
AOPを実現する仕組み ・IoCが管理するオブジェクト ( Bean )に対して、 AOPの実装を埋め込んでいる ・アプリからBeanを取得する時、Bean のインスタンスそのものではなく、 Proxyでラップされた状態で取得され る。
・Beanの処理を呼ぶ時に Proxyを経由して、AOPの処理を実行 している。 ※ 参考:『Spring 徹底入門』(株式会社NTTデータ 著)
仕組みを踏まえた上で処理を見ていく • Mapperから先の処理を見ていく • デバッグのコツ • デバッグを通して分かったこと
Mapperから先の処理を見ていく UserMapperは…? updateOne() は…? invoke() なんて呼んでませ んけど…?
Mapperから先の処理を見ていく UserMapperがラップされ たProxy Proxyのメソッドが呼ばれて る
デバッグのコツ • スタックトレースを読む • 変数を見る • ブレークポイントを貼ってみる • ステップ実行もしつつ繰り返して…
スタックトレースを読む
スタックトレースを読む
ブレークポイントを貼ってみる
変数を見てみる
ステップ実行もしつつ繰り返して…
BaseExecutor の update() を呼び出す
SimpleExecutor の doUpdate() を呼び出す
SimpleExecutor の prepareStatement() を呼び出す
BaseExecutor の getConnection() を呼び出す
SpringManagedTransaction の getConnection() を呼び出す
SpringManagedTransaction の openConnection() を呼び出す
DataSourceUtils の getConnection() を呼び出す
DataSourceUtils の doGetConnection() を呼び出す
DataSourceUtils の fetchConnection() を呼び出す
HikariDataSource の getConnection() を呼び出す
HikariPool の getConnection()を呼び出す
HikariPool の getConnection()を呼び出す
PoolEntry の createProxyConnection()を呼び出す
ProxyFactory の getProxyConnection()を呼び出す
HikariProxyConnectionのインスタンスを生成 ※ 一旦、呼び出し元を辿って戻ります。
RoutingStatementHandler の update() を呼び出す
PreparedStatementHandler の update() を呼び出す
PreparedStatementLogger の execute() を呼び出す
ProxyPreparedStatement の execute() を呼び出す
JdbcPreparedStatement の execute() を呼び出す
Command の executeUpdate() が呼ばれてSQLが実行される
デバッグを通して分かったこと • Mapperのメソッドが呼ばれてからSQLが実行されるまでの処理の流れ。 • DBとの接続(Connection)は DataSource の実装クラスで行われていること。 ◦ AbstractRoutingDataSource は
DataSource を実装した AbstractDataSourceを継承したクラス
【まとめ】フレームワークの裏側を探る『学び方』 • 例外をわざと発生させて、スタックトレースを読む。 • IDEのステップ実行と変数を参照して 内部のコードを追っていく。 • 内部のコードを追った後だと、技術記事の理解度が格段に上がる! • 「ステップアウト」で呼び出し元を辿って、
処理の流れを整理するのがオススメ。 • フレームワークの基礎的な設計思想を簡単に知っておくと デバッグしやすい。 • 「おまじないだから…」から少しずつ脱却していきましょう!
ご清聴ありがとうございました 質疑応答(例) • 前提知識として読んでおくと良い Springの公式ドキュメントや書籍? • 効率的に「当たり」をつけるためのコツ? (何でもどうぞ…!) (アンケートも書いてほしい…🙏→) 今回の資料
↓ 全体アンケート↓ セッションアンケート↓