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
510
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
110
実装計画を活用しAIの効果を最大化する
uo
1
69
Other Decks in Programming
See All in Programming
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
430
iOSDC2026登壇資料.pdf
riofujimon
0
200
iOSDCのペンライトを自動制御したい!
akkeylab
0
350
APNsからLive Activityを開始する話
yumnumm
0
150
AWSに止められる覚悟してますか?
morizo_1984
2
500
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
290
Intent as Code
shoppingjaws
6
1.1k
The Rails Doctrine Decade
koic
2
460
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
290
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.3k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
330
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
530
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
340
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
540
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
A Tale of Four Properties
chriscoyier
163
24k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
600
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. ご清聴ありがとうございました