Buf・Connect の紹介

3.4K Views

April 17, 24

スライド概要

GoDay 出張編 @ DeNA TechCon 2024
https://dena.connpass.com/event/308853/

profile-image

DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Buf・Connect の紹介 ながっちょ 株式会社ディー・エヌ・エー - DeNA Co., Ltd. @ GoDay 出張編 / DeNA TechCon 2024 February 29, 2024 © DeNA Co., Ltd. 1

2.

自己紹介 ながっちょ ソリューション事業本部 2023年 新卒入社 業務内容 サービス開発 (Go, gRPC…) © DeNA Co., Ltd. 2

3.

今日話すこと 1 Buf とは? 2 Connect とは? © DeNA Co., Ltd. 3

4.

gRPC ● Google が開発したオープンソースのPRC 特徴 ● HTTP/2 を使用 ● データシリアライズで Protobuf を使用 © DeNA Co., Ltd. 4

5.

Protocol buffers Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data https://protobuf.dev/ 特徴 ● スキーマ言語 ● スキーマ定義から、gRPC 実装やドキュメントを生成できる ● プラグインで拡張すれば様々なコード生成が可能 © DeNA Co., Ltd. 5

6.

What is Buf ? © DeNA Co., Ltd. 6

7.

What is Buf ? Protobuf を扱うためのコマンドラインツール。以下のような機能を持っている ● プラグインを利用したコード生成 ● Linter ● Formatter ● 破壊的変更のチェック yaml ファイルを用いて管理できる ● buf.yaml ● buf.gen.yaml ● buf.work.yaml © DeNA Co., Ltd. 7

8.

buf.yaml モジュールの定義 ● lint ● breaking changes の設定 Lint 設定 破壊的変更 の検知 © DeNA Co., Ltd. 8

9.

buf.gen.yaml どの Plugin を利用してコードを生成し、どこに配置するかなどの設定 https://buf.build/docs/configuration/v1/buf-gen-yaml/ © DeNA Co., Ltd. 9

10.

外部 proto ファイルの依存管理 ● 外部 proto ファイルの依存は buf.yaml ファイルで管理できる ○ 依存先とそのバージョン (tag やコミットハッシュ) の指定が可能 ○ バージョンを指定しない場合は最新のものが取得される ● ローカルで煩雑な外部依存先の管理を行う必要がなくなり、Buf 設定ファイルで管理できる © DeNA Co., Ltd. 10

11.

便利なコマンド ● buf format ○ proto ファイルをフォーマット ○ https://buf.build/docs/format/style#indentation ● buf generate ○ コード生成してくれる ● buf breaking ○ proto ファイルの破壊的な変更を検出してくれる ■ gitのブランチを指定すると差分を確認できる ● buf breaking --against '.git#branch=main © DeNA Co., Ltd. 11

12.

What is Connect ? © DeNA Co., Ltd. 12

13.

What is Connect ? HTTP/1.1 または HTTP/2 上で動作し、ストリーミングを含む gRPC と gRPC-Web の互換性があるプロトコル https://connectrpc.com/ © DeNA Co., Ltd. 13

14.

What is Connect ? 特徴 ● gRPC, Connect, gRPC-Web の 3つのプロトコルをサポート ● Webから利用する場合にProxy設定が不要 https://connectrpc.com/docs/introduction © DeNA Co., Ltd. 14

15.

生成されるコードを見てみる © DeNA Co., Ltd. 15

16.

connect-go https://github.com/connectrpc/connect-go 特徴 ● net/http ベースの実装になってる ● REST API との併用が可能 © DeNA Co., Ltd. 16

17.

生成されるコード connect-go のプラグインによって出力されるフ ァイルは xxx.connect.go という形式で出力され る proto で定義した RPC に対応する Client 及び Handler の Interface などが生成される © DeNA Co., Ltd. 17

18.

Proxyが不要 © DeNA Co., Ltd. 18

19.

WebブラウザはgRPCに対応していない ● gRPC-Web や gRPC-gatewayといったプ ラグインを使用し、Proxyサーバーを経 由する必要がある https://github.com/grpc-ecosystem/grpc-gateway © DeNA Co., Ltd. 19

20.

Connectでは変換プロキシが不要 ● Connectを使用して構築したgRPCサーバー はネイティブでgRPC-Webをサポート ● プロトコルを抽象化したインタフェースが 生成される ● I/Fを満たすハンドラーを実装すれば良い © DeNA Co., Ltd. 20

21.

Connectでは変換プロキシが不要 ● Proxy の設定や運用のことを考えなくても gRPC 互換の API を呼び出せる © DeNA Co., Ltd. 21

22.

まとめ ● Buf は、Protocol Buffers に関連した様々なコマンドを実行できる ● Formatter や Linter、Breaking Change Detector、依存パッケージ管理など、便利なコ マンドが用意されている ● Connect は、gRPC互換の API を呼び出せるライブラリ ○ REST API と gRPC API のいいとこ取りをした、有用な Protocol ● Connect を利用することで、変換Proxy の設定・運用が不要 © DeNA Co., Ltd. 22

23.

© DeNA Co., Ltd. 23