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
巨大モジュラーモノリスのテスト戦略.pdf
Search
Shinobu Hayashi
October 23, 2025
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
巨大モジュラーモノリスのテスト戦略.pdf
Shinobu Hayashi
October 23, 2025
More Decks by Shinobu Hayashi
See All by Shinobu Hayashi
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
400
ESLint Rule により事業, 技術ドメインに沿った制約と誓約を敷衍させるアプローチのすゝめ
shinyaigeek
1
6.2k
Big “heart” of mud, 10000 lines VCL generated from .vcl.handlebars
shinyaigeek
0
350
Managing "side effect" in Frontend Development
shinyaigeek
3
4.2k
爆速の日経電子版開発の今
shinyaigeek
3
3.4k
加速するEdge Computing
shinyaigeek
6
7.1k
ブラウザ作りのすゝめ
shinyaigeek
1
600
ASTをいじいじして僕のかんがえた最強のDXを得る
shinyaigeek
0
510
フロントエンド
shinyaigeek
0
240
Other Decks in Technology
See All in Technology
enechainの内製セルフサービスプラットフォーム
hiyosi
0
160
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
310
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
2.6k
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
430
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
150
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
120
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
460
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
340
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
150
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
1
470
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
120
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
160
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.8k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Building Applications with DynamoDB
mza
96
7.2k
A designer walks into a library…
pauljervisheath
211
25k
Odyssey Design
rkendrick25
PRO
2
800
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
410
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Transcript
巨大モジュラーモノリスのテスト戦略 2025 / 10 / 23 Ubie株式会社 Shinobu Hayashi/Shinyaigeek Nihonbashi.js
#10
2 whoami • Shinobu Hayashi/Shinyaigeek ◦ X: https://x.com/Shinyaigeek ◦ GitHub:
https://github.com/Shinyaigeek • Software Engineer@Ubie(25/08~) ◦ プロダクトの技術基盤の開発運用やら • Interest: HTTP, Frontend Toolchain, Platform Engineering
3 Agenda • Ubie におけるモジュラーモノリス ◦ なぜモジュラーモノリスか ◦ プロダクト開発を支える設計 •
自動テスト実行における課題とその解消アプローチの紹介 ◦ なぜ自動テストがボトルネックになっていたか ◦ 自動テスト実行数を削ってしまうアプローチ
4 ubie.app の システムアーキテクチャ
5 ubie.app のフロントエンド • Full “JavaScript” & “React” Stack ◦
Web アプリケーション: Next.js ◦ モバイルアプリケーション: React Native • 複数の機能を内包しており , ストリームアラインドチーム的に独立して開発されてい る ◦ 問診サービス ◦ 医療情報サービス ◦ オンライン診療サービス ◦ etc…
6 ubie.app のバックエンド • Nest.js 製バックエンドアプリケーション ◦ フロントエンドと同じく TypeScript で記述できるため機能開発をシームレスに行
える • プロダクトの諸機能に密なロジックとデータ永続化層を持っている ◦ ≠ JUST マイクロサービスの Gateway • 機能開発を行う際には , フロントエンドだけでなくバックエンドも併せて触ることにな る • モジュラーモノリスアーキテクチャの採用
7 モジュラーモノリスの恩恵 • それぞれの機能開発の独立性を担保しつつ分散システムの複雑さを回避できる ◦ 機能ごとにモジュールとして独立している eg) 問診(qa), オンライン診療(telemedicine) ◦
アプリケーション境界を担う controller 層と、モジュール境界を担う service 層それぞれを提供してい る • マイクロサービスとの通信などロジックを共有できる • 機能ごとのコラボレーションも容易に • 全員が同じリポジトリで開発を行うため、共有知を形成できる ◦ coding agent 向けのドキュメント ◦ シンプルに参考にできるコードが身近に • パッケージなどのバージョン管理を一元化でき運用がシンプルに
8 モジュラーモノリス運用で見 ててきた課題
9 モジュラーモノリスの課題 • エラー監視時のオーナーシップの線引きの難しさ • コードベースの巨大さ ◦ lint, fmt, tsc
の遅さ ◦ 自動テスト実行ケースの多さ ←ココ • モジュール間依存の複雑性による負債
10 モジュラーモノリスにおける自動テストの課題 • 数多くのロジックを抱えるためそれに比例してテストケースの数が膨大に ◦ テストファイル数だけで 314⋯! • 自動テストの出力もテストケースの数に比例して膨大に ◦
coding agent のコンテキストを逼迫する原因に • 自動テスト実行時間もテストケースに比例して伸びることに ◦ CI 上においては 2並列で走らせても 9min の実行時間がかかる規模 ◦ テスト用の DB を立て永続化層込みでテストをしているためデッドロック問題により並行実行にも難点 が⋯
11 自動テストの実行数を減らす戦略 • まずは手軽に行える、自動テストの実行数自体を減らしていく戦略をとっていくことに ◦ 併せて coding agent のコンテキスト問題も緩和できる ◦
並行実行可能な状態にするのもよいが Invest が大きいと予見されたため後回し • モジュラーモノリスであるが故に取りやすい戦略でもある ◦ 複数のビジネスロジック、機能がモジュールとして独立して存在している状況にある ◦ モジュール間の依存についてある程度クリーンな状況が実装上担保される ◦ テストにおいて、他モジュールへの依存に関してはインターフェースと Mock によってその実装にまで は踏み込まない状況が担保されている ◦ → あるモジュールを変更した際に、実行されるべきテストを絞り込むことを機械的に行いやすい且 つ効果的に絞り込める土壌と言える
12 自動テストの実行数を減らす戦術 • jest においては `--changedSince=${git commit-ish}`, vitest においては `vitest
related` によって, 「ある地 点」から今に至るまでの差分を元に実行されるべきテストを絞り込むためのオプションがすでに存在している ◦ git レベルで diff を読んで差分ファイルを検出 ◦ その差分を元に, 変更のあったファイルに依存している実装とそのテストを算出している • For 手元での実行時向け : ◦ `npm run test:diff` という形で, 差分実行だけを行うオプションを提供 • For CI での実行時向け: ◦ PR 上では差分のみを実行 , trunk (=main branch) においては全てのテストケースを実行 , という形に ◦ リリースパイプラインにおいては安全に倒す形に
13 差分ファイルと依存関係ベースでのテスト実行の注意点 • git の差分レベルを足掛かりに実行すべきテストを絞り込んでいるため、差分に検知されないものへの依 存は検知されない ◦ node_modules 配下のパッケージ ◦
gitignore されるような自動生成されるようなファイル • また設定ファイルの変化など、 ESM レベルでの依存関係は存在していないが挙動に変更を及ぼすような変 化にも注意が必要になる ◦ また tsconfig の paths alias を利用してるケースなども jest/vitest 側に設定ファイルで明示的にそれ を伝える必要がある • 本来実行されてほしいテストケースまで意図せず絞り込まれていないかは注意が必要
14 差分ファイルと依存関係ベースでのテスト実行の注意点 • node_modules 配下のパッケージ、設定系のファイルについては CI 上でアドホックに検知しテストケースを 全実行する • 自動生成されたコードに依存しているケースについては、アプリケーションごとに判断を行う
◦ 大抵のアプリケーション大抵の自動生成されたコードに依存するケースとしては、 DB や RPC(grpc, graphql, REST API)、CSS など JavaScript から見た際の副作用の取り扱いを行うケースがほとんど ◦ 外部環境との副作用を取り扱う以上、自動生成されたファイルによって挙動に破壊的な影響が出る際 には、"型" レベルに影響が出るはずで型検査ででも影響を検知できるはず
15 得られたもの • CI/ローカル環境 でのテスト実行時間の減少 🎉 ◦ 改善の性質上 PR の種類に依存するが
... ◦ 開発の中で変更の流量が多くなりがちな、具体機能にまつわる (=依存関係の末尾にいる )モジュール の変更に対して特に実行時間の改善が顕著に現れる ◦ 多くのモジュールで利用されるようなモジュールの変更時でも実行数はおよそ ⅔ にまで • coding agent がテストを実行した際のコンテキスト逼迫問題も改善