LoginSignup
8
3

More than 3 years have passed since last update.

YAMLエンジニアになれる(かもしれない)Tips集

Last updated at Posted at 2019-12-25

みなさん、YAMLつかってますか?

私は業務でよく使っています。
Webアプリケーションフレームワークの設定ファイル、CI/CDの設定ファイル、インフラ管理、コンテナオーケストレーション周りなどいろいろなところで出てきます。
私の所属するチームでは自動テストをYAMLで実装できるツールを開発し、OSSで公開しました。
どちらかというとYAML好きです。

この記事ではYAMLの基本・小技・ツールの3つのくくりで知見をまとめていきます。

基本

配列

- Ryu
- Ken
- Honda

YAMLは行数が長くなる傾向があるので、少ない配列であれば1行で書くのも結構使えます

1行でもかける
[Ryu, Ken, Honda]

連想配列

Ryu: Punch
Ken: Kick
Honda: Dutsuki
1行でもかける
{ Ryu: Punch, Ken: Kick, Honda: Dutsuki }

配列と連想配列のいろいろ

Japan:
    - Ryu
    - Honda
USA:
    - Ken

{
  "Japan": [
    "Ryu", 
    "Honda"
  ], 
  "USA": [
    "Ken"
  ]
}
-
  name: Ryu
  gender:   male
-
  name: Ken
  gender:   male

[
  {
    "gender": "male", 
    "name": "Ryu"
  }, 
  {
    "gender": "male", 
    "name": "Ken"
  }
]
- [Ryu, male, Punch]
- [Ryu, male, Kick]

[
  [
    "Ryu", 
    "male", 
    "Punch"
  ], 
  [
    "Ryu", 
    "male", 
    "Kick"
  ]
]
Ryu: {gender: male, skill: Punch}
Ken: {
    gender: male,
    skill: Kick
  }

{
  "Ken": {
    "gender": "male", 
    "skill": "Kick"
  }, 
  "Ryu": {
    "gender": "male", 
    "skill": "Punch"
  }
}

スカラーコンテンツ

|>を使って長文を扱う記法です。インデントや改行が扱いやすくなります。
サンプル見てみましょう。

--- |

改行ごとに改行文字が挿入されます。

--- |
  I can fly.
  yes, you can fly

  Do you like snow?

"I can fly.\nyes, you can fly\n\nDo you like snow?"

--- >

空行が改行文字になります

--- >
  I can fly.
  yes, you can fly

  Do you like snow?

"I can fly. yes, you can fly\nDo you like snow?"

連想配列と組み合わせる

Ryu: |
  He is so cool.
  His punch is very strong.

  Hello.
Ken: >
  He is a nice guy.
  His kick is very dangerous.

  Goodbye

{
  "Ryu": "He is so cool.\nHis punch is very strong.\n\nHello.\n",
  "Ken": "He is a nice guy. His kick is very dangerous.\nGoodbye"
}

小技

アンカーとエイリアス

あるYAMLの記述をそのまま再利用したいときに使います。
&で印をつけて*で使います

command: &command_hissatsu
  - Down
  - Right
  - Punch
command 2nd: *command_hissatsu

{

  "command": [
    "Down", 
    "Right", 
    "Punch"
  ],
  "command 2nd": [
    "Down", 
    "Right", 
    "Punch"
  ]
}

継承(っぽいこと)

再利用して一部だけ異なる内容にしたい
そんなときに使えます

command: &command_hissatsu
  Down: 4
  Right: 2
  Punch: 1
command 2nd:
  <<: *command_hissatsu
  Punch: 100

{
  "command": {
    "Down": 4, 
    "Right": 2, 
    "Punch": 1
  },
  "command 2nd": {
    "Down": 4, 
    "Right": 2, 
    "Punch": 100
  }
}

型 (Tags)

YAMLはロードするときにいい感じに型を決めてくれます。

Rubyで型をみてみる
require 'yaml'

# trueを渡すとBoolのTrueになる
data = YAML.safe_load('flg: true')
=> {"flg"=>true}
data["flg"].class
=> TrueClass

# nullを渡すとnilになる
data = YAML.safe_load('flg: null')
=> {"flg"=>nil}
data["flg"].class
=> NilClass

# "でくくるとStringになる
data = YAML.safe_load('flg: "true"')
=> {"flg"=>"true"}
data["flg"].class
=> String
flg: true

# 指定しないとTrue
{
  "flg": true
}

# "でくくる
flg: "true"

{
  "flg": "true"
}

# !!型 値 のように指定する
flg: !!str true

{
  "flg": "true"
}

ツール

YAMLの記法を確かめるウェブアプリ

すごい使えます。
https://yaml-online-parser.appspot.com/

Visual Studio Code

私はよくVSCodeを使います。デフォルト機能の折りたたみが結構使えます。
image.png
image.png

また、以下のプラグインも使っています。
文法チェックが走るのでとてもはかどります。
ただし長いファイルのときは重くなるときがあるので注意が必要です。
https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml
image.png

参考

最後に参考ページです。みなさんもこんな使い方あるよーみたいなものがあれば教えてください。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3