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