Slide 1

Slide 1 text

Rustでつくって学ぶProtocol Buffers 隅田川.dev vol.2 1

Slide 2

Slide 2 text

自己紹介 ● 名前:0yu(おゆ、ぜろゆー) ● 出身:北海道 ● 趣味:映画鑑賞・旅行・アニメ・趣味開発 etc ● 最近はつけ麺と油そばに凝ってます ● Think ! FrontEnd by DMM #5 新卒会 [オンライン開催] 2 っっっz yud0uhu

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

gRPCとは 4 RPC(Remote Procedure Calll/遠隔手続き呼び出し)とは ● 「クライアント−サーバー」の通信プロトコル ○ サーバー上で実装されている関数(Procedure、プロシージャ)をクライアント からの呼び出しに応じて実行する技術 ■ サービス間通信のための新技術「gRPC」入門 | さくらのナレッジ

Slide 5

Slide 5 text

gRPCとは 5 RPCの問題点 ● 広く普及している技術(HTTP/HTTPSやXML、JSON)を利用するため導入しやすい ● テキストフォーマットなのでバイナリデータは扱いにくい ● HTTP/HTTPSでのやりとりになるので、転送効率面のオーバーヘッドが大きい

Slide 6

Slide 6 text

gRPCとは 6 gRPCとは ● RPCの問題点を解決するため、Googleによって開発されたRPCフレームワーク ● 通信にHTTP/2、IDLにProtobuf(Protocol Buffers)を使用

Slide 7

Slide 7 text

gRPCとは 7 Protocol Buffersとは ● Google謹製のデータフォーマットツール ○ データを効率よく(バイナリデータも含む)扱える ○ 構造化データをバイト列に変換(シリアライズ/デシリアライズ)するため、構造 化データを変換するためのスキーマ言語と捉えることもできる ■ Understanding Protocol Buffers with Practical Examples | by Luis Soares | Medium

Slide 8

Slide 8 text

RustでgRPCサーバーを立てる 8 gRPCでチャットサーバーを立てる ● 参考 ○ helloworld-tutorial.md - hyperium/tonic · GitHub ○ Example ○ Chat System by Rust and gRPC-Web

Slide 9

Slide 9 text

RustでgRPCサーバーを立てる 9 tonicとは ● RustでgRPCサーバを構築する場合、デファクトスタンダードなライブラリ

Slide 10

Slide 10 text

.protoファイルのsyntax highlightingを有効化 10 ● vscode-proto3 - Visual Studio Marketplace

Slide 11

Slide 11 text

必要なライブラリのインストール 11 ● protobuf — Homebrew Formulae ○ tonicを動かすには、プロトコルバッファのコンパイラであるprotocが必要 ● grpcurl — Homebrew Formulae ○ curlコマンドライクにgRPCサーバーとの対話を行うために必要

Slide 12

Slide 12 text

Protocol BufferでAPIを定義する 12

Slide 13

Slide 13 text

Protocol BufferでAPIを定義する 13 ● syntax = "proto3" でバージョンを指定 ● message型でスキーマを定義する ○ 複数のフィールドを持つ ○ それぞれのフィールドはスカラ型もしくはコンポジット型 ● service型でgRPCのAPI定義をする

Slide 14

Slide 14 text

Cargo.toml に依存関係を記載 14

Slide 15

Slide 15 text

Build Scriptの定義 15 ビルド時にprotoファイルを読んで、gRPCのコードを自動生成するためのbuild.rsを書く

Slide 16

Slide 16 text

ビルドする:cargo buildする 16

Slide 17

Slide 17 text

ビルドする:target配下にRustのコードが自動生成される 17

Slide 18

Slide 18 text

サーバーを実装する 18

Slide 19

Slide 19 text

サーバーを実装する 19

Slide 20

Slide 20 text

サーバーを実装する 20

Slide 21

Slide 21 text

動作確認 21 carrog runでサーバーを起動

Slide 22

Slide 22 text

動作確認 22 →レスポンスが返ってくれば成功 grpcurl宛にprotoファイルを指定してリクエストを送る

Slide 23

Slide 23 text

最終的な実装 23 https://github.com/yud0uhu/grpc-chat