YAML ってなに?

YAML は YAML Ain’t Markup Language の略。(じゃぁ、その YAML はなんなんだよっていうメタ的なネーミング 🤔) ファイルの拡張子には.yml や.yaml が使われる。

YAML ファイルの用途

  • Docker
  • Kubernetes
  • Prometheus
  • Shopify theme
  • Github workflow などの設定ファイルに使われるフォーマット形式。独自の表記法をつかう。 YAML は Data serialization language の一種で XML や JSON などと同じ。

    Data Serialization language とはデータの転送などのために使われる標準化された言語

なぜ YAML が使われるか

読みやすいから

YAML と他の XML と JSON の比較 YAML - 人間の目ですごく読みやすい! ただしスペースや改行などに注意。

person:
  - name: 屋守太郎
    age: 29
    gender: 男
    birthday: 1994-3-24

XML は読みにくいし複雑 括弧がおおくなる

<person>
    <name>屋守太郎</name>
    <age>29</age>
  <gender>男</gender>
  <birthday>1994-3-24</birthday>
</person>

JSON は { } でくくる、大きくなってくると括弧がどこで閉じてるのかわからなくなってくる。

{
  "person": [
    {
      "name": "屋守太郎",
      "age": 29,
      "gender": "男",
      "birthday": "1994-3-24"
    }
  ]
}

YAML は JSON の Superset なので 、YAML が読み込めるなら JSON ファイルも読み込みも可能。置き換えのツールなどのもある(後述)

YAML のよみやすい特徴

JSON や XML は括弧で区切るが、YAML は Python と同じようにラインとインデントで文法が構成。 ネスト入れ子構造で見た目が複雑になりにくい。

YAML の文法ー基礎編

① Key-value pair で書く

キーとバリュー(値)がペアになっていること。これは JSON なんかと同じ キー : バリュー Key : Value

key: value
key: 'value'
key: "value"

Value は ' 'シングルクォーテーション や""ダブルクォーテーションでくくってもよい。 スペシャルキャラクターなどを入れる場合は くくる。

② Comment の書き方

コメントには # を使う

# コメントの書き方はシャープを使う
key: value

③ Object にする書き方

オブジェストにはインデントを使う。スペースの位置に注意。

object:
    key1: value
    key2: value
    key3: value

JSON だとこんな感じね。

{
  "object": {
    "key1": "value",
    "key2": "value",
    "key3": "value"
  }
}

④ List の書き方 Array

-ダッシュを使う。 最初の一行にダッシュをつけて他はインデントを揃える。

- value
- value
- value

JSON だとこう

["value", "value", "value"]

⑤ Boolean の書き方

YAML では true false以外にもyes no が使える。また on off も使える

# true or false での boolean
key1: true
key2: false
# yes or no での boolean
key3: yes
key4: no
# on or off での boolean
key5: on
key6: off

List の応用編

複数のリスト

# 複数のリスト
object1:
    - key1: value
      key2: value
    - key3: value
      key4: value

ちなみに JSON だとこうなる

{
  "object1": [
    {
      "key1": "value",
      "key2": "value"
    },
    {
      "key3": "value",
      "key4": "value"
    }
  ]
}

もうちょっと複雑なの

family:
  - person1:
      name: 屋守太郎
  - person2:
      name: 屋守花子

JSON だとこう

{
  "family": [
    {
      "person1": {
        "name": "屋守太郎"
      }
    },
    {
      "person2": {
        "name": "屋守花子"
      }
    }
  ]
}

直で Value を書くこともできる。

# 直で書く
array:
    - value1
    - value2

JSON だとこうなる

{
  "array": ["value", "value"]
}

リストの中のリスト

リストの中にリストを作る場合はこんな感じ。インデントに注意!!

# リストの中のリスト
object:
  - key1: value
    key2:
      - value1
      - value2

JSON だとこうなる

{
  "object": [
    {
      "key1": "value",
      "key2": ["value1", "value2"]
    }
  ]
}

リストがよみにくい場合は従来の Array のように[]括弧をつかうのもアリ。 Value が数字だけとか小さい場合はこっちのほうが読みやすい!

object:
  - key1: value
    key2: [value1, value2, value3]

YAML の文法ツール

YAML チェッカーを使おう

Yaml Validator : YAML の文法があっているかチェックしてくれる。

YAML Checker : こっちもチェックしてくれるのと、何がおかしいのか説明してくれるのでおすすめ。

JSON には慣れてる人にはこんなのもある。

ONLINEYAMLTOOLS : YAML を JSON に変更してくれる。

YAML の文法ー応用編

Multi Line Strings (複数行)

multilineStrings1: |
    一つのストリングを改行する
    にはパイプシンボルを使います。

JSON だと \nのエスケープを使う感じ

{
  "multilineString": "一つのストリングを改行するには\nにはパイプシンボルを使います。\n"
}

Environment Variable

よく Environment Variable に YAML は使われる。 Environment Variable のパスワードなどの Variable には$マークをつかう。 全部大文字で使われるのが一般的のよう。

loginID: Test123
password: $THIS_IS_PASSWORD
APIKEY: $THIS_IS_API_KEY

Place Holder プレースホルダー

YAML の中でプレースホルダーを使う場合{{ }}を使う。

object:
  key: { { .Value.name } }

一つの YAML ファイルに複数のコンポーネントを入れる。

一つの YAML ファイルの中に複数のコンポーネントをいれたい場合は - - - ダッシュ 3 つでつなげたのをいれる。

key1: value
key2: value
object:
  key3: value
---
key1: value
key2: value
object:
  key3: value
  key4: value