■ はじめに
今更ながらだが、AWSやAnsibleなどなど色々と必要になりそうなので YAMLについて、調べてみた。
目次
【1】YAML 【2】種類 1)スカラ 2)シーケンス (配列) 3)マッピング (連想配列) 【3】文法 1)コメント 2)始まり ( --- ) と終わり ( ... ) 【4】改行の扱い 1)パイプ ( | ) 2)大なり記号 (>) 3)ハイフン (-) 【5】アンカー(&) / エイリアス(*) 1)マージ(<<) 【6】その他 Tips 1)JSONからYAMLに変換
【1】YAML
* YAML : YAML Ain't a Markup Language(=YAMLはマークアップ言語じゃない) * 読み方は、「ヤムル」 * 拡張子は「***.yml」「***.yaml」
【2】種類
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)始まり ( --- ) と終わり ( ... )
* YAMLファイルの中に複数のコンポーネントをいれたい場合 - - - ダッシュ3つでつなげたのをいれる
https://engineers.ntt.com/entry/2021/09/10/100708
https://note.com/yuya_mstr/n/n2ab8fd3a30b3
例
--- # ★ key1: value11 key2: value12 object: key3: value13 ... --- # ★ key1: value21 key2: value22 object: key3: value23 key4: value24
【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】アンカー(&) / エイリアス(*)
* 同じ値が複数回登場する場合に、「アンカー(&)」と「エイリアス(*)」が有用
https://shiroyuki2020.hatenablog.com/entry/introduction_to_yaml_07
https://www.wakuwakubank.com/posts/488-it-yaml/
[a] アンカー(&)
* 変数定義 ...「&」を使う
[b] エイリアス(*)
* 変数参照 ...「*」を使う
例1:Hello world
- &leader Mike - *leader - &subleader Tom - *lsubleader - *subleader
例2:docker compose
version: '3.7' x-environment: &environment ENV: development USER: user HOST: example.com services: nginx: image: nginx:alpine ports: - 80:80 environment: *environment rails: image: ruby:alpine environment: *environment
1)マージ(<<)
* マッピングをマージしたい場合は、<< を利用
https://qiita.com/dokeita/items/85302434091d06e2007c
例1:Hello World
array1 : &array1 - a: 1 b: 2 c: 3 array2 : &array2 - d: 4 e: 5 f: 6 array : <<: *array1 <<: *array2 # 結果 # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
例2:docker compose
https://docs.docker.com/reference/compose-file/extension/#example-2
x-env: &env environment: - CONFIG_KEY - EXAMPLE_KEY services: first: <<: *env image: my-image:latest second: <<: *env image: another-image:latest
【6】その他 Tips
1)JSONからYAMLに変換
以下のサイトで変換できる
参考文献
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