| メッセージパック | |
|---|---|
| インターネットメディアの種類 | アプリケーション/vnd.msgpack |
| 開発者 | 古橋貞之 |
| オープンフォーマット? | はい |
| Webサイト | 公式サイト |
| メッセージパック | |
|---|---|
| 原作者 | 古橋貞之 |
| 書かれた | さまざまな言語 |
| オペレーティング·システム | どれでも |
| プラットフォーム | クロスプラットフォーム |
| タイプ | データ交換 |
| ライセンス | Boostソフトウェアライセンス |
| Webサイト | msgpack.org |
| リポジトリ | |
MessagePackはコンピュータデータ交換フォーマットです。配列や連想配列といった単純なデータ構造を表現するためのバイナリ形式です。MessagePackは可能な限りコンパクトでシンプルな実装を目指しています。公式実装は様々な言語で利用可能で、公式ライブラリやコミュニティによって作成されたライブラリも含まれています。例としては、C 、 C++、C#、D、Erlang、Go、Haskell、Java、JavaScript ( NodeJS )、Lua、OCaml、Perl、PHP、Python、Ruby、Rust、Scala、Smalltalk、Swiftなどが挙げられます。[ 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 はCBORのRFC 7049で参照されています。
参照
参考文献
- ^ “Languages” . 2022年1月4日閲覧。