As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

YAMLってなんだ

こんにちは。
最近DevOpsとかImutable infrastructureとかいう言葉を知って、
インフラ初心者を抜け出して応用的な事に挑戦しようとしています。
ってことで本日は
Imutable infrastructue → ansible → YAMLの流れで辿り着いてYAMLについて勉強したので、それのメモ的なやつだと思ってください!

YAMLとは?

https://ja.wikipedia.org/wiki/YAML

構造化データやオブジェクトを文字列にシリアライズ(直列化)するためのデータ形

シンプルな説明ですね。ポイントは"文字列にシリアライズする"です。
シリアライズ

ある環境において存在しているオブジェクトを、バイト列やXMLフォーマットに変換することをいう

オブジェクトなどを文字列にフォーマットにするためのデータ形。
見たほうが早い
www.task-notes.com
こちらのサイトを参考にさせていただきました。

YAMLはシーケンスとマッピングというものでデータを表現します。
・シーケンス

- a
- b

マッピング

key1: value1
key2: value2

シーケンスが配列。マッピングがハッシュ(key:value)と覚えておいたら恐らくことたりるでしょう。
ですが、そもそも私はシーケンスが配列のデータ型を表していてマッピングがハッシュのデータ型を表しているってのがイマイチよくわかりませんでした。

だって、プログラミングする時配列作ると「配列名」がありますもんね。
arrya[3]のarrayの部分
シーケンスが配列っていわれると「ふむふむじゃあ配列自体を表すのはどこの部分だ?」ってなりました。
そんなものはないんです。無名配列みたいなものです!

- a
- b

これでいうと

[a,b]

ってだけなんです

これはデータ形です!

key1: value1
key2: value2

これも同じく

{key1:value1,key2:value2}

てだけです。
この認識で入れ子の構造も理解できました。
ハッシュの中に配列を入れる例でいうと

names:
  - Smith
  - Shelton
  - Kelly
age:
  - 18
  - 19
  - 20

{names:[Smith,Shelton,Kelly],age:[18,19,20]}

ってことです。
なんとなくわかってきましたかね。
これを理解するために
とりあえず適当にYAMLを書いてみてJSONに変換するってのをしていました。これによって自分の認識が正しいのか、シンタックスは正しいのかを判断できると思います。
利用したサイト
phiary.me
例えば

- house:
  - table:
    - dining
    - desk
  - chair
  - tv
- human:
  - father
  - mother
  - brother
  - me
- pet

みたいなYAMLを用意しておいて
これを同じように表現します

[{house:[{table:[dining,desk]},chair,tv],human:[father,mother,brother,me]},pet]

と自分の中で予想を立てておく
そして先ほどのサイトにYAMLを記述してJSONに変換することで正しいかを確認できる。
スペースとかタブとかを削除して完全に一致したら超きもちいいです。
ややこしくなったらやってみてください。

YAMLの詳しいことは上記の

利用したサイト

を参考にしてもらったほうがわかりやすいと思います。