書いて覚えるSwift入門

第40回 新しいフォーマット「SION」の紹介

この記事を読むのに必要な時間:およそ 4 分

JSONより出来の良い妹「SION」

今回はSIONというデータシリアライゼーションフォーマット(data serialization format)を提案します。

Wh(at|y)Serialization?

その前にシリアライゼーション(serialization)とは何かを復習しておきましょう。⁠シリアライズ(serialize)すること?」正解です。では,シリアライズとは何? 文字入力を音声入力する(siri)ではありません:-)。プログラムの中のオブジェクト(objects)をバイト列(bytes)に変換することです。実質すべてのプログラムは入力されたバイト列をデシリアライズ(deserialize)し,処理した結果をバイト列で出力,つまりシリアライズしているわけで,それをどのような形式=フォーマットで行うかというのはコード(codes)以上に重要な課題と言えましょう。mp4は動画をシリアライズするためのフォーマットですし,JPEGやpngは静止画像をシリアライズするためのフォーマットですが,一般にシリアライゼーションフォーマットといった場合は特定のデータではなく汎用的にデータをシリアライズするものを指し,本記事でもその意味でこの言葉を用いることにします。

汎用シリアライゼーションフォーマットには大きく分けて2つの目的があります。

  • データ交換(data exchange)
  • データ可視化(data visialization)

うち前者に関しては,多くの言語がその言語専用のシリアライゼーションフォーマットを持っています。PerlならStorableRubyならMarshalPythonならPickleといった具合に。これらはいずれもバイナリフォーマット(binary for mats)で,人が直接読むのには不向きです。よって後者の目的のためのフォーマットが必要なのですが,よく見るものとしてはYAMLが挙げられるでしょう。次はYAMLでシリアライズしたデータの例です。

YAML,XML,and JSON

リスト1にYAMLの例を挙げます。とても直感的で人の手で読み書きするのも楽なので,Travisをはじめ,あちこちで設定ファイル(configuration files)として用いられています。

リスト1 YAMLの例

array:
  - ̃
  - true
  - 1
  - 0x1p+0
  - one
  -
    - 1
  -
    one: 1.0
bool: true
dictionary:
  array: []
  bool: false
  double: 0.0
  int: 0
  nil: ̃
  object: {}
  string:
double: 42.195
int: -42
nil: ̃
string: 漢字,カタカナ,ひらがなの入った"string"😇
url: https://github.com/dankogai/

一時期はXMLがその目的で流行ったことがありました。macOSになる前のMac OS Xでもかつては設定ファイルがXMLでしたリスト2)⁠

リスト2 XMLの例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>array</key>
  <array>
    <true/>
    <integer>1</integer>
    <real>1</real>
    <string>one</string>
    <array>
      <integer>1</integer>
    </array>
    <dict>
      <key>one</key>
      <real>1</real>
    </dict>
  </array>
  <key>bool</key>
  <true/>
  <key>date</key>
  <real>0.0</real>
  <key>dictionary</key>
  <dict>
    <key>array</key>
    <array/>
    <key>bool</key>
    <false/>
    <key>double</key>
    <real>0.0</real>
    <key>int</key>
    <integer>0</integer>
    <key>object</key>
    <dict/>
    <key>string</key>
    <string></string>
  </dict>
  <key>double</key>
  <real>42.195</real>
  <key>int</key>
  <integer>-42</integer>
  <key>string</key>
  <string>漢字,カタカナ,ひらがなの入った"string"😇</string>
  <key>url</key>
  <string>https://github.com/dankogai/</string>
</dict>
</plist>

しかしデシリアライズが,あまりに重いうえにかさばり過ぎということで,Mac OS X v10.2以降ではバイナリフォーマットに切り替わりました。

著者プロフィール

小飼弾(こがいだん)

1969年生まれ,東京都出身。元ライブドア取締役の肩書きよりも,最近はPokemon GOのガチトレーナーのほうが有名になりつつある……かもしれない永遠のエンジニアオヤジ。

活躍の場はIT業界だけでなく,サブカルからアカデミックまで多方面にわたり,ネットからの情報発信は気の向くまま毎日毎秒! https://twitter.com/dankogai,ニコニコチャンネルは,http://ch.nicovideo.jp/dankogai,blogはhttp://blog.livedoor.jp/dankogai/

当社刊行書籍は『小飼弾のアルファギークに逢ってきた』『小飼弾のコードなエッセイ』など。他にも著書多数。

コメント

コメントの記入