THANK YOU MATZ for a scripting language where parts don't snap off the objects and choke small children. -- Rasputin
お子さまにも安心なRubyをどうぞ、ってか。
次女が熱を出した。また風邪かしら。 この冬から春にかけてわが家はたびたび風邪に襲われている。 これで何度目か。
来週金曜日に開催される「第103回ヒューマンインタフェース研究発表会」のプレゼンテーション資料を書きはじめる。
昨年松江で開かれたソフトウェアシンポジウム2002のキーノートを聞いた中小路先生が呼んでくださったのだ。 タイトルは「インタフェースとしての言語のデザイン:Ruby」というもの。 プログラミング言語はユーザインタフェースであるという(私にとってはいつもの)話をすることになる。 ユーザインタフェースという観点から見た言語デザインが一般のインタフェースのデザインに役に立つように還元できるといいなあ、と思っているのだが、はたして。
プレゼンテーション資料は公開する予定。
YAMLの方が1024倍良いという主張をより明確にしたい。
まず、前提から。前にも述べたがあらゆる局面でYAMLがXMLより優れていると主張するつもりはない。 YAMLは基本的には構造データ表現フォーマットである。 文章のマークアップの領域でXMLと競うのは無意味だ。「YAMLの方が良い」という主張は当然「汎用データ表現」、 今月のLinux Magazineで使った用語を使えば「メタ・データフォーマット」として、という意味だ。
では、そのような前提のもとに、なぜYAMLが優れているか。
データ量
XMLを採用するとデータが膨らむのは多くの人が経験している通りだ。 その理由はテキスト形式を採用していることもあるが、なによりもあのタグ形式が原因だ。 XMLってなんであんなに冗長なんだろう。その点、YAMLは記号とインデントで表現がコンパクトである。
可読性
YAMLの表現がコンパクトであると言うことは、すなわち読みやすさにつながる。 もちろん、YAMLだって万能ではないので、読みにくいYAMLは当然あるわけだが、 YAMLで読みにくい構造データは、当然XMLでも読みにくい。逆は必ずしも成立しない。
柔軟性
XMLとYAMLを比較すると、XMLの方が圧倒的に柔軟性が高い。 XMLはスキーマによってあらゆる構造が表現可能だし、 「構造データも表現できる柔軟性がある」というだけで、構造データ表現専用というわけではない。 一方、YAMLにもYOD(YAML OK Document)というドキュメント形式があるが、 やはり構造データ表現のためのフォーマットと考えるべきだ。 YAMLは「XML+スキーマ」と同等の位置づけになるだろう。
柔軟性がある方とない方を比べたら、ある方が良いように感じられるかもしれない。 しかし、なんでもできるツールが使いやすいツールとは限らない。 むしろ目的に適合したツールの方が優れたツールである可能性のほうが高いだろう。 また、過度の柔軟性は人間に優しくないことを覚えておくべきだ。
使いやすく、現実に即したAPI
XMLを解析するAPIとしてはDOMやSAXがある。 しかし、構造データ表現のためには整形式では情報が足りない。 XMLを読み込んで取り出したノードからプログラム側で適切に型変換してやる必要がある。 XMLスキーマには型情報が含まれる(らしい)が、お手軽にXMLスキーマを使えるAPIってあったっけ。 一方、YAMLはロードとセーブのふたつのAPIでとりあえず利用できます。 YAMLデータは型情報を含んでいますから、型変換を気にする必要はありません。
「XMLは現代のS式」と呼ばれることがある。 どのような構造データもとりあえず表現できるという点ではその通りだろう。 しかし、一般人に広く知られてしまったという点でS式より罪は深い。 『図解で分かるS式とLisp』なんて本は今までもこれからも出版されないだろうし。
追記: 「YAMLが良い」という主張にもうひとつ暗黙の前提があるのに気がついた。それは「人間が読み書きする可能性がある」という点だ。人間の目に触れないならYAMLである必然はないものね。