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
gRPCでの効率的なAPI開発とテストの進め方
Search
uo
May 16, 2024
Programming
520
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
gRPCでの効率的なAPI開発とテストの進め方
uo
May 16, 2024
More Decks by uo
See All by uo
AIにレビューを任せる仕組みと見えてきた次の課題
uo
0
140
実装計画を活用しAIの効果を最大化する
uo
1
73
Other Decks in Programming
See All in Programming
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
190
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
540
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
210
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
120
続・コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions-again
handlename
0
120
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.1k
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
150
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.4k
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
210
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.7k
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
120
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.8k
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
New Earth Scene 8
popppiees
4
2.7k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
560
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The SEO identity crisis: Don't let AI make you average
varn
0
600
Believing is Seeing
oripsolob
1
250
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Prompt Engineering for Job Search
mfonobong
0
540
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. ご清聴ありがとうございました