3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

msgpack4zを使ってみた

Last updated at Posted at 2018-06-16

はじめに

ScalaでMessagePackがやってみたくて、色々なライブラリを調べてみたところ、このmsgpack4zが一番メンテされてそうな雰囲気がしたので試してみたところ、難儀したもののうまくいったので自分向けにメモ。

msgpack4zの特徴

(他に比べると)よくメンテされている、実装がシンプル。ScalaJS対応。Scalaz依存。悪く言えばこのblogが作者以外がmsgpack4zについて書いた最初のblogというレベルの文章の少なさ。

参考リンク

http://msgpack.org/ja.html
MessagePack公式。特に仕様とか

https://github.com/msgpack4z
GitHub。最後はソースコード頼み

https://xuwei-k.hatenablog.com/entry/20150106/1420506917
作者のブログ。作成の経緯とか設計とか書いてある。

https://gist.github.com/xuwei-k/5e902a3875153cffa25f48ba7def4188
サンプル書いてほしいってお願いしたら作者からもらったやつ。大変良くできているのでこれ1つあればとりあえず動かせるとおもう。ただお願いしたときにmsgpack4z-circeとかの仕様について勘違いがあって、msgpack4z-circeの使い方をお願いしたけどぼくがやりたい事的にはいらなかったというオチがある。(のでcirceまわりは除けばそのまま普通の使い方になる)

Codecの追加

UUIDのCodecが必要なので追加。文字列に変換するだけで良いのでこんな感じか。

import java.util.UUID

import msgpack4z._
import scalaz.\/

object MyMsgPack {
  implicit object UUIDCodec extends MsgpackCodec[UUID] {
    override def pack(packer: MsgPacker, a: UUID): Unit = packer.packString(a.toString)

    override def unpack(unpacker: MsgUnpacker): UnpackResult[UUID] =
      \/.fromTryCatchNonFatal(UUID.fromString(unpacker.unpackString()))
          .leftMap(Err)
  }
}

/はscalazのEitherで、Scala本体のEitherよりリッチなもの、という認識。unpackは失敗する可能性があるのでEitherを返さないといけない。

デバッグ

書けたけどこれどうやって正しいデータかテストするよ、という問題がMessagePack共通であるのだが、msgpack-toolsにmsgpack2jsonというコマンドがあり、curlの結果をこのコマンドで処理すれば問題なく見れる。

その他

Codecが不足している旨のコンパイルエラーが出たら、サンプルのGistにあったcase classのmapperを実装して、msgpack4z._msgpack4z.CodecInstances.all._をimportすれば殆ど解決する筈。Good luck!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?