気まぐれメモランダム / でたらめフィードバック

あまり知られていない様子のYAMLのあれとかこれとか

公開:

各種設定ファイルのフォーマットとしていまやすっかり定着した感のあるYAMLですが、単なるフォーマットの一種としてしか思われていない節もあり比較的初期から注目していた人間としては残念なかぎり。そこで知っていると役にたつかもしれないトピックをいくつかあげてみます。

YAML⊇JSON

Webでは「JSONではなくYAML」みたいな表現をよく見かけますが、実はJSONはYAMLです(JSON is YAML)……という表現は使われなくなりましたが、YAMLはJSONの自然なスーパーセットで、すべてのJSONファイルは有効なYAMLファイルでもあります。「どこが?」と思われるかもしれませんが、YAMLは書式としてブロックスタイルとフロースタイルという二つのスタイルを仕様で定めていて、フロースタイルだとJSON相当の記述となるのです。ブロックスタイルのほうが可読性が高いので自然とそちらが多用され、フロースタイルのYAMLは見かける機会がないわけですね。「YAMLのフロースタイルではなくブロックスタイル」と表現すると通に見られる、かもしれません(通に見られたからなんだ、というのはなしで)。

改行を含むテキストの記述

JSONでのテキスト・文字列の取りありつかいはJavaScriptのそれと大差ないので改行はエスケープシーケンスでの表現になり可読性はよくありません。一方YAMLのブロックスタイルは改行を含むテキストを比較的元データに近いかたちで記述できます。「比較的元データに近いかたちで」というのはYAMLの仕様上インデントをそろえなければならずかならずしも見たままとはならないためです。それでもJSONよりは確実に読みやすいです。
仕様上は文中の改行と最終行の改行の仕様が別に定義されています。

過剰な気もしますが、データ交換にも用いられることを考えると厳密な定義は必要なのでやむをえないところでしょう。

アンカーとエイリアス

JSONになくてYAMLにある強力な機能がアンカーとエイリアス。アンカーを設定した要素はエイリアスで参照できるので、活用すれば何度も登場する要素の記述を簡潔にできます。使いすぎるとせっかくの可読性が低下する可能性がありますが、設定系のファイルなど同じ値が正確に必要とされるケースでは積極的に使いたい機能でもあります。

以上、YAMLのあれとかこれとかでした。お役にたちましたら幸いです。

関連コンテンツ

Pick up work

最近のエントリ

アーカイブ

ブログ情報