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
gRPCでの効率的なAPI開発とテストの進め方
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
uo
May 16, 2024
Programming
490
2
Share
gRPCでの効率的なAPI開発とテストの進め方
uo
May 16, 2024
More Decks by uo
See All by uo
AIにレビューを任せる仕組みと見えてきた次の課題
uo
0
64
実装計画を活用しAIの効果を最大化する
uo
1
62
Other Decks in Programming
See All in Programming
My daily life on Ruby
a_matsuda
3
420
AWSはOSSをどのように 考えているのか?
akihisaikeda
0
130
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
2
240
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
210
Agentic UI in the Frontend: Architectures with Open Standards @JAX 2026 in Mainz
manfredsteyer
PRO
0
120
Transactional Change Stream Processing With Debezium and Apache Flink
gunnarmorling
1
110
「なんか〇〇ライブラリで脆弱性あるみたいなんだけど。。。」から始める脆弱性対応 / First Steps in Vulnerability Response
mackey0225
2
130
GitHub Copilot CLIのいいところ
htkym
1
200
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
6
5.9k
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
270
書き換えて学ぶTemporal #fukts
pirosikick
2
380
AgentCore Optimizationを始めよう!
licux
3
260
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
190
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Fireside Chat
paigeccino
42
3.9k
Building AI with AI
inesmontani
PRO
1
1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
180
Paper Plane (Part 1)
katiecoart
PRO
0
7.7k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
Crafting Experiences
bethany
1
150
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
830
Transcript
© KAUCHE, Inc. gRPCでの効率的な API開発とテストの進め方
© KAUCHE, Inc. 自己紹介 • Shin Uozumi • 株式会社カウシェ バックエンドエンジニア
• Goと犬が好き
© KAUCHE, Inc. Agenda • カウシェについて • カウシェのAPI開発フロー • 振り返り
• まとめ
© KAUCHE, Inc. カウシェについて “誰かと一緒に ”を楽しむ ショッピングアプリ
© KAUCHE, Inc. backend 技術スタック
© KAUCHE, Inc. 構成 API Gateway Customer Service Partner Service
Farm Service
© KAUCHE, Inc. カウシェの API開発フロー
© KAUCHE, Inc. カウシェの開発フロー API仕様ファースト開発 APIの仕様を先に記述し、テスト駆動で開発を行う
© KAUCHE, Inc. 開発フロー 1. 仕様の決定 2. protoにインターフェイス定義 & API仕様をprotoのコメントに書く
3. E2Eテストの作成 4. 実装 5. リファクタ
© KAUCHE, Inc. 開発フロー 1. 仕様の決定 2. protoにインターフェイス定義 & API仕様をprotoのコメントに書く
3. E2Eテストの作成 4. 実装 5. リファクタ ここの話
© KAUCHE, Inc. 開発フロー 1. 仕様の決定 2. protoにインターフェイス定義 & API仕様をprotoのコメントに書く
3. E2Eテストの作成 4. 実装 5. リファクタ
© KAUCHE, Inc. なぜAPI仕様を書くか • 元々protoファイルにはコメントがほとんど書かれていなかった API仕様の記述 ◦ user_idに紐づくユーザーが存在しない場合 どうなるか?
◦ expire_timeに過去の日時を渡した場合は?
© KAUCHE, Inc. 以下のような問題があった • フロントエンドメンバーはAPIの仕様をバックエンドメンバーに聞かないとわからない • バックエンドメンバーも仕様を覚えていない場合、コードを読んで調べる必要がある • ロジックが複雑な場合、それなりに時間がかかり非効率
このような問題を解決するために仕様を書く API仕様の記述
© KAUCHE, Inc. API仕様の記述 書くこと 1. APIの説明 2. エラーの説明 3.
個々のフィールドの説明
© KAUCHE, Inc. API仕様の記述 APIの説明 APIの説明を簡単に記載 APIの振る舞いを記載
© KAUCHE, Inc. API仕様の記述 エラーの説明 返されるエラーと どういう場合に返されるかを記載 validationを定義しているものは コメントには記載しない
© KAUCHE, Inc. API仕様の記述 個々のフィールドの説明 各フィールドの詳細の説明
© KAUCHE, Inc. 開発フロー 1. 仕様の決定 2. protoにインターフェイス定義 & API仕様をprotoのコメントに書く
3. E2Eテストの作成 4. 実装 5. リファクタ
© KAUCHE, Inc. E2Eテスト カウシェで行っているE2Eテストの書き方 • protoファイルに記載した仕様通りにAPIが振る舞うか確認 • E2Eテストでは「特定のマイクロサービス」をテストする
© KAUCHE, Inc. protoファイルに記載した仕様通りに APIが振る舞うか確認 protoのコメントに対応するようにテストを書く
© KAUCHE, Inc. マイクロサービスのテスト E2Eテストでは「特定のマイクロサービス」をテストする • マイクロサービスAのテストではマイクロサービスAだけをテスト • 依存するサービスはスタブを使う フロントエンド
マイクロサービス A マイクロサービス C マイクロサービス B ここをテストする こっちはスタブ
© KAUCHE, Inc. 依存サービスのスタブ • protoファイルから自動作成されたインターフェース定義(xxx_grpc.pb.go) から生成する マイクロサービスのテスト
© KAUCHE, Inc. スタブの使い方 E2Eテスト 依存サービスのスタブ E2Eテストコード テスト対象サービス 1. RPCのレスポンスの設定
2. テスト実行 4. 1で設定したレスポンスを返却 3. RPC呼び出し
© KAUCHE, Inc. スタブのメリット • 並行で開発を進めることができる ◦ 依存するマイクロサービスの完成を待たずに実装することができる • エッジケースのテストができる
◦ 依存するサービスでエラーが発生したときの確認 ➢ Abortedが返された時にリトライするか等 マイクロサービスのテスト
© KAUCHE, Inc. 振り返り
© KAUCHE, Inc. • 仕様を確認する手間が減った ◦ 仕様が明確化によるコミュニケーションコスト削減 ◦ コードリーディング時間の削減 •
リリース時のQAが効率化 ◦ 以前はQA環境に対して手動でAPIを叩いて確認していた ◦ QA環境に対してE2Eテストを実行すればOK メリット
© KAUCHE, Inc. • コードレビューの効率化 ◦ 機能性の確認が楽になった ➢ protoの仕様通りにE2Eテストが実装されていたら、意図通りにコードが動くことが 確認できる
➢ 設計や可読性、一貫性といった部分のレビューに注力できる • 外部品質と内部品質の向上 ◦ 外部品質と内部品質の向上 ◦ データベース移行もE2Eテストがあることで安心して進めることができている メリット
© KAUCHE, Inc. • CIの高速化 ◦ E2Eテストが増えてきてCIの実行時間が長くなっている ◦ 並列化しにくい部分がある ➢
テストデータがバッティングする ➢ 並列化するとFirestore EmulatorがAbortedを返す 今後の課題
© KAUCHE, Inc. まとめ
© KAUCHE, Inc. • API仕様ファースト開発により、開発プロセスの効率と品質が向上した ◦ 仕様の明確化でコミュニケーションコストを削減 ◦ テスト駆動により、内部品質と外部品質の向上 まとめ
© KAUCHE, Inc. 宣伝:積極採用中です! カジュアル面談もやっています。 興味を持っていただけた方はぜひお気軽にご連絡ください。 We are hiring! https://enjoy-working.kauche.com/
© KAUCHE, Inc. ご清聴ありがとうございました