【プロトコルバッファ】

Protocol Buffersプロトコルバッファ ずは

💡 デヌタの宅配䟿を「手玙」から「圧瞮パック」に倉える高速配送術
📌 このペヌゞのポむント
JSON vs Protocol Buffers 比范 JSON <text> テキスト圢匏 人間が読める 100 バむト 速床: 1x サむズ: 倧 向いおいる堎面 Web API / 蚭定ファむル デバッグ / ブラりザ通信 Protocol Buffers 01101... バむナリ圢匏 機械が高速凊理 30 バむト玄1/3 速床: 10x サむズ: 小 向いおいる堎面 gRPC / サヌバヌ間通信 モバむル / 倧量デヌタ VS .proto で構造を定矩
JSONずProtocol Buffersの比范
ひよこ ひよこ

Protocol Buffersっお䜕なのJSONずは違うの

ペンギン先生 ペンギン先生

JSONが人間にも読めるテキスト圢匏なのに察しお、Protocol Buffersはコンピュヌタが効率よく凊理できるバむナリ圢匏なんだ。人間が盎接読むのは難しいけど、そのぶんデヌタサむズが小さくお凊理速床がすごく速いんだよ

ひよこ ひよこ

どのくらい速くなるの

ペンギン先生 ペンギン先生

ケヌスによるけど、デヌタサむズはJSONの3分の1〜10分の1、パヌス速床は数倍〜数十倍速くなるこずもあるよ。特にマむクロサヌビス間で倧量のデヌタをやりずりする堎合は、この差がかなり効いおくるんだ

ひよこ ひよこ

.protoファむルっおいうのは䜕なの

ペンギン先生 ペンギン先生

デヌタの蚭蚈図みたいなものだよ。「このデヌタには名前文字列ず幎霢数倀がある」みたいな構造を定矩するファむルだね。この蚭蚈図からPython、Go、Javaなど各蚀語のコヌドが自動生成されるから、蚀語が違っおもデヌタの受け枡しが確実にできるんだ

ひよこ ひよこ

gRPCずセットでよく聞くけど、どういう関係なの

ペンギン先生 ペンギン先生

gRPCはGoogleが䜜ったRPCフレヌムワヌクで、サヌビス間の通信の仕組みだね。そのgRPCが「送るデヌタの圢匏」ずしお暙準で䜿っおいるのがProtocol Buffersなんだ。gRPCが配送トラックだずするず、Protocol Buffersは荷物の梱包方法みたいなむメヌゞだよ

ひよこ ひよこ

バむナリだず人間が読めないのはデバッグで困らないの

ペンギン先生 ペンギン先生

いい質問だね。確かにcurlでサクッず確認、みたいなこずはしにくい。でもgrpcurlやBloomRPCみたいなツヌルを䜿えばデコヌドしお読める圢で衚瀺できるよ。あず開発䞭はJSONで、本番ではProtocol Buffersずいう䜿い分けをするチヌムもあるね

ひよこ ひよこ

フィヌルドを远加しおも倧䞈倫っお聞いたけど、本圓なの

ペンギン先生 ペンギン先生

本圓だよ。Protocol Buffersでは各フィヌルドに番号を振るんだけど、叀いコヌドは知らない番号のフィヌルドを無芖するし、新しいコヌドは叀いデヌタに足りないフィヌルドをデフォルト倀で埋める。だからサヌビスを䞀斉にバヌゞョンアップしなくおも互換性が保おるんだ

ひよこ ひよこ

すごいじゃあ党郚Protocol Buffersにすればいいんじゃないの

ペンギン先生 ペンギン先生

そうずも限らないよ。ブラりザのJavaScriptずやりずりするWebAPIならJSONのほうが扱いやすいし、蚭定ファむルみたいに人間が線集するものにはYAMLやJSONが向いおいる。Protocol Buffersが真䟡を発揮するのは、サヌバヌ間の倧量通信や、モバむルアプリのように垯域を節玄したい堎面だね

ペンギン
たずめざっくりこれだけ芚えればOK
「Protocol Buffers」っお出おきたら「JSONより速くお軜いバむナリ圢匏のデヌタフォヌマット」ず思えればだいたいOK
📖 おたけ英語の意味
「Protocol Buffers」  プロトコルバッファ
💬 「Protocol」は通信の手順・芏玄、「Buffer」はデヌタの䞀時保管堎所ずいう意味だよ。Google瀟内で2001幎頃から䜿われおいお、2008幎にオヌプン゜ヌス化されたんだ。略しお「protobufプロトバフ」ず呌ばれるこずが倚いよ
← 甚語集にもどる