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
1
100
Ruby で gRPC を使おう / ruby-grpc
nakaryo
December 17, 2025
Tweet
Share
More Decks by nakaryo
See All by nakaryo
ギフティの技術ブログ 再出発とこれから / restart of giftee tech blog 2024
ryotanakaya
0
330
再利用パターン / Pattern of code reuse
ryotanakaya
0
180
エンジニアリングエッセイのススメ
ryotanakaya
0
450
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
2
1.6k
エンジニアと要件定義
ryotanakaya
4
1.1k
Go と並行処理
ryotanakaya
0
390
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.5k
増え続けるトランザクションデータと向き合う
ryotanakaya
0
530
シャッフルランチシステムを刷新してみた話
ryotanakaya
0
200
Other Decks in Technology
See All in Technology
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
210
大規模ECサイトのあるバッチのパフォーマンスを改善するために僕たちのチームがしてきたこと
panda_program
1
350
Phase02_AI座学_応用
overflowinc
0
2.2k
A4)シラバスを超えて語る、テストマネジメント
moritamasami
0
110
建設DXを支えるANDPAD: 2025年のセキュリティの取り組みと卒業したいセキュリティ
andpad
0
150
Visional 28新卒プロダクト職(エンジニア/デザイナー)向け 会社説明資料 / Visional Company Briefing for Newgrads 28
visional_engineering_and_design
1
120
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
140
20260320_JaSST26_Tokyo_登壇資料.pdf
mura_shin
0
110
形式手法特論:SMT ソルバで解く認可ポリシの静的解析 #kernelvm / Kernel VM Study Tsukuba No3
ytaka23
1
740
FastMCP OAuth Proxy with Cognito
hironobuiga
3
120
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
2
460
Windows ファイル共有(SMB)を再確認する
murachiakira
PRO
0
230
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
240
Faster Mobile Websites
deanohume
310
31k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
240
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
180
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
The Cult of Friendly URLs
andyhume
79
6.8k
Become a Pro
speakerdeck
PRO
31
5.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