🐈

CBORってなんだろう?

2021/03/01に公開

CBORとは

Webサービスでよく使われるデータ交換フォーマットとして有名なものはJSONだと思います。
ただ、サイズが冗長なこともあり、バイナリとして表現しようと様々なものが生まれてきました。(例えば、MongoDBで使われるBSONなど)

=> そんな中、今後注目されそうなものがRFC8949でRFC化されたCBORです。

特徴

  • JSONデータモデル「数値、文字列、配列、マップ(JSONオブジェクト)、およびfalse、true、nullなどの値」に基づいている。
  • エンコードされたデータは自己記述的である。
  • デコードのためのスキーマ記述は不要である。
  • JSONを使用したい一部のアプリケーションでは、暗号化キーグラフィックデータセンサー値などのバイナリデータを転送する必要があります。
    JSONでは、これらのデータをエンコードする必要があり(通常はbase64形式)、複雑さとかさばりが増します。
    => CBORでは、このバイナリデータをそのまま受け入れることができます。

一番の特徴は、CBOR自体がバイナリでエンコードされていることから、かさばりが節約されて、処理が高速化されるということです。
つまり、CBORはIoT向きのデータ交換フォーマットということになります。

手軽にエンコードしてみたい

  • CBOR playgroundにて、エンコードしたいオブジェクトとバイナリの16進表記の変換ができます。

データフォーマット

データフォーマットについて細かいエンコードの方法を記載していくのは大変なので、今回は割愛します。
下記に詳細が書いてあるのでご参考までに。
Concise Binary Object Representation (CBOR)

試してみた

  • CBORは、特定のアプリケーション用にゼロから実装するのはシンプルです。
  • 今回は、Node.jsでの実装をやってみます。

1.ライブラリのinstall

npm install cbor

参考: https://github.com/hildjj/node-cbor

2.実装

var CBOR = require('cbor');

var encodedBuffer = CBOR.encode({hello: 'world'});
var decodedObject = CBOR.decode(encodedBuffer);

console.log(decodedObject)

3.実行

❯ node main.js
{ hello: 'world' }

まとめ

思っていた以上に手軽に実行できました!
別記事でデータフォーマットについてもう少し深堀りしてみたいと思います。

Discussion