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
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
竹内 雅和
November 14, 2025
Technology
520
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
260
Other Decks in Technology
See All in Technology
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
420
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
ラジオの科学
frievea
0
350
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
530
猫付きpingコマンドを自作
uyuki234
0
260
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
120
PLATEAU で バーチャル花火大会
tatsuya1970
0
170
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
640
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
130
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
200
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
Featured
See All Featured
A Soul's Torment
seathinner
6
3.4k
Abbi's Birthday
coloredviolet
3
9.4k
Claude Code のすすめ
schroneko
67
230k
Ethics towards AI in product and experience design
skipperchong
2
350
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Un-Boring Meetings
codingconduct
0
390
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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の公式ドキュメントや書籍? • 効率的に「当たり」をつけるためのコツ? (何でもどうぞ…!) (アンケートも書いてほしい…🙏→) 今回の資料
↓ 全体アンケート↓ セッションアンケート↓