読者です 読者をやめる 読者になる 読者になる

【D言語】MessagePackを使う

今回は、D言語でMessagePackを扱う方法をとても簡単に紹介します。

MessagePackとは

MessagePackは、簡単なオブジェクト構造をバイト列に変換する(シリアライズする)方法の一つです。 他のシリアライズの方法としては、JSONやBSONなどがあります。

準備

D言語の標準ライブラリたるPhobosには、MessagePackを扱うモジュールは含まれていません。 なので、MessagePackのD言語での公式実装である↓のライブラリを使用します。 https://github.com/msgpack/msgpack-d このライブラリは、以前にstd.msgpackとしてPhobos入りすると聞いたことあるのですが、現在のところまだPhobos入りしていません。

使い方

構造体をシリアライズ、デシリアライズする場合は、下記のように書きます。


import msgpack;
struct Data{
    uint time;
    string path;
    string name;
}
void main(){
    // シリアライズ
    Data data = Data(644, "/etc/passwd", "eman");
    byte[] serialized = data.pack();

    // デシリアライズ
    Data result;
    serialized.unpack(result);

    // 確認
    assert(data == result);
}

ファイルに出力

シリアライズされたバイト列をファイルに出力したりするには、下記のように書きます。


import std.file, std.typecons;
void main(){
    auto data = tuple(2, 2.71, "Napier");
    enum file = "test.mspgack"
    
    file.write(data.pack());

    typeof(data) result;
    (cast(ubyte[])file.read()).unpack(result);

    assert(data == result);
}

まとめ

MessagePackを使うと、簡単に内部のデータをファイルに書き出すことができます。 設定などをファイルに保存したい場合など、ぜひMessagePackを使ってみてください。 余談ですが、packやunpackをUFCSで書いていると、まるでRubyを使っている気分になりますね。