Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@shibukawa

シリアライズフォーマットに関する所感

More than 5 years have passed since last update.

このエントリーはポエムです。

JSONはプレーンテキストで読み書きできて、RFCで標準化されてて、多くの処理系で標準サポートされているというのは強みですね。特に、E4Xが死に絶えた今、ブラウザという環境がネイティブで対応しているのがJSONしかない、という意味でもJSONはオンリーワン。後付ではあるものの(とはいえ、XML Schemaですら後付けなので後付けがデメリットではない)、色々な言語環境にポートされているJSONスキーマもあるので、固くしようと思えばできる。といってもウェブのAPIの出入口ぐらいでしか書こうというモチベーションはわかないし、それであまり困ったこともない。

JSONと比べると、一部すぐれたフォーマットはいろいろあります。

MessagePackは速い。でも小さいかというと、lz4で上から圧縮するとJSONとサイズがほとんど変わらない。しかもプレーンテキストでなくてスキーマもないという点で、リポジトリに入れたり、長期間保存するデータには向かないかなぁと思っています。ストリームフォーマットで使ったり、ストレージに一時的にキャッシュする用途ぐらい。goの処理系がうまくできている( https://github.com/ugorji/go )ので、JSONである程度実装していて特別に速度が欲しいときに移行するというのは便利。RPCは使ったことないです。

YAMLはJSONと比べると少しはリポジトリ上のマージがしやすいというのはあるけど、まあ一部ですね。標準化されてなくて、処理系によってどこまでサポートされているのか分からんというのと、マップ、配列の書き方が2種類あって云々というのはマイナス。というかパーサ書くのツライ。1ラインで書ける表記を封印して、インデント固定、JSONと100%相互変換なYAML--な感じで、スキーマ、エディタ拡張、Chrome拡張でカラーリングみたいなツールがそろっているようなやつ、誰か作って。

iniは安定のフォーマットですね。シリアライズ用途ではなく、手でコンピュータにデータをインプットするにはまだまだ使えます。Pythonとか標準でサポートしてますしね。コメントも書けるし、ブロックも持てるので可読性高いです。まあストリームで使うとか、シリアライズで使うことはないですね。

Protocol Buffersはバイナリではあるものの、スキーマがあってさまざまな言語のパーサがあって、HTTP/2でRPCできるgRPCができた今、保存用以外の用途はすべてこれにしたいランクno.1ですね。周辺ツールサポートが強い。gRPCがnode.jsだけじゃなくて、ブラウザのクライアントも出力できたら完璧だったのに!

ということで、僕の中の順位としては

  1. JSON(オールマイティ)
  2. Protocol Buffers(保存用途以外は今後はこれにしたい)
  3. ini(設定ファイル用途では無難)
  4. MessagePack(JSONの用途のごく一部で速度が欲しい時)
  5. YAML(Unityで仕方なく)

Thriftはあまり使ったことないので省略。

あ、型情報持てる/スキーマがある/クエリーが得意という意味では、意外とSQLiteがシリアライズフォーマットとしては強いのかも、と思ったり。参照用途が多い場合は・・・ですが。

17
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
future
ITを武器とした課題解決型のコンサルティングサービスを提供します

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?