【初心者】YAML入門


Dockerを触ってみたりする中で、他の方が書いたMysqlとPHPMyAdminのコンテナをたてるdocker-compose.ymlとかをなんとなく調べて解読しながら読んだ事はありますが、、
そもそもYAMLの書き方について基礎的な知識がなく、基本的には読めないし書けないので、一度ゼロから入門してみたいと思います。

YAMLとは

正式名称は「YAML Ain’t Markup Language」。マークアップ言語ではなく、
構造化されたデータを表現するためのフォーマット。
拡張子は「.yml」または「.yaml」を使用。

YAMLで扱えるデータ型3つ

スカラー

数字や文字列、真偽値などの基本的な値を表現できる。
※文字列のダブルクォートは省略も可

YAML
    counts: 3
    author: "Qiita"
    rating: 3.3
    active: true

上記のYAMLデータをJSONに変換すると、以下のようになる。

JSON
{
    "counts": 3,
    "author": "Qiita",
    "rating": 3.3,
    "active": true
}

シーケンス(Sequence)

要素の集合で、配列・リストのこと。
YAMLでは、行頭に「-」をつけることで配列を表現する。
「-」のあとに半角スペースを入れる。

YAML
    languages:
     - Ruby
     - JavaScript
     - PHP
     - SQL

上記のYAMLデータをJSONに変換すると、以下のようになる。

JSON
{
    "languages": [
        "Ruby",
        "JavaScript",
        "PHP",
        "SQL"
    ]
}

マッピング(Mapping)

YAMLではkey:value型のコレクションをマッピングとして表現できる。

YAML
    spot:
      name: "Enoshima Aquarium"
      hours: "9:00〜17:00"
      price: 2500
      kindOfFish: 810

上記のYAMLデータをJSONに変換すると、以下のようになる。

JSON
{
    "spot": {
        "name": "Enoshima Aquarium",
        "hours": "9:00〜17:00",
        "price": 2500,
        "kindOfFish": 810
    }
}

コメント

YAML
   # 生き物の情報
   name: jellyfish

シーケンスとマッピングのネスト

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

YAML
    dolphin:
     - name: hope
       age: 9
     - name: atene
       age: 16
     - name : marin
       age: 18

上記のYAMLデータをJSONに変換すると、以下のようになる。

JSON
{
    "dolphin": [
        {
            "name": "hope",
            "age": 9
        },
        {
            "name": "atene",
            "age": 16
        },
        {
            "name": "marin",
            "age": 18
        }
    ]
}

インライン記法

マッピングやシーケンスをJSONのようにインラインに記述可能

YAML
    languages: [Ruby, PHP, JavaScript]

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

マルチドキュメント
区切り文字としてアンダースコア3つ「___」を使うことで、1つのファイルに複数のドキュメントを区切って表現することが可能。

YAML
    people:
     - name: abe
       age: 65
     - name: trump
       age: 73

---

    countory:
      - Japan
      - America

特殊文字の扱い

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

YAML
    greeting: "[hello]>{world.}"

改行を含む文字列

改行を含む文字列を扱うときは「|」を使う

YAML
    introduction: |
      HIGH
      MID
      LOW 
JSON
{
    "introduction": "HIGH\nMID\nLOW\n"
}

参考資料

WINDIIテック>なんとなく使っていませんか??YAMLの基本をまとめました!