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-go(connectrpc.com/connect)として提供されており、様々な企業で本番運用の実績があります。
Connect の主な特徴#

| 特徴 | 説明 |
|---|---|
| 3 プロトコル対応 | gRPC / gRPC-Web / Connect Protocol を同一サーバでサポート |
| HTTP/1.1 対応 | Unary RPC は HTTP/1.1 のみで利用可能(ストリーミングは HTTP/2 必要) |
| JSON + Protobuf | Content-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/SaybashConnect のメリット(gRPC との比較)#
| 観点 | gRPC | Connect |
|---|---|---|
| デバッグ | grpcurl など専用ツールが必要 | curl + JSON で十分 |
| ブラウザ対応 | gRPC-Web + Envoy が必須 | プロキシ不要で直接通信 |
| インフラ | HTTP/2 + プロキシ | HTTP/1.1 でも可、プロキシ不要 |
| Go テスト | 専用テスト utilities | net/httptest など標準パッケージで記述可能 |
| 既存エコシステム | gRPC 固有 | net/http や fetch ベースで親和性が高い |
まとめると
- スキーマ駆動のメリットは維持 — 型安全性やコード生成による開発速度はそのまま
- gRPC の煩わしさを軽減 — 専用ツール、Envoy、HTTP/2 必須といった縛りを緩和
- gRPC と完全互換 — Connect サーバに gRPC クライアントから、Connect クライアントで gRPC サーバへと呼び出せる。段階的な移行も可能
Go では net/http の http.Handler として動作するため、通常の HTTP サーバや WebSocket と同じミドルウェア(認証、ロギング、メトリクスなど)を共有できます。
buf の役割と Connect との関係#
Connect は Buf 社製のため、Protobuf の開発では buf との組み合わせが一般的です。buf は protoc の代替となる Protobuf 開発ツールで、主に次の機能を提供します。

| buf の機能 | 説明 |
|---|---|
| buf build | .proto をコンパイル(protoc の代替、より高速) |
| buf lint | 命名規則・スタイルのチェック(snake_case、パッケージ名など) |
| buf breaking | 前方・後方互換性を壊す変更の検出 |
| buf generate | buf.gen.yaml で protoc プラグインを一元管理し、Go / Connect コードを生成 |
| BSR | Buf Schema Registry でスキーマの管理・配布 |
buf.gen.yaml に protoc-gen-connect-go を指定すれば、Connect 用の Go コードを一括生成できます。protoc に比べ、設定の統一、高速化、Lint と Breaking 検出により Protobuf 開発の効率が上がります。
まとめ・採用の目安#
- Connect の強み
- シンプルさ、gRPC 互換性、標準 HTTP との親和性
- buf の強み
- Protobuf の開発フロー改善(Lint / Breaking 検出 / 高速ビルド)
- 採用を検討してみる場面
- Go または TypeScript で開発、ブラウザ経由で API を呼ぶ、インフラをシンプルに保ちたい、といった場合
