slontが2016年1月22日に投稿(2016年12月27日更新)

みなさん、YAMLはご存知ですか?Ansibleを導入することになって使っている方も多いかと思います。かくいう私も職場でYAMLに触れる機会があったので、備忘録も兼ねてYAMLの書き方や便利な記法などを紹介したいと思います。


何が良いのか

  • 可読性が高い(特にプログラマには)
  • 複雑なデータ構造が記述できる
  • Ruby, Pythonなんかと相性が良い
  • ぶっちゃけXMLがオワコン


1. 基本系

YAMLは複雑なデータ構造を簡潔に書くことができるので非常に便利です。基本形として『配列』『ハッシュ』があり、これらを組み合わせることでデータを表現します。早速見ていきましょう。



配列

基本形の1つ『配列』です。以下のように-(ハイフン)と半角スペースで表します。

- AAA
- BBB
- CCC

これは

['AAA', 'BBB', 'CCC']

と同義です。もちろんネスト(入れ子)表現もできるので

- AAA
- - aaa
  - bbb
- BBB

という表現は

['AAA', ['aaa', 'bbb'], 'BBB']

になります。


ハッシュ

いわゆる連想配列ですね。:(コロン)と半角スペースを用いて、以下のように記述します。

AAA: aaa  

これは

{'AAA': 'aaa'}

こうですね。もちろんネストも可能で、半角スペース2つを頭に付けて書きます。

AAA:  
  BBB: bbb
CCC: ccc  

{'AAA': {'BBB': 'bbb'}, 'CCC': 'ccc'}

と同義です。


2. ブロックスタイル、フロースタイル

上記までの例は、ブロックスタイルという記法で紹介しました。しかしこれでは、多数の要素を表現したい場合に無駄に改行が必要になります。そこで用いるのがフロースタイルです。実は、リストとハッシュのワンライナーの書き方をそのまま使えるんです。

taro:  
- bag: {note: [Japanese, English]}
- game
hanako:  
  bag: {note: 4, pencil: 5} 

このように、要所で組み合わせることで、見やすくなりますね。


3. アンカー、エイリアス

ここでYAMLの便利機能の1つ、アンカー&とエイリアス*を紹介しましょう。これは既に定義してあるデータをそのままコピーするような用途で使用します。

# パソコンの種類
PC:  
- &w10m4
  OS: Windows10
  Memory: 4GB
- &w10m8
  OS: Windows10
  Memory: 8GB
- &mXm8
  OS: OS_X
  Memory: 8GB

# ユーザー
Taro:  
  PC: *w10m8
Hanako:  
  PC: *mXm8

これをユーザーTaroで取得すると以下のようになります。

{'Taro': {'PC': {'Memory': '8GB', 'OS': 'Windows10'}}}

共通設定なんかを記述するときに重宝しますね。この時点でXMLの選択肢がなくなりました笑 ちなみにもちろんハッシュでもアンカーを設定することができますし、フロースタイルで書くこともできます。

MyPC: &MyPC {OS: Windows10, Memory: 4GB}  
Jiro: {PC: *MyPC}  

結果

{
  'MyPC': {'Memory': '4GB', 'OS': 'Windows10'}
  'Jiro': {'PC': {'Memory': '4GB', 'OS': 'Windows10'}}
}


4. マージ

さらに、エイリアスを指定するだけでなく、上書きしたりマージしたい時がありますね。そんなときはこのマージ<<:機能を使います。

PC:  
- &mXm8
  OS: OS_X
  Memory: 8GB

Taro:  
  PC:
    Display: Retina
    <<: *mXm8
    Memory: 16GB

結果

{'Taro': {'PC': {'Display': 'Retina', 'Memory': '16GB', 'OS': 'OS_X'}}}

Displayが追加され、Memoryが上書きされていることがわかりますね。これは非常に便利な機能なので、是非活用しましょう。

↑気に入ったらシェアしてね↑
プロフィール
slont

slont

元金融エンジニア。メイン言語はJava, HTML, JavaScript, Python, Kotlinあたり。SECCONやCTF、NLP、機械学習に興味あり。金融日記購読4年。巷で話題の変態紳士。美女ソムリエ始めてました。 お仕事の依頼はTwitterからお願いします。

comments powered by Disqus
Back to top