Format Atlas

FORMAT COMPARISON

CBOR vs MessagePack

CBORとMessagePackはどちらもJSONに似た値をバイナリへ直列化します。CBORはプロトコル用のタグや決定的エンコード規則を標準化し、MessagePackは汎用オブジェクトのコンパクトな符号化を提供します。

最終確認: 2026-09-26

CBORとMessagePack、どちらを選ぶ?

IETF仕様、拡張タグ、決定的エンコード要件をプロトコルで使うならCBORを検討し、既存アプリやMessagePackライブラリとの互換性が優先ならMessagePackを選びます。数値範囲、拡張値、正規化、実装間の互換性をテストしてください。

CBOR向き

制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現

  • JSONに似たデータを小さなバイナリ表現で扱う
  • 標準タグやアプリケーション定義タグで値の意味を示す

MessagePack向き

JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換

  • JSONの配列・マップ・基本型をバイナリで扱う
  • 拡張型やタイムスタンプを対応ライブラリ間で交換する

基本情報を比較

CBORとMessagePackの主な違いを確認できます。

項目CBORMessagePack
拡張子.cbor.msgpack、.mpk
MIME Typeapplication/cborapplication/octet-stream
主な用途制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換
圧縮nonenone
開く方法CBORライブラリやデコーダーで読み込み、診断表記またはJSON相当の表示へ変換して確認します。タグやバイト列など、JSONに直接対応しない値は変換時の表現を確認してください。MessagePack対応ライブラリやデコーダーで読み込みます。内容確認には診断表示やJSON相当の表示へ変換しますが、バイナリ値や拡張型がどう表示されるかも確認してください。
書き出し・変換JSONへ変換すると、バイト列やタグ付き値などはJSONに直接対応しないため、ツール固有の表記になることがあります。署名・ハッシュ・キャッシュキーに使う場合はRFC 8949の決定的符号化など、プロトコルで合意した符号化規則を適用します。JSONへ変換すると、バイナリ値や拡張型は標準JSONに直接対応しないため、配列・文字列・独自タグなどの表現に置き換わることがあります。往復変換では型と数値の範囲、タイムスタンプ、マップキー、拡張型を実データで照合します。

用途別の選び方

作りたいものや使う場面から選べます。

JSONに似たデータを小さなバイナリ表現で扱う

制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現

CBOR向き

標準タグやアプリケーション定義タグで値の意味を示す

制約のある機器や通信での構造化データ交換・COSEやIoTプロトコルなどでのデータ表現

CBOR向き

JSONの配列・マップ・基本型をバイナリで扱う

JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換

MessagePack向き

拡張型やタイムスタンプを対応ライブラリ間で交換する

JSONに似たデータのバイナリシリアライズ・対応するアプリ間での構造化データ交換

MessagePack向き

確認ポイント 1

CBORは整数、バイト列、配列、マップ、タグなどをRFC 8949で定義し、値の意味をタグで拡張できます。MessagePackは整数、文字列、バイナリ、配列、マップに加えてアプリ定義のextension型を持ちます。

使い分け

確認ポイント 2

CBOR仕様は決定的エンコードの要件を定め、署名やハッシュで同じ値を一貫して表す設計に使えます。MessagePackではアプリケーション側でキー順序やextension値の規則を定める必要があります。

使い分け

選ぶ理由を詳しく

  • 同じデータモデルでもエンコード、タグや拡張型、数値境界の扱いが異なり、直接のバイト互換性はありません。交換するフィールドと拡張の対応表を決め、実データで相互運用試験をします。

詳しく見る

参考資料・仕様