XMLやJSONとYAMLとの違い
ここまでの例で一目瞭然のように、YAMLはXMLに比べて著しく簡潔です。YAMLファイルの中身は、ほとんどが実際のデータです。XMLのように、開始タグと終了タグが延々と続き、実際のデータよりタグの方が往々にして長いという事態は避けられます。このためYAMLは、手作業でのメンテナンスが必要な各種データファイルには非常に適しています。
一方、YAMLの弱点は、スキーマやDTDの概念がないことです。このため、ファイルが目的の形式に合致しているかどうかを検証する手段がありません。XMLには、冗長な記述に伴う苦労がある反面、全体として成熟していることから、検証のためのさまざまなツールが用意されています。YAMLにはそのようなツールは(現段階では)ありません。
JSONは、効率性の向上やファイルサイズの節約を目指したデータにはうってつけです。スペースや終了タグによるサイズの浪費がほとんどないからです。しかし、ファイルの中身が複雑になってくると、膨大な数の「閉じかっこ」で収拾がつかない状況に陥ってしまいます。これが特に顕著なのが、JSONを基にしたJavaFXのコードです。UI構造がちょっとでも複雑だと、データファイルの最後の方は、理解不能なほど込み入ってきます。
このJavaFXコードの例を見てください(ページ上部の[Edit this page]リンクをクリック)。最後の部分が特に目を引きます。
} } } } ] } } center: bookPanel }
構造を示す{}
とリストを示す[]
の両方のかっこが混在しているため、JSON形式の大規模なファイルを手作業でメンテナンスするのはきわめて面倒です。YAMLでは、スペースを使ったインデントという方法で、この問題が非常にすっきりと解決されています。そのうえ、最下位ノードなどの適切な場所で、JSON方式の記述にも切り替え可能です。
JavaでYAMLを扱うためのライブラリと開発ツール
JavaでYAMLファイルを処理するためのライブラリとして最も広く利用されているのはJvYAMLです。JRuby(Java VM上で動的言語として動作するRuby)では、Ruby on RailsフレームワークにJvYAMLを使用しています。JvYAMLには、ファイルに対して汎用的な処理を実行するための機能があります(その場合、Javaの標準のString、Long、Map、Listの各オブジェクトのネストで階層構造が返ります)。ファイルの保存には静的メソッドdump()
を使用し、読み込みには静的メソッドload()
を使用します。たとえば次のような形です。
YAML.dump(Object data, Writer output); Object data = YAML.load(Reader io);
Javaで宣言的にUIを構築するためのYAMLベースのオープンソースプロジェクトもあります。これについては補足説明「YAMLベースのオープンソースプロジェクト」を参照してください。
一般に、YAMLファイルはきわめてシンプルで、普通のテキストエディタで簡単にメンテナンスできます。しかし、構文の強調表示などの便利な機能を備えた、YAML専用のテキストエディタもいくつかあります。たとえばEclipseにはEclipse YAML Editorがありますし、NetBeansではRubyパックにYAMLエディタが同梱されています。ただし、NetBeans 6.1のYAMLエディタは、YAMLの機能の一部しかサポートされておらず、あまり便利ではありません(たとえばブロックリテラルがサポートされていません)。この点は、NetBeans 6.5の新しいYAMLエディタで修正されているはずです。
IntelliJ IDEAはテストする機会がありませんでしたが、そのRuby on RailsプラグインにはYAMLエディタが入っているものと思います。
自分自身のオープンソースプロジェクトを取り上げるのはおこがましいのですが、この場を借りて、私が手がけるYAMLベースのJavaプロジェクトを紹介させてください(私の知る限り、XMLやJSONではなくYAMLをメインに据えたJavaプロジェクトは、JRubyのRuby on Railsの実装以外にないからです)。私のJava Buildersライブラリでは、JavaでYAMLファイルを使って宣言的なUIを構築できます。画面コントロール、レイアウト、イベントの関連付け、データバインディングなどをYAMLファイルで定義するというやり方で、記述すべきJavaコードの量をかなり減らすことができます。
YAMLをぜひお試しあれ
XML形式はかなり冗長で、手に余ることがよくあります。あなたが次に手がけるJavaプロジェクトでは、XMLの代わりにYAMLを利用してみると、都合がいいかもしれません。YAMLについてもっと詳しく知るには、WikipediaのYAMLの項を参照するか(データの統合やキャストなど、高度な話題の概要が的確に説明されています)、YAML公式サイトを参照してください。