3.9K Views
April 17, 24
スライド概要
GoDay 出張編 @ DeNA TechCon 2024
https://dena.connpass.com/event/308853/
DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。
Buf・Connect の紹介 ながっちょ 株式会社ディー・エヌ・エー - DeNA Co., Ltd. @ GoDay 出張編 / DeNA TechCon 2024 February 29, 2024 © DeNA Co., Ltd. 1
自己紹介 ながっちょ ソリューション事業本部 2023年 新卒入社 業務内容 サービス開発 (Go, gRPC…) © DeNA Co., Ltd. 2
今日話すこと 1 Buf とは? 2 Connect とは? © DeNA Co., Ltd. 3
gRPC ● Google が開発したオープンソースのPRC 特徴 ● HTTP/2 を使用 ● データシリアライズで Protobuf を使用 © DeNA Co., Ltd. 4
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
What is Buf ? © DeNA Co., Ltd. 6
What is Buf ? Protobuf を扱うためのコマンドラインツール。以下のような機能を持っている ● プラグインを利用したコード生成 ● Linter ● Formatter ● 破壊的変更のチェック yaml ファイルを用いて管理できる ● buf.yaml ● buf.gen.yaml ● buf.work.yaml © DeNA Co., Ltd. 7
buf.yaml モジュールの定義 ● lint ● breaking changes の設定 Lint 設定 破壊的変更 の検知 © DeNA Co., Ltd. 8
buf.gen.yaml どの Plugin を利用してコードを生成し、どこに配置するかなどの設定 https://buf.build/docs/configuration/v1/buf-gen-yaml/ © DeNA Co., Ltd. 9
外部 proto ファイルの依存管理 ● 外部 proto ファイルの依存は buf.yaml ファイルで管理できる ○ 依存先とそのバージョン (tag やコミットハッシュ) の指定が可能 ○ バージョンを指定しない場合は最新のものが取得される ● ローカルで煩雑な外部依存先の管理を行う必要がなくなり、Buf 設定ファイルで管理できる © DeNA Co., Ltd. 10
便利なコマンド ● 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
What is Connect ? © DeNA Co., Ltd. 12
What is Connect ? HTTP/1.1 または HTTP/2 上で動作し、ストリーミングを含む gRPC と gRPC-Web の互換性があるプロトコル https://connectrpc.com/ © DeNA Co., Ltd. 13
What is Connect ? 特徴 ● gRPC, Connect, gRPC-Web の 3つのプロトコルをサポート ● Webから利用する場合にProxy設定が不要 https://connectrpc.com/docs/introduction © DeNA Co., Ltd. 14
生成されるコードを見てみる © DeNA Co., Ltd. 15
connect-go https://github.com/connectrpc/connect-go 特徴 ● net/http ベースの実装になってる ● REST API との併用が可能 © DeNA Co., Ltd. 16
生成されるコード connect-go のプラグインによって出力されるフ ァイルは xxx.connect.go という形式で出力され る proto で定義した RPC に対応する Client 及び Handler の Interface などが生成される © DeNA Co., Ltd. 17
Proxyが不要 © DeNA Co., Ltd. 18
WebブラウザはgRPCに対応していない ● gRPC-Web や gRPC-gatewayといったプ ラグインを使用し、Proxyサーバーを経 由する必要がある https://github.com/grpc-ecosystem/grpc-gateway © DeNA Co., Ltd. 19
Connectでは変換プロキシが不要 ● Connectを使用して構築したgRPCサーバー はネイティブでgRPC-Webをサポート ● プロトコルを抽象化したインタフェースが 生成される ● I/Fを満たすハンドラーを実装すれば良い © DeNA Co., Ltd. 20
Connectでは変換プロキシが不要 ● Proxy の設定や運用のことを考えなくても gRPC 互換の API を呼び出せる © DeNA Co., Ltd. 21
まとめ ● Buf は、Protocol Buffers に関連した様々なコマンドを実行できる ● Formatter や Linter、Breaking Change Detector、依存パッケージ管理など、便利なコ マンドが用意されている ● Connect は、gRPC互換の API を呼び出せるライブラリ ○ REST API と gRPC API のいいとこ取りをした、有用な Protocol ● Connect を利用することで、変換Proxy の設定・運用が不要 © DeNA Co., Ltd. 22
© DeNA Co., Ltd. 23