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
160
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
300
非デザイナーのフロントエンドエンジニアがOOUIを考える
yud0uhu
9
5.4k
2023年の ゼロランタイムCSS in JS⚡️ を考える
yud0uhu
5
4.7k
Vue3/Electronで自作したマークダウンエディタをVue3/Tauriにリプレイスした話
yud0uhu
2
2.7k
入社半年を迎える新米エンジニアがカンファレンス・勉強会から得た学び
yud0uhu
0
980
Next.js×Prisma×GraphQL×Supabase +WASMでブログを自作した話
yud0uhu
0
1.2k
ブログを自作した話
yud0uhu
1
24
Wasmで動くRust製マークダウンパーサーを自作した話
yud0uhu
1
40
Rustで自作しながら学ぶ仮想DOM
yud0uhu
1
33
Other Decks in Programming
See All in Programming
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
210
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
12
3.1k
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
170
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
4
740
AIともっと楽するE2Eテスト
myohei
0
360
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
5
1.1k
XP, Testing and ninja testing
m_seki
3
240
Deep Dive into ~/.claude/projects
hiragram
14
2.5k
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
510
AI時代のソフトウェア開発を考える(2025/07版) / Agentic Software Engineering Findy 2025-07 Edition
twada
PRO
77
25k
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
330
Porting a visionOS App to Android XR
akkeylab
0
420
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Producing Creativity
orderedlist
PRO
346
40k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Docker and Python
trallard
44
3.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
730
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
680
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.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