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
Ruby で gRPC を使おう / ruby-grpc
Search
nakaryo
December 17, 2025
Technology
140
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby で gRPC を使おう / ruby-grpc
nakaryo
December 17, 2025
More Decks by nakaryo
See All by nakaryo
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
2.1k
ギフティの技術ブログ 再出発とこれから / restart of giftee tech blog 2024
ryotanakaya
0
360
再利用パターン / Pattern of code reuse
ryotanakaya
0
210
エンジニアリングエッセイのススメ
ryotanakaya
0
520
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
2
1.7k
エンジニアと要件定義
ryotanakaya
4
1.2k
Go と並行処理
ryotanakaya
0
420
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.6k
増え続けるトランザクションデータと向き合う
ryotanakaya
0
550
Other Decks in Technology
See All in Technology
依頼文化をやめる日 EM視点で語るPlatform EngineeringとInclusive SRE / Discussing Platform Engineering and Inclusive SRE from an EM's Perspective
shin1988
4
5.4k
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
410
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
150
シンガポールで登壇してきます
yama3133
0
120
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
200
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
160
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.5k
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
210
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
600
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.3k
Kaggleで成長するために意識したこと
prgckwb
2
320
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
2
770
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.4k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.9k
Unsuck your backbone
ammeep
672
58k
The agentic SEO stack - context over prompts
schlessera
0
840
How GitHub (no longer) Works
holman
316
150k
Bash Introduction
62gerente
615
220k
Chasing Engaging Ingredients in Design
codingconduct
0
230
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Speed Design
sergeychernyshev
33
1.9k
Transcript
2025/12/17 Nakaya Ryota Ruby で gRPC を使おう
なかりょー @株式会社ギフティ 自己紹介 • バックエンドエンジニア • 前職はバックオフィス
ERP ベンダーで上流メイン • Go / Ruby / Java • AI に翻弄される今日この頃 @nakaryo79
みなさん、gRPC 使っていますか?
• RPC(Remote Procedure Call)とは、リモート上のコンピュータープログラムを呼び出して実行する 技術、またはそのためのプロトコル • あたかもローカル関数を呼び出しているかのようにリモートにある関数を実行できるようにする技 術を指す ◦
IDL があって、そこからクライアント/サーバーのコードを自動生成して利用する そもそも RPC とは
• RPC で通信するためのフレームワーク • Google が開発して、2015年に OSS 化した
• L7 プロトコルは HTTP/2 を使う • JSON などのテキストベースの通信ではなく、Protocol Buffers を使用してシリアライズしたデータ フォーマットでやり取りするのが特徴 • JSON などを生でやり取りするより 通信効率がいい • ちなみに、gRPC の “g” の意味はバージョンによって変わる(Google の “g” ではない) gRPC とは
• 特定の言語やプラットフォームに依存しない ◦ クライアント、サーバーが異なる言語で実装されていても通信可能 • IDL として .proto ファイルに IF
定義を記述して、そこからクラサバのボイラープレートを自動生成して使う gRPC とは
• マイクロサービスの流行と合わせて利用されるケースが増えてきた トレンド感
• データがシリアライズされるのでとにかく通信効率がいい ◦ つまり、速い!! ◦ JSON ベースでの通信と比べて2倍速いというベンチマークも ▪ もちろんワークロードやペイロードの内容にも依る ◦
マイクロサービスのようにリモートコールが増えるアーキテクチャでは価値が大きい • スキーマファーストでの開発を強制できる • JSON Schema と比べて IDL が読みやすい(と思う) • ボイラープレートがあるので、慣れれば API を叩く開発が楽 • ストリーミング機能もある gRPCを使うメリット
• gRPC そのもののエコシステムと Protocol Buffers の仕様を覚えないといけない ◦ OpenAPI スキーマや
GraphQL スキーマほど浸透していないので学習コスト... • 既存のツールが使えない場面がある ◦ curl で叩けない ◦ HTTP クライアントツールが対応していないなど ▪ とはいえ、Postman など有名どころは対応している • 公式にサポートされている言語に縛られる gRPCを使うデメリット
• C# / .NET • C++ • Dart • Go
• Java • Kotlin • Node • Objective-C • PHP • Python • Ruby • Swift 公式サポートのある言語 ※ 2025年時点
• grpc gem、grpc-tools gem が公式から提供されている • Protocol Buffers の定義ファイルを書いて
Ruby のコードを自動生成 • あとはサーバーとクライアントを実装するだけ Ruby での gRPC 開発
• service: 関数を束ねる概念 • rpc: 関数定義 • message: 構造体定義 Protocol
Buffers による IF 定義
• service: 関数を束ねる概念 • rpc: 関数定義 • message: 構造体定義 Protocol
Buffers による IF 定義 yaml と違ってクラスや関数定義の ように書けるので読みやすい
• 配列、enum、繰り返し、map などなど、様々な表 現ができる • https://protobuf.dev/programming-guides/proto 3/ Protocol Buffers による
IF 定義
• protobuf で定義されたメソッドを実装するだけ Ruby のサーバー側実装
• サーバースタブを作成する • そのスタブに対してメソッドを呼び出すだけ Ruby のクライアント側実装
• サーバースタブを作成する • そのスタブに対してメソッドを呼び出すだけ Ruby のクライアント側実装 • リモート呼び出しの際に URI とか意識しなくて良い
• レスポンスのパースなども不要 • Faraday などのクライアント gem も不要
• 実際に使ってみた(サーバー側は Go、クライアント側が Ruby という構成) • Protocol Buffers の IDL
記法にさえ慣れれば楽に開発できる • Ruby には型がないので、自動生成コードの挙動を追うのが大変だった ◦ レスポンスからエラーの詳細を取り出すためにキャストやデシリアライズなど色々しないといけなく、ドキュメン トも少なかったため苦労した • rails サーバーに組み込むには工夫が必要 ◦ gruf などのライブラリを使うのが良さそう ▪ https://github.com/bigcommerce/gruf • 巷に知見が少ない... 実際にプロダクションで使ってみての感想
• gRPC には色々辛い点があって、Buf という企業が Connect という RPC FW を開発、提供している ◦
https://github.com/connectrpc ◦ 2025年末時点だと Go、TypeScript、Python、Swift、Kotolin、Dart がサポートされている ◦ 新しい言語のサポート予定もあるそうなので Ruby もサポートされるといいですね... よもやま
• gRPC は高速 & 型安全な RPC フレームワーク • Ruby
での実装は難しくない • Rails サーバーに組み込むのはややハードルがある • Connect RPC も要チェック まとめ
Fin