putcho01

Back

TABLE OF CONTENTS

Go と Connect で始めるスキーマ駆動開発Blur image

AI要約#

DeNA TechCon(GoDay 出張編)で「Buf・Connect の紹介」というタイトルで登壇した際のスライドについて、より具体的に説明を補う形でこの記事を書いています。


はじめに#

スキーマ駆動開発で gRPC を選ぶのは有力ですが、運用してみると課題も多いです。デバッグには grpcurl などの専用ツールが必要、ブラウザから呼ぶには gRPC-Web に加えて Envoy も必要、HTTP/2 必須など、開発体験を犠牲にしがちです。

Connect は、こうした gRPC の不便さを減らしつつ、スキーマ駆動のメリットを活かせる RPC フレームワークです。本記事では Connect の特徴・メリットと、併用すると便利な buf についてまとめます。


Connect とは#

Connect は Buf Technologies 社が開発した、ブラウザと gRPC の両方に対応する HTTP API 用の RPC フレームワークです。

  • Protocol Buffers でスキーマを定義し、型安全なサーバ・クライアントのコードを自動生成する
  • マーシャリング、ルーティング、圧縮、Content-Type のネゴシエーションなどを自動で扱う
  • 各言語でイディオマティックな型安全クライアントを生成できる

Go では connect-goconnectrpc.com/connect)として提供されており、様々な企業で本番運用の実績があります。


Connect の主な特徴#

特徴説明
3 プロトコル対応gRPC / gRPC-Web / Connect Protocol を同一サーバでサポート
HTTP/1.1 対応Unary RPC は HTTP/1.1 のみで利用可能(ストリーミングは HTTP/2 必要)
JSON + ProtobufContent-Type で JSON または Protobuf Binary を切り替え可能
net/http 準拠Go では標準ライブラリ net/http に統合され、既存ミドルウェアがそのまま使える
Envoy 不要gRPC-Web をプロキシなしで直接サポート

Connect Protocol という独自プロトコルは、HTTP/1.1・HTTP/2 のいずれでも動作し、curl と JSON だけでリクエストを送れるのが特徴です。例:

curl --header "Content-Type: application/json" \
     --data '{"sentence": "I feel happy."}' \
     https://demo.connectrpc.com/connectrpc.eliza.v1.ElizaService/Say
bash

Connect のメリット(gRPC との比較)#

観点gRPCConnect
デバッグgrpcurl など専用ツールが必要curl + JSON で十分
ブラウザ対応gRPC-Web + Envoy が必須プロキシ不要で直接通信
インフラHTTP/2 + プロキシHTTP/1.1 でも可、プロキシ不要
Go テスト専用テスト utilitiesnet/httptest など標準パッケージで記述可能
既存エコシステムgRPC 固有net/http や fetch ベースで親和性が高い

まとめると

  • スキーマ駆動のメリットは維持 — 型安全性やコード生成による開発速度はそのまま
  • gRPC の煩わしさを軽減 — 専用ツール、Envoy、HTTP/2 必須といった縛りを緩和
  • gRPC と完全互換 — Connect サーバに gRPC クライアントから、Connect クライアントで gRPC サーバへと呼び出せる。段階的な移行も可能

Go では net/httphttp.Handler として動作するため、通常の HTTP サーバや WebSocket と同じミドルウェア(認証、ロギング、メトリクスなど)を共有できます。


buf の役割と Connect との関係#

Connect は Buf 社製のため、Protobuf の開発では buf との組み合わせが一般的です。buf は protoc の代替となる Protobuf 開発ツールで、主に次の機能を提供します。

buf の機能説明
buf build.proto をコンパイル(protoc の代替、より高速)
buf lint命名規則・スタイルのチェック(snake_case、パッケージ名など)
buf breaking前方・後方互換性を壊す変更の検出
buf generatebuf.gen.yaml で protoc プラグインを一元管理し、Go / Connect コードを生成
BSRBuf Schema Registry でスキーマの管理・配布

buf.gen.yamlprotoc-gen-connect-go を指定すれば、Connect 用の Go コードを一括生成できます。protoc に比べ、設定の統一、高速化、Lint と Breaking 検出により Protobuf 開発の効率が上がります。


まとめ・採用の目安#

  • Connect の強み
    • シンプルさ、gRPC 互換性、標準 HTTP との親和性
  • buf の強み
    • Protobuf の開発フロー改善(Lint / Breaking 検出 / 高速ビルド)
  • 採用を検討してみる場面
    • Go または TypeScript で開発、ブラウザ経由で API を呼ぶ、インフラをシンプルに保ちたい、といった場合

参考#

profile

putcho01

サーバーサイドエンジニア。 GoとGCPをよく触っています。

Go と Connect で始めるスキーマ駆動開発
Author putcho01
Published at 2026年2月24日