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
竹内 雅和
November 14, 2025
Technology
0
100
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方
竹内 雅和
November 14, 2025
Tweet
Share
Other Decks in Technology
See All in Technology
仕様は“書く”より“語る” - 分断を超えたチーム開発の実践 / 20251115 Naoki Takahashi
shift_evolve
PRO
0
270
3年ぶりの re:Invent 今年の意気込みと前回の振り返り
kazzpapa3
0
190
QAエンジニアがプロダクト専任で チームの中に入ると。。。?/登壇資料(杉森 太樹)
hacobu
PRO
0
180
自己的售票系統自己做!
eddie
0
420
Logik: A Free and Open-source FPGA Toolchain
omasanori
0
280
嗚呼、当時の本番環境の状態で AI Agentを再評価したいなぁ...
po3rin
0
400
ソフトウェアエンジニアとデータエンジニアの違い・キャリアチェンジ
mtpooh
1
740
プログラミング言語を書く前に日本語を書く── AI 時代に求められる「言葉で考える」力/登壇資料(井田 献一朗)
hacobu
PRO
0
150
AIと共に開発する時代の組織、プロセス設計 freeeでの実践から見えてきたこと
freee
3
580
Dart and Flutter MCP serverで実現する AI駆動E2Eテスト整備と自動操作
yukisakai1225
0
300
Copilotの精度を上げる!カスタムプロンプト入門.pdf
ismk
10
3.3k
Flutterで実装する実践的な攻撃対策とセキュリティ向上
fujikinaga
1
320
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Typedesign – Prime Four
hannesfritz
42
2.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
660
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Visualization
eitanlees
150
16k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
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の公式ドキュメントや書籍? • 効率的に「当たり」をつけるためのコツ? (何でもどうぞ…!) (アンケートも書いてほしい…🙏→) 今回の資料
↓ 全体アンケート↓ セッションアンケート↓