YAMLについての基本知識


YAMLとは

YAMLは構造化データを人間の目にわかりやすいように表現できるように設計された言語です。
YAMLは「YAML Ain’t Markup Language」(YAMLはマークアップ言語ではない)の頭文字を取っています。名前の定義の中に名前が入っている珍しいネーミングですね。カッコよくいうと再帰的に定義された頭文字です。
XMLなどのマークアップ言語と同じく構造化データを表現する言語の一つですが、YAMLは自身の名前でマークアップ言語ではないよ!と言っているように、マークアップ言語の課題であった、読みにくさを払拭してくれます。
拡張子は.ymlまたは.yamlを使います。

YAMLの文法

それではさっそくYAMLの基本的な文法を紹介していきたいと思います。

YAMLを理解する上でまずはじめに押さえておきたい点として、YAMLはスカラー、シーケンス、マッピングといったデータ形式をインデントで表現するのを基本としている点です。

こちらのサイトでYAMLをJSONなどに変換できるので色々遊びながらやっていくといいと思います。


https://codebeautify.org/yaml-to-json-xml-csv

スカラー
YAMLでは、数字や文字列、真偽値など基本的な値を表現できます。


post-counts: 3
author: "tanaka"
rating: 3.2
active: true

文字列をダブルクオートで囲みましたが、


author: tanaka

のように省略してもOKです。

シーケンス(配列・リスト)
YAMLでは要素の集合をシーケンスで表現できます。


languages:
  - Ruby
  - JavaScript
  - PHP
  - SQL

要素はインデント、ダッシュ(-)、スペースの後に続けて書きます。

マッピング(ハッシュ、辞書)
YAMLではkey:value型のコレクションをマッピングとして表現できます。


person:
  name: tanaka
  age: 38
  height: 172
  weight: 70

コロン(:)のあとのスペースは必須です!

コメント
 #から始める文章はコメントとして扱われ無視されます。


# 田中さんに関する情報
name: tanaka

シーケンス、マッピングのネスト
シーケンスの中にマッピングをネストしたり、マッピングの中にシーケンスをネストしたりすることができます。


people:
 - name: tanaka
   age: 38
 - name: suzuki
   age: 26
 - name : sato
   age: 58

JSON形式に変換すると以下のようになります。


{
    "people": [
        {
            "name": "tanaka",
            "age": 38
        },
        {
            "name": "suzuki",
            "age": 26
        },
        {
            "name": "sato",
            "age": 58
        }
    ]
}

インライン記法
マッピングやシーケンスをJSONのような形式でインラインに記述することができます。


languages: [Ruby, PHP, JavaScript]
student: {name: tanaka, age: 14}

それぞれJSONに変換すると以下のようになります。

{
    "languages": [
        "Ruby",
        "PHP",
        "JavaScript"
    ]
}
{
    "student": {
        "name": "tanaka",
        "age": 14
    }
}

マルチドキュメント
YAMLでは一つのファイルに複数のドキュメントを区切って表現することができます。区切り文字として3つのダッシュ(—)を使います。


people:
 - name: tanaka
   age: 38
 - name: suzuki
   age: 26
 - name : sato
   age: 58

---
languages:
  - Ruby
  - JavaScript
  - PHP
  - SQL

特殊文字の扱い
YAMLでは、  [] {} : > |. などを文字列としてそのまま使うとエラーになります。これらの文字を使いたいときはクオートで囲みましょう。

greeting: "hello>world."

改行を含む文字列
改行を含む文字列を扱いたいときは | を使います。

introduction: |
  YAML
  xml
  JSON

JSONに変換すると以下のようになっています。

{
    "introduction": "YAML\nxml\nJSON\n"
}

Resource