異なるシステム間のデータ交換を爆速に!Googleが生んだ共通言語 — protobuf

protocolbuffers/protobufC++71.0k

Protocol Buffers(protobuf)は、Googleが開発した「構造化データを効率よくやり取りするための仕組み」です。たとえば、異なるプログラミング言語で書かれたシステム同士がデータをやり取りする際、JSONやXMLのような文字ベースの形式よりも小さく・速く・正確にデータを送受信できます。C++、Java、Python、Go、C#、Ruby、PHP、JavaScript、Dart、Objective-Cなど10以上の言語に対応しており、言語やOSを問わず同じデータ定義を使い回せる点が最大の強みです。Webサービスのバックエンド通信やマイクロサービス間の連携、モバイルアプリとサーバーの通信など、大規模なシステム開発で広く利用されています。

🔥 なぜ話題?

マイクロサービスやgRPC(高速な通信方式)の普及に伴い、protobufはモダンなシステム設計のデファクトスタンダードとしての地位を強めています。特にAI・クラウド関連サービスが急増する中で、効率的なデータ通信基盤としての需要が高まり続けていることが注目の背景です。

💡 こう使える!

たとえば、スマホアプリ(Swift/Kotlin)とサーバー(Python/Go)の間でユーザー情報をやり取りする場面で、`.proto`ファイルにデータの構造を一度だけ定義すれば、各言語用のコードが自動生成され、型の不一致や変換ミスを防ぎながら高速にデータ通信できます。

ユースケース: 異なるプログラミング言語やシステム間で、高速かつ正確にデータをやり取りするための共通フォーマットとして使う。

  • 10以上のプログラミング言語に対応し、言語やOS問わずデータ定義を共有できる
  • JSONやXMLより小さく速いバイナリ形式でデータをシリアライズ(変換)できる
  • Googleが15年以上メンテナンスしており、gRPCなど主要技術の基盤として広く採用されている
GitHubで見る →

Protocol Buffers - Google's data interchange format

技術情報

言語

C++

ライセンス

NOASSERTION

最終更新

2026-03-22

スター数

70,974

フォーク数

16,085

Issue数

260

トピック

marshallingprotobufprotobuf-runtimeprotocprotocol-buffersprotocol-compilerrpcserialization

技術詳細

アーキテクチャ・仕組み

protobufは.protoファイルにデータ構造(メッセージ型)を定義し、専用コンパイラprotocで各言語用のソースコードを自動生成する仕組みです。生成されたコードを使ってデータをバイナリ形式にシリアライズ(直列化)・デシリアライズ(復元)します。

  • シリアライズ形式: コンパクトなバイナリ形式(JSONやXMLに比べ数倍小さく高速)
  • スキーマ駆動: .protoファイルが唯一の正(Single Source of Truth)となり、型安全なデータ通信を実現
  • 後方互換性: フィールドの追加・削除時にも既存コードが壊れにくい設計

対応言語・プラットフォーム

言語提供場所
C++(ランタイム + protoc)リポジトリ内 src/
Javaリポジトリ内 java/
Pythonリポジトリ内 python/
Objective-Cリポジトリ内 objectivec/
C#リポジトリ内 csharp/
Rubyリポジトリ内 ruby/
PHPリポジトリ内 php/
Go別リポジトリ protocolbuffers/protobuf-go
JavaScript別リポジトリ protocolbuffers/protobuf-javascript
Dart別リポジトリ dart-lang/protobuf

ビルドシステム

  • Bazel + Bzlmod: Bazel 8以降で推奨される最新のモジュール管理方式に対応
  • Bazel + WORKSPACE: レガシー方式も引き続きサポート(30.x以降は rules_javarules_python の追加ロード文が必要)
  • ソースビルド: C++ユーザーやprotocのカスタマイズが必要な場合はソースからビルド可能

プリビルドバイナリ

  • GitHubリリースページで各プラットフォーム向けの protoc-$VERSION-$PLATFORM.zip を配布
  • 古いバージョンは Maven リポジトリ からも取得可能

制約・注意点

  • mainブランチのHEADは互換性のない変更やテスト不足による不具合が発生する可能性がある
  • C++でソースビルドする場合は、リリースブランチのリリースコミットにピン留めすることが推奨されている
  • リリースブランチであっても、リリースコミット間では不安定になる場合がある

ライセンス

  • Copyright 2008 Google LLC(具体的なライセンス種別はリポジトリのLICENSEファイルを参照。BSD 3-Clause License)

コミュニティ・サポート

インストール・クイックスタート

protobufコンパイラ(protoc)のインストール

方法1: ビルド済みバイナリをダウンロード(非C++ユーザー向け・最も簡単)

GitHubリリースページから protoc-$VERSION-$PLATFORM.zip をダウンロードして展開します。

方法2: Bazel + Bzlmod(Bazel 8以降)

MODULE.bazel に以下を追加:

bazel_dep(name = "protobuf", version = <VERSION>)

方法3: Bazel + WORKSPACE(レガシー)

http_archive(
    name = "com_google_protobuf",
    strip_prefix = "protobuf-VERSION",
    sha256 = ...,
    url = ...,
)
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()

ランタイムのインストール

各言語ごとにリポジトリ内のサブディレクトリ(java/, python/, csharp/ 等)にインストール手順が記載されています。

参考になる外部の関連記事

関連リポジトリ

kubernetes/kubernetes

kubernetes/kubernetesGo120.6k

Kubernetesは、コンテナ化されたアプリケーションの自動デプロイ、スケーリング、管理を行うオープンソースのコンテナオーケストレーションプラットフォームです。複数のサーバー間でコンテナを効率的に配

プロキシ接続を美しく管理!Windows・Mac・Linux対応のネット環境切り替えツール — clash-verge-rev

clash-verge-rev/clash-verge-revTypeScript98.5k

clash-verge-revは、インターネットの接続方法を簡単に切り替えられるツールです。プロキシ(ネット接続の中継サーバー)の設定や管理を、見やすいグラフィカル画面で行えます。Windows、Ma

Vimを現代に再構築!拡張性と使いやすさを極めたテキストエディタ — neovim

neovim/neovimVim Script98.1k

Neovimは、プログラマーに長年愛されてきたテキストエディタ「Vim」を、現代の開発環境に合わせて大幅に改良したソフトウェアです。Vimの操作性はそのままに、他のプログラミング言語やツールとの連携を

rust-lang/rust

rust-lang/rustRust88.0k

Rustはメモリ安全性と高性能を両立するシステムプログラミング言語です。ガベージコレクタなしでメモリ安全を実現する所有権システムが特徴的です。WebAssembly、OS開発、ネットワークプログラミン

Windows限定から全プラットフォームへ!進化したコマンドライン自動化ツール — PowerShell

PowerShell/PowerShellC#51.6k

PowerShellは、Windows、Mac、Linuxで動作するコマンドライン操作ツールです。従来のWindowsのコマンドプロンプトよりもはるかに強力で、JSONやCSVなどのデータを簡単に扱え