この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
概要
YAML とは、構造化されたデータを表現するためのフォーマットです。 目的は XML と似ていますが、XML と比べて「読みやすい」「書きやすい」「わかりやすい」という利点があります。
文法の基本
基本的な文法規則は次のとおりです。
- 大文字と小文字を区別
- インデントを使用して階層関係を示します
- インデント時にタブキーを使用することはできません。スペースのみを使用できます。
- 同じレベルの要素が左揃えである限り、インデントされたスペースの数は重要ではありません。
#
「#」から行末までがコメントになります。範囲コメントはありません
サポートするデータ構造
YAMLでサポートされているデータ構造は3つあります。
- オブジェクト:キーと値のペアのコレクション。マッピング/ハッシュ/辞書とも呼ばれます。
- 配列:順番に並べられた値のセット。シーケンス/リストとも呼ばれます。
- スカラー:単一の分割できない値
データ構造について
3つのデータ構造を以下に紹介します。
1、オブジェクト(ハッシュ)
オブジェクトは「キー: 値」の形式で表します。コロン「:」のあとに半角スペースを 1 つ以上入れてください (タブ文字は使えません)。
A: aaa
B: bbb
C: ccc
JavaScriptに変換すると以下の通りです
{ A: 'aaa', B: 'bbb', C: 'ccc' }
半角スペースでインデントすることで、ハッシュをネストさせることができます。
A: aaa
B:
B1: bbb1
B2: bbb2
C: ccc
JavaScriptに変換すると以下の通りです。
{A: "aaa", B: {B1: 'bbb1', B2: 'bbb2'}, C: 'ccc'}
2、配列
YAML では、行頭に「-」をつけることで配列を表現します。「-」のあとには半角スペースを入れてください。
- aaa
- bbb
- ccc
JavaScriptに変換すると以下の通りです。
[ 'aaa', 'bbb', 'ccc' ]
半角スペースでインデントすると、配列をネストさせることができます。タブ文字は使えませんので注意してください。
- aaa
-
- b1
- b2
-
- b3.1
- b3.2
- ccc
JavaScriptに変換すると以下の通りです。
['aaa', ['b1', 'b2', ['b3.1', 'b3.2']], 'ccc']
配列はインライン表記を使用することもできます。
aaa: [a1, a2]
JavaScriptに変換すると以下の通りです。
{ aaa: [ 'a1', 'a2' ] }
3、スカラーとデータ型
配列やオブジェクトのような、他のデータを要素として持つデータはコレクション といいますが。それ以外のデータ (数値や文字列など) は「スカラー」といいます。スカラーは最も単純かつ基本的な型である。
YAML では、以下のデータ型を自動的に判別します。
- 字符串
- ブール値(true, yes, false, no)
- 整数
- 浮動小数点
- Null値 (null, ~)
- 時間(yyyy-mm-dd hh:mm:ss [+-]hh:mm)
- 日付 (yyyy-mm-dd)
また引用符「’」や二重引用符「”」で囲むと、強制的に文字列として認識されます。
数値は、リテラルの形式です。
number: 12.30
JavaScriptに変換すると以下の通りです。
{ number: 12.30 }
ブール値の表現形式。
isSet: true
JavaScriptに変換すると以下の通りです。
{ isSet: true }
null
の表現形式
parent: ~
JavaScriptに変換すると以下の通りです。
{ parent: null }
時間はiso8601の表現形式:
iso8601: 2001-12-14t21:59:43.10-05:00
JavaScriptに変換すると以下の通りです。
{ iso8601: new Date('2001-12-14t21:59:43.10-05:00') }
日付の表現形式:
date: 1976-07-31
JavaScriptに変換すると以下の通りです。
{ date: new Date('1976-07-31') }
YAMLでは、2つの感嘆符を使用してデータ型を強制変換できます。
e: !!str 123
f: !!str true
JavaScriptに変換すると以下の通りです。
{ e: '123', f: 'true' }
3-1、最も使われる文字列の表現形式について
デフォルトでは、文字列は引用符で囲まれません。
aa: hogehoge
JavaScriptに変換すると以下の通りです。
{ aa: 'hogehoge' }
文字列にスペースとか特殊な文字が含まれている場合は、引用符で囲む必要があります。
str: 'title: hogehoge'
JavaScriptに変換すると以下の通りです。
{ str: 'title: hogehoge' }
引用符と二重引用符の両方を使用でき、二重引用符は特殊な文字をエスケープしません。
s1: 'title\nhogehoge'
s2: "title\nhogehoge"
JavaScriptに変換すると以下の通りです。
{ s1: 'title\\nhogehoge', s2: 'title\nhogehoge' }
単一引用符に単一引用符がある場合は、2つの単一引用符で連続してエスケープする必要があります。
str: 'labor''s day'
JavaScriptに変換すると以下の通りです。
{ str: 'labor\'s day' }
文字列は、2行目から始めて、複数行で書き込むことができます。スペースのインデントは1つである必要があります。改行文字はスペースに変換されます。
str: aaa
bbb
ccc
JavaScriptに変換すると以下の通りです。
{ str: 'aaa bbb ccc' }
複数行の文字列では、”|”を使用して、各行の改行を保存する。”>”を使用して、改行を半角スペースに置き換える、ただし最終行の改行は保存される。
this: |
Foo
Bar
that: >
Foo
Bar
JavaScriptに変換すると以下の通りです。
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
+
:各行の改行と、最終行に続く改行を保存する。
-
:各行の改行は保存するが、最終行の改行は取り除く。
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
JavaScriptに変換すると以下の通りです。
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }