✨
grpc-gateway: gRPCをJSON/RESTに変換!神ツール爆誕!
Go 2026/2/12
Summary
gRPCの爆速パワーはそのままに、REST/JSON APIとして公開したい?まさにそんな夢を叶えてくれるのが、このgrpc-gatewayなんだ!ブラウザからでも、curlからでも、いつもの感じでgRPCサービスが叩けるようになる、まさに魔法のツールだよ!
概要:なにこれ凄い?
うおおお!皆さん、こんにちは!アキラです!今回取り上げるのは、GitHubトレンドを爆走中の「grpc-ecosystem/grpc-gateway」!これ、僕マジで感動したんだよね!gRPCって、そのパフォーマンスと型安全性が最高なんだけど、ぶっちゃけブラウザからのアクセスとか、既存のRESTクライアントとの連携ってちょっと面倒だったじゃない?そこなんだよ!このgrpc-gatewayは、まさにその悩みを一瞬で解決してくれるんだ!.protoファイルにちょっとアノテーションを追記するだけで、自動でJSON/RESTプロキシを生成してくれるんだぜ?「定義は一つ、インターフェースは無限大!」って感じで、開発効率が爆上がりするに決まってるじゃん!もうね、初めて動かした時は「これ、マジで動くのか…?うおおおおお!」って叫んじゃったよ!
ここが推し!
- Protobuf駆動の自動生成: .protoファイルにHTTPルールを定義するだけで、RESTfulなJSON APIが自動的に生成されるんだ!手動でRESTエンドポイントを実装する手間が一切なくなる!これって、開発者の時間と精神をめちゃくちゃ救ってくれるんだよ!
- 既存gRPC資産を活かせる: 今あるgRPCサービスに、ちょこっとHTTPアノテーションを追加するだけで、すぐにREST対応できちゃうんだぜ!新規開発はもちろん、既存サービスに手軽にRESTインターフェースを追加したい時にも大活躍!夢みたいだよね!
- Goネイティブな統合: Go言語で書かれたgRPCサービスとの相性はもう抜群!Goのエコシステムに完全に溶け込んでいて、まるで標準ライブラリの一部かのように自然に使えるんだ。高速で信頼性も高いGoで書かれてるってのも、僕にとっては超重要ポイントだよ!
サクッと試そう(使用例)
「まずこうやって動かしてみて!」
go.modを準備して、必要なモジュールをインストールだ!
go get google.golang.org/grpc google.golang.org/protobuf github.com/grpc-ecosystem/grpc-gateway/v2/runtime github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway google.golang.org/genproto/googleapis/api
- こんな感じの
.protoファイルを用意するんだ!google.api.httpアノテーションがポイントだぜ!
syntax = "proto3";
package helloworld;
import "google/api/annotations.proto";
option go_package = ".;helloworld";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
get: "/v1/greeter/{name}"
};
}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings.
message HelloReply {
string message = 1;
}
- そして、
protocコマンドでごりごりコードを生成だ!
# protocとprotoc-gen-go, protoc-gen-go-grpcのインストールは済ませておくんだぞ!
protoc -I. --go_out=. --go-grpc_out=. --grpc-gateway_out=. \
--proto_path=$(go env GOPATH)/src/github.com/grpc-ecosystem/grpc-gateway/v2/third_party/googleapis \
helloworld.proto
これで、helloworld.pb.goとhelloworld.gw.goが生成されるはず!あとはGoのコードでgRPCサーバーとGatewayサーバーを立ち上げるだけ!めちゃくちゃ簡単だろ?
ぶっちゃけ誰向け?
- GoでgRPCサービスを開発している君: フロントエンド連携で毎回REST APIを別途用意する手間から解放されたい?なら、これ一択だね!
- APIの一元管理を目指すストイックなエンジニア: ProtobufでAPI定義を一元化し、gRPCとRESTの両方を提供したいなら、まさに理想のツール!メンテナンス性が爆上がりするぞ!
- マイクロサービス間の通信はgRPC、外部公開はRESTと使い分けたいアーキテクト: 内部通信のパフォーマンスは落とさずに、外部にはなじみ深いREST形式で公開したい、そんなハイブリッド構成を実現したいなら、ドンピシャだよ!
まとめ
いやー、今回も興奮冷めやらぬまま語っちゃいましたけど、grpc-ecosystem/grpc-gateway、マジでヤバイです!gRPCのパワフルさとRESTの柔軟性をいいとこ取りできちゃうなんて、これからのAPI開発がめちゃくちゃ楽しみだぜ!君もぜひ試してみて、この感動を味わってほしい!これからもAkira’s Tech Logをよろしくね!