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
JJUG2025fall: Testcontainersの ReusableContainer...
Search
montre
November 15, 2025
Programming
72
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JJUG2025fall: Testcontainersの ReusableContainersを使った リポジトリテストの高速化
montre
November 15, 2025
More Decks by montre
See All by montre
自律とは何か?
montre
0
130
アジャイルとは世界観の名前なのではないか_.pdf
montre
0
53
XP祭り2025LT資料: TDDの実践を通じて得られたモノ
montre
0
55
Other Decks in Programming
See All in Programming
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
740
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
1.5k
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
ChromeでローカルLLM
ryu1013
0
140
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
contenteditable と日本語入力に向き合う
colorful12
0
200
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Google's AI Overviews - The New Search
badams
0
1.6k
Navigating Weather and Climate Data
rabernat
0
560
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Chasing Engaging Ingredients in Design
codingconduct
0
360
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Side Projects
sachag
456
43k
Practical Orchestrator
shlominoach
192
12k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Transcript
Testcontainersの ReusableContainersを使った リポジトリテストの高速化 バックエンドエンジニア 森 廉太朗
バックエンドエンジニア3年目 受託開発の会社にて2年、現在職中のAI model株式会社にて10ヶ月 Spring Boot、Kotlin、MyBatis、Flyway DDD、アジャイル 自己紹介 1
テストの基本 Q: 何故テストをするのか?A: 欠陥がある事を知りたいから Q: 何故欠陥がある事を知りたいのか?A: 欠陥はプロダクトの価値を阻害するので、直 したい Q: どうやってテストをするのか?A:
自動テストと手動テストを用意する 2
アジャイルのテスト アジャイルテストの4象限 コーディングを評価するものと プロダクトを評価するもの 技術面から評価するものと ビジネス面から評価するもの 単体テスト(Unit Test)は 技術面からコーディングを 評価するもの
3 技術 ビジネス コーディング プロダクト 単体テスト UXテスト 探索的テスト 負荷テスト
テスト戦略: 全数テストは不可能 テストピラミッド 下層のテストを厚くして 上層のテストは薄くする 補足: テスティングトロフィー ※ ただし、プロジェクトによって これらのテストの定義は異なる
5 E2Eテスト 結合テスト 単体テスト
レポジトリーの単体テスト レポジトリーやクエリサービスなどのDAO層 DAO層の責務は、主にDBを介したCRUD操作 テストでは、これを検証できていなければいけない 7
テスト方法(コンテナ) Dockerコンテナインスタンス DBコンテナイメージ(MySQL、PostgreSQLなど)をビルドしてインスタンスを立ち上げる 実際の環境に近い状況でテストが行える 8
テスト方法(インメモリ) H2 Database Engine インメモリDB インメモリなので非常に高速 アジャイルではフィードバックを早く受け取ることが重要 9
テストの課題 コンテナ:テスト実行に時間が掛かる テスト実行の度にコンテナを起動するため インメモリ:実際のDBとのやり取りで欠陥がある事はわからない インメモリDBと実際のDBとの大きな差異 DAO層に対する意味のある検証と、フィードバックの素早い受領を目指したい 10
TestcontainersのReusableContainers TestcontainersのExperimental(実験的)な機能 標準機能ではない 立ち上げたコンテナを使い回す テスト実行ごとにコンテナ立ち上げが不要 DBとのやり取りに欠陥がある事を示せることと、テストの効率化を図れる 11
Testcontainersとは テスト実行時にDBコンテナインスタンスを立ち上げてくれるツール Java、Go、Rustなど、色々な言語で使用可能 DB以外も可能 12
ReusableContainersとは 一度起動したコンテナを再利用できる機能 環境変数として”TESTCONTAINERS_REUSE_ENABLE = true”を定義 コンテナのメソッドチェーンを介して、”withReuse(true)”とする ※ Containerアノテーションを使ったコンテナ起動はできない 13
ReusableContainers使用コード https://github.com/rentaro-m-b/for-reusable-testcontainer 13 trueにする @Containerを 使わずに起動する ※ テスト実行後に使用したコンテ ナが起動中のままになる。
計測の説明 実際のプロダクトのテストを計測対象とする DAO層のテストのみ(JUnit 5) ReusableContainersあり、ReusableContainersなしでテストを実行する テスト実行前:イメージあり、コンテナなし ReusableContainersはテスト終了時にコンテナが残るので削除する 14
結果 15 Reusable テスト完了時間(秒) あり 76 なし 162 ※ 何回か試して平均を取ろうと思ったが、ほとんど差がなかった
まとめ テストは欠陥があることを示すために必要である レポジトリーの単体テストにはコンテナとインメモリを使う方法がある ReusableContainersでDAO層の意味ある検証と素早いフィードバックが可能 ※ コンテナが使えないケースもあるので、ケースバイケース Apple silicon(ARM)とx_86の関係 16