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
Pactの紹介
Search
Daisuke Kameda
April 26, 2016
Programming
0
590
Pactの紹介
2016/4/25 にFiNC社内で行われたMicroservices 勉強会内で使用した、Pactの紹介に関する資料です。デモについては、諸般の事情で概要のみとしています。
Daisuke Kameda
April 26, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
Promise.tryで実現する新しいエラーハンドリング New error handling with Promise try
bicstone
3
500
AI 時代だからこそ抑えたい「価値のある」PHP ユニットテストを書く技術 #phpconfuk / phpcon-fukuoka-2025
shogogg
1
570
Amazon Bedrock Knowledge Bases Hands-on
konny0311
0
150
Chart.jsで長い項目を表示するときのハマりどころ
yumechi
0
130
JEP 496 と JEP 497 から学ぶ耐量子計算機暗号入門 / Learning Post-Quantum Crypto Basics from JEP 496 & 497
mackey0225
2
430
CSC509 Lecture 11
javiergs
PRO
0
310
Flutterチームから作る組織の越境文化
findy_eventslides
0
480
レイトレZ世代に捧ぐ、今からレイトレを始めるための小径
ichi_raven
0
450
Developing Specifications - Jakarta EE: a Real World Example
ivargrimstad
0
110
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.2k
高単価案件で働くための心構え
nullnull
0
150
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.1k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Practical Orchestrator
shlominoach
190
11k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
What's in a price? How to price your products and services
michaelherold
246
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Writing Fast Ruby
sferik
630
62k
Transcript
Pact の紹介 ~Microservices のテストに困っているあなたへ~ 2016/04/25 亀田 大輔
自己紹介 • 2014年8月までピクスタ株式会社で勤務 • 2014年9月に転職するも、腰痛のため2ヶ月で退職せざるをえない状況に・・・ • その後、在宅でフリーランスとして働く • 2016年5月、株式会社FiNCに入社(予定)
アジェンダ 1. Microservices のテストにおける課題とPactのメリット 2. Pact の概要 3. デモを交えた紹介
Microservices におけるテストの課題と Pact のメリット
Microservices のテストの難しさ 基本:Modelなどの単体テスト/request specやfeature spec で機能(結合)テスト → 他サービスを呼び出す必要があると、そこはstubを使わざるをえない 「結合させてちゃんと動くのだろうか?」という不安
考えられる対処法1 関連する実際のサービスで結合テスト • 実行に時間がかかりすぎる => デプロイにも時間がかかる • メンテナンスが大変 • サービスを分割したのに、テストで依存関係が発生
考えられる対処法1 関連する実際のサービスで結合テスト • 実行に時間がかかりすぎる => デプロイにも時間がかかる • メンテナンスが大変 • サービスを分割したのに、テストで依存関係が発生
非現実的
考えられる対処法2 モックを使う(例:webmock + vcr) 実際のサービスを使って request/response のモックを作成 →各consumer がテストを実行 •
全 cosumer でテストを実行しないと、変更が問題ないか不明 ◦ デプロイには時間がかかる 可能性が高い • 検証コードや検証用のrequest/response を用意するのは誰の仕事? ◦ テスト作成で各サービス担当チーム間で連携が必要
考えられる対処法2 モックを使う(例:webmock + vcr) 実際のサービスを使って request/response のモックを作成 →各consumer がテストを実行 •
全 cosumer でテストを実行しないと、変更が問題ないか不明 ◦ デプロイには時間がかかる 可能性が高い • 検証コードや検証用のrequest/response を用意するのは誰の仕事? ◦ テスト作成で各サービス担当チーム間で連携が必要 まだサービス間の依存度合いが高い
考えられる対処法3 コンシューマ駆動契約(例:Pact) メリット • テスト自体は各サービスで閉じて実行できる ◦ デプロイまでの手順がシンプル • テスト作成作業の責任が明確 ◦
テストを作成する際のチーム間の連携を抑えられる • (Pactは)対応言語が豊富 ◦ Ruby、JVM(Java、Scala など)、Javascript、Swift などに対応ライブラリが存在
Pact の概要
Pact の概要 Consumer Pact で作成したmock http request http response Provider
Pact ファイル 生成
Pact の概要 Consumer Provider Pactツール (rake タスク) Pact ファイル 状態セットアップ
コード セットアップ http request 再現 http response 入力 比較
デモ
登場サービス チャットサービス アカウントサービス ログインユーザーの 情報を要求 チャット相手の 情報を要求
Pact を使う上で難しそうなところ • どうやってCIに組み込むか ◦ (私は未検証ですが) Pact Broker というのがあります •
pactファイルだけでは Provider 側が状態を再現するのは難しい ◦ 必要なコミュニケーションはとりましょう • デバッグが少ししづらい ◦ まとめてではなく、1つずつテストを作成しましょう
ディスカッション