-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ProtocolBuffers
nishi_74322014 edited this page Aug 3, 2026
·
1 revision
-
バイナリエンコード手法
-
IDL を用いる方式を採用している。
-
gRPC の前提となる技術となっている。
-
互換ライブラリが揃っているため、
多くの言語でクロスプラットフォームで利用できる。
- ネットワーク上の通信を高速化すること
- C++ 構造体を用いたデータ格納からの有力な置き換え手段
-
.protoファイルに書き、ツールでコードを生成する。 - 様々な言語がサポートされており、IDL の価値を高めている。
syntax = "proto3";
message Person {
int32 id = 1;
string name = 2;
repeated string emails = 3;
}補足:
= 1/= 2はフィールド番号であり、 電文にはフィールド名ではなくこの番号が乗る。 MessagePack や JSON より小さくなるのはこのためである。フィールド番号は契約そのものなので、次を守ること。
- 一度使った番号を別の意味で再利用しない
- フィールドを削除したら
reserved 3;で番号を予約しておく- 1〜15 は 1 バイトで符号化されるので、頻出フィールドに割り当てる
補足: Protocol Buffers の実用上の要点は 「送受信の双方を同時に更新しなくてよい」ことである。
- 未知のフィールドは(proto3 の現行実装では)保持されて再送される
- proto3 では全フィールドが実質 optional であり、 受け側に無いフィールドは無視される
これにより、サービスを段階的にデプロイできる。 互換性を壊す変更は次のとおり。
- フィールド番号の変更・再利用
- 型の非互換な変更(
int32→stringなど)requiredの追加(proto2)
補足(最新化): .NET では Google.Protobuf +
Grpc.Tools(.protoからのコード生成)が標準である。.csprojに次のように書くとビルド時に生成される。<ItemGroup> <Protobuf Include="Protos\person.proto" GrpcServices="Server" /> </ItemGroup>
.protoを書かずに C# のクラスから使いたい場合は protobuf-net(Marc Gravell 氏)という選択肢もある。
- gRPC
- WebAPI
- MessagePack
- Protocol Buffers - Google for Developers
- Protocol Buffers - Wikipedia
- 今さらProtocol Buffersと、手に馴染む道具の話 - Qiita
Tags: IT国際標準, プログラミング, 通信技術, .NET開発, .NET Core, ASP.NET, ASP.NET Web API
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。