Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フロントエンドエンジニアも知っておきたいgRPC
Search
Kenta Suzuki
April 24, 2018
Programming
18
11k
フロントエンドエンジニアも知っておきたいgRPC
#roppongijs #2 で話しました
Kenta Suzuki
April 24, 2018
Tweet
Share
More Decks by Kenta Suzuki
See All by Kenta Suzuki
レガシーアプリケーションのリニューアルにNuxt.jsで戦う #vuefes_reject
suusan2go
9
22k
rescue されない例外?! / A Exception not rescue #megurorb
suusan2go
0
2.9k
Rails サービスクラス再考 / have a rethink on Rails service class
suusan2go
8
12k
Flutterでアプリ作ってる話
suusan2go
2
3k
Nuxt.js + TypeScript = Great!
suusan2go
8
42k
ポストRailsとしてのKotlin + Spring Boot #m3kt
suusan2go
4
2.2k
gRPC on Spring Boot
suusan2go
0
3.1k
ずっとRubyをやっていたエンジニアがGoに入門して挫折して再挑戦した話
suusan2go
2
5.3k
非SPAなRailsアプリでレールに乗りつつReactを使う話
suusan2go
6
7.8k
Other Decks in Programming
See All in Programming
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
関数実行の裏側では何が起きているのか?
minop1205
1
670
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
5
1.9k
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
Developing static sites with Ruby
okuramasafumi
0
240
[堅牢.py #1] テストを書かない研究者に送る、最初にテストを書く実験コード入門 / Let's start your ML project by writing tests
shunk031
12
7.1k
connect-python: convenient protobuf RPC for Python
anuraaga
0
380
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
2
640
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.4k
sbt 2
xuwei_k
0
250
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Rails Girls Zürich Keynote
gr2m
95
14k
For a Future-Friendly Web
brad_frost
180
10k
Designing for humans not robots
tammielis
254
26k
Visualization
eitanlees
150
16k
Done Done
chrislema
186
16k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Transcript
フロントエンドエンジニアも知って おきたいgRPC #Roppongi.js 2018/04/24 @suusan2go
自己紹介 • Kenta Suzuki / @suusan2go • M3,inc / Software
Engineer • 経験値で言うとこんな感じ ◦ Ruby > JavaScript > Kotlin(ServerSide) > Golang • 半分くらいサーバーサイドエンジニア
みなさんAPIどうやって実装・管理してますか • 前回の#roppongi.jsで聞いたときはSwaggerでやってる人多数 • Swagger Editorで記述してくの結構辛いみたいな話を何人も聞いた • 理想のRESTみたいなの作るのも維持していくのも結構たいへん
gRPC
gRPCとは • HTTP/2を使ったRPCフレームワーク • 2015年にGoogleが公開(ちなみにgRPCのgはGoogleではない) • ProtocolBuffersでインターフェースを定義。そこからクライアント / サーバ の実装を生成出来る
• メルカリさんや、サイバーエージェントさんで事例
Protocol Buffers
gRPCのサーバ(Go Server)
gRPCのクライアント(Node Client)
gRPCの利点 • メソッド名、リクエスト、レスポンスの型だけ決めれば良い ◦ URL、パラメータの渡し方、メソッドどうする?で悩まなくていい • 異なる言語、サーバ間でもType Safeにやり取りできる ◦ Go
/ JS / Java / Ruby / C ++ / Python / Node … https://grpc.io/docs/ • ブラウザでは動かないけどな!
gRPC-Web
• gRPCのクライアントをブラウザで動かせる! • HTTP/*で動く • ブラウザの制限によりgRPCの一部の機能はまだ使えない bidirectional streamingとか https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-WEB.md gRPC-Web
gRPC-WEBの実装
gRPC-WEBの実装 • improbable社?がgRPCをWEBで使うために 実装した。この実装が本家にも FB。 • TypeScript Generator ◦ (protoファイルからTypeScriptファイル
を作成) • gRPC-Web Client ◦ (Web用のgRPCクライアント実装) • grpcwebproxy ◦ (バックエンドのgRPCの前段に配置) • grpcweb ◦ (Go向けのgRPCサーバwrapper)
gRPC-WEBの実装 • 長らくearly acessということでprivateだった が、2018年の3月頃に再びpublicに? • gRPC公式のWEB実装 • 現在はβリリース! 今日話すのはこっちの話!
(現状の)公式gRPC-Webの構成 • nginxによるproxy ◦ これによりブラウザからのリクエストをgRPCのリクエストに変換して gRPCサーバに送る ◦ 先日envoyというプロキシもgRPC-Webをサポートした • Browserで動作できるJSクライアントを生成するためのモジュール
◦ 最終的にClosure CompilerでJSにコンパイルする
(現状の)公式gRPC-Webの構成 gRPC Server HTTP/* HTTP/2 gRPC-Web gRPC ※独自モジュールを追加 grpc_gateway_module.c
gRPC-Webを使ったアプリケーション • 公式のrepositoryにDockerのサンプルが用意されている • めちゃくちゃ色々ビルドが走るので、ローカル環境で動かすのはなかなか 大変そう ◦ nginxのビルド ◦ protocol
buffersからgRPCコードの生成 C++ / JavaScript ◦ Closure Compilerでのコンパイル ◦ TODO Listくらい作ってやろうと思ってましたがdocker buildが途中で 固まってサンプル動かす所で終わってしまった
None
None
None
今後のgRPC-Webのロードマップ • gRPCで得られるメリットをそのままブラウザにも持ち込める ◦ JSが動かせればよいので、例えばReact Nativeとかでも使えるはず • 現状は素のJSしか生成してくれないのでTypeSafeではないが、 TypeScript supportはWork
In Progress ◦ https://github.com/grpc/grpc-web/blob/master/ROADMAP.md
• binary protobuf encodingなので、Chrome Developer Toolsで確認する のはちょっとしんどい ◦ Non-binary message
encodingがWork In Progress ◦ 上記の解決というよりはパフォーマンスに課題感を感じているらしい ◦ gmailなんかではJSON LIKEなフォーマットが使われているらしい (JSON likeとは・・・) 今後のgRPC-Webのロードマップ
• Proxy層(nginx / envoy)を挟むのがちょっと… ◦ Local Proxyを検討中らしい。要はgRPCのサーバに直接組み込める gRPC-Web用のProxy。nginxなどを立てる必要がなくなる。 • React
/ Vue / Angular でどう使えばいいの? ◦ This is to provide first-class support for gRPC API and gRPC-Web in popular Web frameworks such as Angular. とのこと ◦ メジャーどころは何かしらサポートがありそう 今後のgRPC-Webのロードマップ
ロードマップが全て達成されると… .proto ファイル gRPC Server Local Proxy gRPC Server Local
Proxy HTTP/* HTTP/* HTTP/*
RESTと同じインフラでgRPCが使える! .proto ファイル gRPC Server Local Proxy gRPC Server Local
Proxy HTTP/* HTTP/* HTTP/*
gRPC-Web はオススメ? • TypeScript Support / Non-binary message encoding が実装されたら、か
なりTypeSafeなフロントエンドの開発が実現できそうなので、 結構自分は 期待している • nginxのgRPCサポートなど、周辺のツールやミドルウェアも揃ってきてる印 象ある。Local Proxyが実装されると、REST APIと同じインフラでもgRPCの 恩恵が得られそう!
まとめ • 現状の grpc/grpc-web はβとは言っているものの、なかなかこれでプロダ クト開発していくのはしんどそう • improbable-eng/grpc-web に既に実アプリで使えるツール群が揃ってい るので、プロダクションで使うならまだこちらがオススメという所感です
• 公式?のgrpc-webは The current release is a Beta release, mainly for early adopters to provide feedback on the JS API. とのことなので、みなさん使っ てフィードバックしましょう!
ありがとうございました