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-WEBを使ったWEBアプリ開発/Development web-app with g...
Search
dojineko
February 08, 2022
Technology
1
980
gRPC-WEBを使ったWEBアプリ開発/Development web-app with gRPC-WEB
dojineko
February 08, 2022
Tweet
Share
More Decks by dojineko
See All by dojineko
2025-03-12 WebXRのいま(2025Q1) / About WebXR (2025Q1)
dojineko
0
590
iOSのWebViewとClipboardAPI / WebView and ClipboardAPI on iOS
dojineko
0
84
最近のUnityとVRChat / About Unity and VRChat recently
dojineko
0
170
WebXRでポートフォリオを作ろう/Let's make your portfolio with WebXR!
dojineko
0
180
ペパボ ホスティング事業部のWebフロントエンドについて 2022 / About Web Frontend of Pepabo Hosting division 2022
dojineko
1
9.7k
Viteはいいぞ/Vite is Good
dojineko
1
780
はじめてでもできた!VR登壇への道 / Let's VR speech!
dojineko
0
460
もう俺には関係なくないTypeScript/Our TypeScript
dojineko
3
370
TypeScript ではじめる Clean Architecture / Let's start Clean Architecture with TypeScript
dojineko
2
3.4k
Other Decks in Technology
See All in Technology
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
5
1.9k
[CV勉強会@関東 ICCV2025] WoTE: End-to-End Driving with Online Trajectory Evaluation via BEV World Model
shinkyoto
0
340
小規模チームによる衛星管制システムの開発とスケーラビリティの実現
sankichi92
0
120
グローバルなコンパウンド戦略を支えるモジュラーモノリスとドメイン駆動設計
kawauso
3
8.2k
やり方は一つだけじゃない、正解だけを目指さず寄り道やその先まで自分流に楽しむ趣味プログラミングの探求 2025-11-15 YAPC::Fukuoka
sugyan
3
950
【M3】攻めのセキュリティの実践!プロアクティブなセキュリティ対策の実践事例
axelmizu
0
180
雲勉LT_Amazon Bedrock AgentCoreを知りAIエージェントに入門しよう!
ymae
2
200
大規模プロダクトで実践するAI活用の仕組みづくり
k1tikurisu
5
1.8k
"'TSのAPI型安全”の対価は誰が払う?不公平なスキーマ駆動に終止符を打つハイブリッド戦略
hal_spidernight
0
120
持続可能なアクセシビリティ開発
azukiazusa1
6
320
クラスタ統合リアーキテクチャ全貌~1,000万ユーザーのウェルネスSaaSを再設計~
hacomono
PRO
0
140
.NET 10のASP. NET Core注目の新機能
tomokusaba
0
100
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
A Tale of Four Properties
chriscoyier
162
23k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
340
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Context Engineering - Making Every Token Count
addyosmani
9
410
Building Applications with DynamoDB
mza
96
6.8k
What's in a price? How to price your products and services
michaelherold
246
12k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
680
Typedesign – Prime Four
hannesfritz
42
2.9k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
The Invisible Side of Design
smashingmag
302
51k
Transcript
gRPC-WEBを使った WEBアプリ開発 2022-02-08 FukuokaJS @dojineko
どじねこ @dojineko GMOペパボ / よろず屋
今日お話する内容
もくじ ➔ gRPC/gRPC-WEBってなぁに? ➔ gRPCはどんなときに役に立つ? ➔ 「実際にやってみた」 ➔ まとめ
ref: https://grpc.io/blog/hello-pancakes/ 公式マスコットの 「パンケーキ」だよ!
gRPC/gRPC-WEBってなぁに?
まず「gRPC」ってなぁに? • 元は Google が開発したRPC (リモートプロシージャコール) のフ レームワーク。 • 実装には「Protocol
Buffer」と呼ばれる定義ファイルを使用し、 サーバーの実装コードと、APIクライアントコードを GoやTypeScriptなどの各言語向けに自動生成できる。 • ロードバランシングや、双方向通信に対応する。 • RPCの一種なのでRESTfulにあるようなURLに対して、 リソースをマッピングを行うコストが比較的少ない。(※諸説あり)
ドメイン実装 サーバー実装 クライアント実装 アプリケーション 定義ファイル ProtocolBuffer ここのコードは指定した 言語向けに自動生成される 自動生成されたコードに対 応する処理を実装する
クライアントコードも 指定した言語向けに 自動生成できる ~ gRPC周りのざっくりとした実装の関係 ~
• OpenAPI Specification (Swagger) ◦ RESTful API をスキーマベースで開発できる • GraphQL
◦ GraphQL の API をスキーマベースで開発できる • 共通する要素 ◦ 自動的なドキュメント生成のサポート ◦ プレイグラウンドのサポート ◦ APIの型情報の提供 【余談】コードを自動生成する類似例
じゃあ「gRPC-WEB」ってなによ? • gRPCは"現状"ブラウザから直接使用できない • gRPC-WEB は gRPC の使用の一部であり、 gRPC をWebアプリから使用できるようにするための枠組み
• 具体的には NGINX や Envoy など対応するプロキシサーバーを前段 に設置することで互換レイヤーを用意できる • 互換レイヤーのリクエストの形式は規定されており gRPC-WEB向けに自動生成されたAPIクライアントを使用することで 簡単にgRPCを使った実装へのリクエストができる
Webブラウザ (APIクライアント) プロキシ gRPCサーバー ~gRPC-WEBのリクエスト周りのざっくりとした関係~ 自動生成されるクライアントの コードに含まれる処理で ペイロードはBase64に変換される リクエストメソッドは基本的にPOST 対応するエンドポイントに
リクエストがあったら gRPCへの変換した上で サーバーへリクエストする gRPCサーバーにとって見れば gRPCで通信しに来られているのと 一緒なので gRPC-WEB向けに なにか特別なことをする必要はない ※ Cookieを操作したりなどgRPC-WEB特有の 特別な処理をすることもできます HTTP gRPC
gRPCはどんなときに役に立つ?
gRPCはどんなときに役に立つ? • OpenAPIやGraphQLとも共通する部分 ◦ APIの実装をスキーマベースで開発を行いたい時 ◦ APIに型情報がほしい時 ◦ CLIやAPIクライアントを自動生成したい時 •
gRPCならではの部分 ◦ API通信を高速に行いたい時 ◦ 双方向性通信を行いたい時
gRPCが「高速」とは・・・? • gRPC は HTTP/2 をベースとしている ◦ 参考: 「gRPC over
HTTP2」 • 通信機構をもとにした効率的な送受信が行える ◦ 参考: 「Google: Cloud Run の WebSocket、HTTP/2、gRPC 双 方向ストリームのご紹介」 • gRPC-WEB は互換レイヤーなので HTTP/1.1 で使用できる ◦ ブラウザから gRPCが使えるが、 持ち前の速度はある程度犠牲にしている部分もある
「実際にやってみた」 • 今回はLTなんで全部解説するのは時間的に厳しいですよね? ◦ 時間開いてる?いやいや・・・そんな・・・
・・・というわけで
出来上がったものがこちらになります
ドメイン実装 サーバー実装 クライアント実装 アプリケーション 定義ファイル ProtocolBuffer ~ サンプル実装の概要 ~ ブラウザ向けのクライアント
実装は JavaScript を選択 TypeScript の型情報もある サーバー実装はGoを選択 コンパイルが超高速でラク
Chrome拡張機能を入れれば シリアライズされた情報も確認できる Lighthouseのパフォーマンスの スコアは意外と良好
クライアントはAPIのリクエストと レスポンスの型情報を知っているので 通信が正常に完了しさえすれば 何が戻ってくるかは一目瞭然! 自動生成されたコードに対応する 実処理を実装するだけでOK! モック実装への差し替えも簡単!
まとめ
まとめ • API開発の手段として「gRPC」という手段も割と現実的 • スキーマをベースとしているのでAPIサーバーの実装と クライアントからのAPIの利用に型情報が使用できる • gRPCを直接使用する場合、HTTP/2 を組み合わせれば 高速な双方向性通信を活用したアプリケーションが作れる
• gRPC-WEBを使用すれば、WEBブラウザからも gRPCの開発手法を取り入れながら展開できる
型のある便利なAPI開発を楽しもう!
None