概要

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' }
Last modified: 2021-04-28

Author