メッセージパック

メッセージパック
インターネットメディアの種類アプリケーション/vnd.msgpack
開発者古橋貞之
オープンフォーマット?はい
Webサイト公式サイトWikidataで編集する
メッセージパック
原作者古橋貞之
書かれたさまざまな言語
オペレーティング·システムどれでも
プラットフォームクロスプラットフォーム
タイプデータ交換
ライセンスBoostソフトウェアライセンス
Webサイトmsgpack.org
リポジトリ

MessagePackはコンピュータデータ交換フォーマットです。配列連想配列といった単純なデータ構造を表現するためのバイナリ形式です。MessagePackは可能な限りコンパクトでシンプルな実装を目指しています。公式実装は様々な言語で利用可能で、公式ライブラリやコミュニティによって作成されたライブラリも含まれています。例としては、C 、 C++C#DErlangGoHaskellJavaJavaScript ( NodeJS )、LuaOCamlPerlPHPPythonRubyRustScalaSmalltalkSwiftなどが挙げられます。[ 1 ]

データ型と構文

MessagePack によって処理されるデータ構造は、JSON形式で使用されるデータ構造とほぼ一致しています。これらは以下の要素型で構成されます。

  • ゼロ
  • bool、ブール値(trueおよびfalse)
  • int、整数(最大64ビットの符号付きまたは符号なし)
  • float、浮動小数点数(IEEE 単精度/倍精度)
  • str、UTF-8文字列
  • bin、バイナリデータ(最大2 32  − 1 バイト)
  • 配列
  • マップ、連想配列
  • ext(アプリケーション定義形式の任意データ、最大2 32  − 1 バイト)
  • タイムスタンプ(拡張タイプ = −1)(最大64ビット秒と32ビットナノ秒)

他のフォーマットとの比較

MessagePack はJSONよりもコンパクトですが、配列と整数のサイズに制限があります。一方で、バイナリデータとUTF-8以外のエンコードの文字列は扱えます。JSON ではマップキーは文字列でなければなりませんが、MessagePack ではそのような制限はなく、マップや配列などの型、そしてYAMLのような数値など、あらゆる型をマップキーにすることができます。

BSONと比較すると、MessagePack はより空間効率に優れています。BSON はメモリ内での高速な操作を目的として設計されているのに対し、MessagePack はネットワークを介した効率的な転送を目的として設計されています。例えば、BSON ではすべての文字列の末尾にヌル終端文字が必要であり、リスト要素には文字列インデックスが挿入されますが、MessagePack ではそうではありません。BSON は配列とマップの両方をドキュメントとして内部的に表現します。ドキュメントはマップであり、配列は 0 からカウントアップする 10 進文字列をキーとするマップです。一方、MessagePack はマップと配列の両方を配列として表現します。配列の各マップのキーと値のペアは連続しており、奇数項目がキー、偶数項目が値となります。

Protocol Buffers形式は、フィールド名を転送しないため、MessagePackよりもはるかにコンパクトな転送形式を提供します。ただし、JSONとMessagePackは型タグを使用して任意のデータ構造をシリアル化するのを目的としているのに対し、Protocol Buffersではデータ型を定義するためのスキーマが必要です。Protocol Buffersコンパイラは、シリアル化をアプリケーションコードに統合しやすくするために、ターゲット言語で定型コードを作成します。一方、MessagePackは動的に型付けされたデータ構造のみを返し、自動構造チェックは提供しません。

MessagePack はCBORRFC  7049で参照されています。

参照

参考文献

  1. ^ “Languages” . 2022年1月4日閲覧