YAMLってなんだ
こんにちは。
最近DevOpsとかImutable infrastructureとかいう言葉を知って、
インフラ初心者を抜け出して応用的な事に挑戦しようとしています。
ってことで本日は
Imutable infrastructue → ansible → YAMLの流れで辿り着いてYAMLについて勉強したので、それのメモ的なやつだと思ってください!
YAMLとは?
https://ja.wikipedia.org/wiki/YAML
構造化データやオブジェクトを文字列にシリアライズ(直列化)するためのデータ形
シンプルな説明ですね。ポイントは"文字列にシリアライズする"です。
シリアライズは
オブジェクトなどを文字列にフォーマットにするためのデータ形。
見たほうが早い
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の詳しいことは上記の
利用したサイト
を参考にしてもらったほうがわかりやすいと思います。