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
Rustでつくって学ぶProtocol Buffers
Search
yud0uhu
September 02, 2023
Programming
1
130
Rustでつくって学ぶProtocol Buffers
隅田川.dev vol.2 by Sep 2, 2023
yud0uhu
September 02, 2023
Tweet
Share
More Decks by yud0uhu
See All by yud0uhu
動画配信サービスのフロントエンド実装に学ぶ設計原則
yud0uhu
1
280
非デザイナーのフロントエンドエンジニアがOOUIを考える
yud0uhu
9
5.2k
2023年の ゼロランタイムCSS in JS⚡️ を考える
yud0uhu
5
4.7k
Vue3/Electronで自作したマークダウンエディタをVue3/Tauriにリプレイスした話
yud0uhu
2
2.6k
入社半年を迎える新米エンジニアがカンファレンス・勉強会から得た学び
yud0uhu
0
950
Next.js×Prisma×GraphQL×Supabase +WASMでブログを自作した話
yud0uhu
0
1.1k
ブログを自作した話
yud0uhu
1
23
Wasmで動くRust製マークダウンパーサーを自作した話
yud0uhu
1
33
Rustで自作しながら学ぶ仮想DOM
yud0uhu
1
27
Other Decks in Programming
See All in Programming
Storybookの情報をMCPサーバー化する
shota_tech
3
1.1k
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
130
Rubyの!メソッドをちゃんと理解する
alstrocrack
1
300
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
81
21k
プロダクトエンジニアのしごと 〜 受託 × 高難度を乗り越えるOptium開発 〜
algoartis
0
220
Lambda(Python)の リファクタリングが好きなんです
komakichi
5
270
On-the-fly Suggestions of Rewriting Method Deprecations
ohbarye
3
5.4k
VitestのIn-Source Testingが便利
taro28
9
2.4k
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.2k
SwiftDataのカスタムデータストアを試してみた
1mash0
0
150
Носок на сок
bo0om
0
1.3k
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
250
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Raft: Consensus for Rubyists
vanstee
137
6.9k
It's Worth the Effort
3n
184
28k
How STYLIGHT went responsive
nonsquared
100
5.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
420
Done Done
chrislema
184
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.6k
A better future with KSS
kneath
239
17k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Transcript
Rustでつくって学ぶProtocol Buffers 隅田川.dev vol.2 1
自己紹介 • 名前:0yu(おゆ、ぜろゆー) • 出身:北海道 • 趣味:映画鑑賞・旅行・アニメ・趣味開発 etc • 最近はつけ麺と油そばに凝ってます
• Think ! FrontEnd by DMM #5 新卒会 [オンライン開催] 2 っっっz yud0uhu
3
gRPCとは 4 RPC(Remote Procedure Calll/遠隔手続き呼び出し)とは • 「クライアント−サーバー」の通信プロトコル ◦ サーバー上で実装されている関数(Procedure、プロシージャ)をクライアント からの呼び出しに応じて実行する技術
▪ サービス間通信のための新技術「gRPC」入門 | さくらのナレッジ
gRPCとは 5 RPCの問題点 • 広く普及している技術(HTTP/HTTPSやXML、JSON)を利用するため導入しやすい • テキストフォーマットなのでバイナリデータは扱いにくい • HTTP/HTTPSでのやりとりになるので、転送効率面のオーバーヘッドが大きい
gRPCとは 6 gRPCとは • RPCの問題点を解決するため、Googleによって開発されたRPCフレームワーク • 通信にHTTP/2、IDLにProtobuf(Protocol Buffers)を使用
gRPCとは 7 Protocol Buffersとは • Google謹製のデータフォーマットツール ◦ データを効率よく(バイナリデータも含む)扱える ◦ 構造化データをバイト列に変換(シリアライズ/デシリアライズ)するため、構造
化データを変換するためのスキーマ言語と捉えることもできる ▪ Understanding Protocol Buffers with Practical Examples | by Luis Soares | Medium
RustでgRPCサーバーを立てる 8 gRPCでチャットサーバーを立てる • 参考 ◦ helloworld-tutorial.md - hyperium/tonic ·
GitHub ◦ Example ◦ Chat System by Rust and gRPC-Web
RustでgRPCサーバーを立てる 9 tonicとは • RustでgRPCサーバを構築する場合、デファクトスタンダードなライブラリ
.protoファイルのsyntax highlightingを有効化 10 • vscode-proto3 - Visual Studio Marketplace
必要なライブラリのインストール 11 • protobuf — Homebrew Formulae ◦ tonicを動かすには、プロトコルバッファのコンパイラであるprotocが必要 •
grpcurl — Homebrew Formulae ◦ curlコマンドライクにgRPCサーバーとの対話を行うために必要
Protocol BufferでAPIを定義する 12
Protocol BufferでAPIを定義する 13 • syntax = "proto3" でバージョンを指定 • message型でスキーマを定義する
◦ 複数のフィールドを持つ ◦ それぞれのフィールドはスカラ型もしくはコンポジット型 • service型でgRPCのAPI定義をする
Cargo.toml に依存関係を記載 14
Build Scriptの定義 15 ビルド時にprotoファイルを読んで、gRPCのコードを自動生成するためのbuild.rsを書く
ビルドする:cargo buildする 16
ビルドする:target配下にRustのコードが自動生成される 17
サーバーを実装する 18
サーバーを実装する 19
サーバーを実装する 20
動作確認 21 carrog runでサーバーを起動
動作確認 22 →レスポンスが返ってくれば成功 grpcurl宛にprotoファイルを指定してリクエストを送る
最終的な実装 23 https://github.com/yud0uhu/grpc-chat