【図で理解】一番分かり易いYAMLのフォーマット解説

当ページのリンクには広告が含まれています。

アプリケーションで使うデータを保存するフォーマットとして、XMLやJSONが有名ですが、最近では人間が読みやすく手書きできるという特性を持つYAMLもかなり普及してきました。

とはいうものの、Webでググって出てくる記事は、細かい説明は記載されているものの、パツとみて大枠を理解するには難しい感が有ります。

そこで本記事では、細かいことは抜きして、まず大枠を理解すると共に、これだけ知っていれば普通に使いこなせる内容を厳選して、解説しています。

目次

YAMLとは

YAML(YAML Ain't Markup LanguageまたはYAML Ain't a Markup Language)は、データの表現と交換のための人間が読み書きしやすいテキストベースのデータ形式です。

YAMLはXMLやJSONよりも後に登場した形式ではありますが、最近ではなく、2001年に最初にリリースされており、XMLとJSONに代わる人間が読みやすく、記述が簡潔なデータ形式として開発されました。

YAMLは主に設定ファイルやデータのシリアライゼーション(=ストレージへの保存)、構造化された文書の表現に使用されています。

YAMLのフォーマット

YAMLではキーと値のペアが基本的な構成要素です。キーと値はコロン(:)+半角スペースで区切ります。また、値はスカラー値(文字列、数値、真偽値)、配列、連想配列(=辞書、マップ)などが使用できます。

スカラー文字列、数値、true、false、null、.nan、.inf などの単一の値。
文字列はダブルクォートで囲んでも、囲まなくても良い。
配列先頭がハイフン(-)+半角スペースで始める。
(例) - 要素1
配列を入れ子にする場合、ハイフン(-)+半角スペースを横に並べる。
 (例) - - 要素1
連想配列(=辞書、マップ)キーと値を(:)+半角スペースで区切って記述する。
(例) key: 値
辞書を入れ子にする場合、キーの横に値は書かず、改行を行った後で
更にインデントを付ける。
 (例)key:
  key: 値

YAMLの記載順序については、仕様上特に規定されていませんので、使用する言語やライブラリによって、記載順に取り出せるか否かが変わってきます

例えば、YAMLの記載順に画面項目を自動生成するような場合、必ずしも記述順にならない可能性があります。

書き方のサンプル

YAMLのルールに則った具体例を示しておきます。

スカラー

スカラー型はキーに対して1つの値を持つもので、単純な連想配列として取得できます。コロン(:)の後に半角スペースを入れる必要があります。

文字列についてはダブルクォートで括る必要はありませんが、括っても構いません。

配列

連想配列のキーに対して、値を配列として持たせるものです。ハイフンと値の間には半角スペースを入れる必要があります。

配列を入れ子にすることも可能です。

配列は定義した順番に取り出すことが可能なので、定義順を保証したい場合は配列で定義しましょう。

連想配列(=辞書、マップ)

連想配列のキーに対して、値に連想配列を持たせたものです。

連想配列を入れ子にする場合は次のように記述します。

使用できない文字

YAMLに記述する文字の中には、次の様に使えない文字があります。

使えない文字説明
\エスケープシーケンスの開始
:キーと値の区切り
,配列要素の区切り
-ハッシュ要素の区切り
...データの終了
#コメント
改行改行を保持しない
&配列要素の参照
*ハッシュ要素の参照
!特殊な意味を持つ文字

また、記述する位置によってエラーにならず使える場合もあります。使用するライブラリによりますが、例えば *は1行目がエラーになりますが、2行目は正しく読み込めることもあります。

コメント

#を付けるとコメントとして扱われます。ただし、プログラムでYAMLを読み書きする場合、読み込みは問題ありませんが、プログラムに保存している情報をYAMLに書き込む場合、ライブラリの多くはコメントの出力に対応していません

従って、プログラムで編集した内容を元のYAMLに保存する場合、コメント行が削除されてしまう可能性があるのでご注意ください。

まとめ

今回はYAMLの書き方について解説しました。C#やPythonなどの言語によっては、多少ルールに従わなくても問題なく読み込めるかもしれません。

例えば、キーと値の間はコロンと半角スペースで区切りますが、Pythonの場合はコロンだけでも問題なく読めてしまいます。

異なる言語(もしくは使用するライブラリ)で作ったプログラム間で、 YAMLを介してデータの受け渡しを行う場合、Pythonは問題なく通るのにC#側でエラーになるなど、予期せぬ事態が発生する可能性があります。ちょっとした記述ミスでエラーになりますので、その点はご注意ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次