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
uo
May 16, 2024
Programming
2
370
gRPCでの効率的なAPI開発とテストの進め方
uo
May 16, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Modern Angular with Signals and Signal StoreNew Rules for Your Architecture @bastacon 2025 in Frankfurt
manfredsteyer
PRO
0
160
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
250
The Price of Micro Frontends… and Your Alternatives @bastacon 2025 in Frankfurt
manfredsteyer
PRO
0
310
iOSでQRコード生成奮闘記
ktcryomm
2
150
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
240
やっと腹落ち「スプリント毎に動くモノをリリースする」〜ゼロから始めるメガバンクグループのアジャイル実践〜
sasakendayo
0
260
Amazon Bedrockマルチエージェントコラボレーションを諦めてLangGraphに入門してみた
akihisaikeda
1
190
「その気にさせる」エンジニアが 最強のリーダーになる理由
gimupop
0
210
Rubyと自由とAIと
yotii23
6
1.9k
CloudRun, Spanner に対する負荷試験の反省と オブザーバビリティによるアプローチ
oyasumipants
1
210
Duke on CRaC with Jakarta EE
ivargrimstad
0
440
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
290
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
GraphQLの誤解/rethinking-graphql
sonatard
69
10k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
590
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Building Adaptive Systems
keathley
40
2.4k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Practical Orchestrator
shlominoach
186
10k
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. ご清聴ありがとうございました