【YAML】YAML (YAML Ain't Markup Language)

■ はじめに

今更ながらだが、AWSやAnsibleなどなど色々と必要になりそうなので
YAMLについて、調べてみた。

目次

【1】YAML
【2】種類
 1)スカラ
 2)シーケンス
 3)マッピング
【3】文法
 1)コメント
 2)変数(アンカー/エイリアス)
【4】改行の扱い
 1)パイプ ( | )
 2)大なり記号 (>) 
 3)ハイフン (-)
【5】その他
 1)JSONからYAMLに変換

【1】YAML

* YAML :  
* 読み方は、「ヤムル」
* 拡張子は「***.yml」「***.yaml」

【2】種類

1)スカラ ... 値
2)シーケンス ... 配列
3)マッピング ... ハッシュ(Key-Value)

1)スカラ

* データ型は以下のようなものがある

 a) 文字列 .... hello, "5", 'true'
 b) 数値 ... 5, 5.45
 c) 真偽 ... true/false, yes/no, on/off
 d) null ... null, ~(チルダ)
 e) 日付 ... 2019-12-21

2)シーケンス

* 「- 【スカラー】」を使う(「ブロックスタイル」っていうらしい)

サンプル

- List-A
- List-B
- List-C

補足

* [List-A, List-B, List-C] って書き方でも同じ(こっちは「フロースタイル」)
* 空白を入れることで、入れ子構造もかける(「タブ」じゃだめ)

サンプル:入れ子

- List-A
- 
  - List-B1
  - List-B2
- Liar-C

3)マッピング(Key-Value

* 「【キー】: 【値】」を使う

サンプル

key_A: value_A
key_B: value_B
key_C: value_C

補足

* { key_A: value_A, key_B: value_B, key_C: value_C } って書き方でも同じ
* 入れ子できま*
* 配列と組み合わせることも可能

【3】文法

1)コメント

* 「#」を使う

サンプル

# ここがコメントになる

2)変数(アンカー/エイリアス

* アンカー:変数定義
 ...「&」を使う

* エイリアス:変数参照
 ...「*」を使う

サンプル

- &leader Mike
- *leader
- &subleader Tom
- *lsubleader
- *subleader

【4】改行の扱い

* YAMLでの改行の扱いについてまとめる

https://qiita.com/jerrywdlee/items/d5d31c10617ec7342d56

1)パイプ ( | )

* 改行も含めて認識

サンプル

- |
  This is a sample.
  This is a just sample.

# 「This is a pen.\nThis is a just sample.」ってなる
#  => 改行も含めて認識される

実際の使われ方

jobs:
  testJob:
    name: Demo for UUID
    runs-on: ubuntu-latest
    steps:
      # ★注目★
      - run: |
          UUID=$(uuidgen)
          echo "Result = ${UUID}"

2)大なり記号 (>)

* 改行はスペースに置き換わる

サンプル

- >
  aws s3 cp
  src/hello_world.py
  s3://hello-world-xxx/src/hello_world.py

# 「aws s3 cp src/hello_world.py s3://hello-world-xxx/src/hello_world.py」ってなる
#  => 一行として認識される

3)ハイフン (-)

* 最後の改行がなくなる

実際の使われ方
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/deploying.applications.html

AWSTemplateFormatVersion: 2010-09-09
Description: >-
  AWS CloudFormation sample template LAMP_Single_Instance: Create a LAMP stack
  using a single EC2 instance and a local MySQL database for storage. This
  template demonstrates using the AWS CloudFormation bootstrap scripts to
  install the packages and files necessary to deploy the Apache web server, PHP,
  and MySQL at instance launch time. **WARNING** This template creates an Amazon
  EC2 instance. You will be billed for the AWS resources used if you create a
  stack from this template.

【5】その他

1)JSONからYAMLに変換

以下のサイトで変換できる

https://j2y.link

参考文献

https://qiita.com/fkana/items/21f7cc3b327445483d5c
https://magazine.rubyist.net/articles/0009/0009-YAML.html
https://www.wakuwakubank.com/posts/488-it-yaml/
動画
https://dotinstall.com/lessons/basic_yaml_v2

関連記事

TOML
https://dk521123.hatenablog.com/entry/2023/04/25/103533
Ansible ~ 基本編 ~
https://dk521123.hatenablog.com/entry/37482488
Python ~ 基本編 / YAML
https://dk521123.hatenablog.com/entry/2019/10/16/225401