YAMLとは?
Ruby on Rails をはじめとして、各種フレームワークやツールで
設定ファイルを書くときやデータの保存をするときによく使われたりします。
また、サーバーの構成管理ツールのAnsibleでもYAMLが用いられています。
ちなみに YAML は YAML Ain\'t Markup Language の略です。知っておくといいかもしれません。
公式サイトはこちらhttp://yaml.org
配列やハッシュ、スカラーをわかりやすく記述することができます。
基本的な書き方:配列(シーケンス)
YAMLでは配列データのことをシーケンスといいます。
YAMLでは行頭に「-」をつけることで配列を表現します。
「-」のあとの空白は必須です。忘れないようにしましょう。
コメントは行頭に「#」をつけます。
# sample.yml
- d1
- d2
- d3
#- d4
#- d5
また、YAMLファイルを読み込んで表示するRubyスクリプトは次のようになります。
# parse.rb
require 'yaml'
d = YAML.load_file('sample.yml')
p d
実行結果は下記のようになります。
YAMLのデータが配列になっています。
% ruby parse.rb
["d1", "d2", "d3"]
配列を入れ子にする
半角スペース2文字でインデントすると、配列を入れ子にすることができます。
また、字下げにTABは使用できませんので気をつけてください。
# sample.yml
- d1
-
- x1
- x2
- d2
-
- y1
- y2
- d3
実行結果
% ruby parse.rb
["d1", ["x1", "x2"], "d2", ["y1", "y2"], "d3"]
配列を入れ子にする場合の注意事項
なお箇条書きのように書くことはできません。
すべて文字列として解釈されてしまいます。
# sample.yml
- d1
- x1
- x2
- d2
実行結果
% ruby parse.rb
["d1 - x1 - x2", "d2"]
基本的な書き方:ハッシュ(マッピング)
YAMLではハッシュデータのことをマッピングといいます。
YAMLでは行頭に「:」をつけることで配列を表現します。
「:」のあとの空白は必須です。忘れないようにしましょう。
# sample.yml
name : bacchi
email: bacchi@test.com
実行結果
% ruby parse.rb
¥{"name"=>"bacchi", "email"=>"bacchi@test.com"}
ハッシュを入れ子にする
シーケンスと同様に、半角スペース2文字でインデントすると、
配列を入れ子にすることができます。
また、字下げにTABは使用できませんので気をつけてください。
# sample.yml
name: bacchi
emails:
main: bacchi@test.com
sub: bacchi+sub@test.com
実行結果
% ruby parse.rb
{"name"=>"bacchi", "emails"=>{"main"=>"bacchi@test.com", "sub"=>"bacchi2@test.com"}}
複雑なデータの表現
基本的な書き方についてはもうおわかりいただけたと思いますので、
少し複雑なデータの表現方法を見ていきます。
ハッシュ自体を配列にする
例えばハッシュ自体を配列にしたい場合には、次のように書いていけばOKです。
字下げにはタブを使わないとか、「:」のあとには必ず空白を置くとか、
そういったルールを守って書くようにしましょう。
# sample.yml
- name: bacchi
email: bacchi@test.com
- name: bacchi2
email: bacchi+sub@test.com
実行結果
% ruby parse.rb
[{"name"=>"bacchi", "email"=>"bacchi@test.com"}, {"name"=>"bacchi2", "email"=>"bacchi+sub@test.com"}]
ハッシュの中に配列を入れる
ハッシュの中に配列を入れることもできます。
names というキーに対して値は配列にしたいという場合には
「names:(改行) - bacchi(改行) - bacchi2」
と書けば OK ですね。
# sample.yml
names:
- bacchi
- bacchi2
emails:
- bacchi@test.com
- bacchi2@test.com
実行結果
% ruby parse.rb
{"names"=>["bacchi", "bacchi2"], "emails"=>["bacchi@test.com", "bacchi2@test.com"]}
次回はYAMLが扱えるデータや今日取り上げた以外の記法についてまとめます。
続きを書きました!
YAMLのブロックスタイルや色々なデータ型の記述方法などをまとめています。
https://bacchi.me/yaml/firststep-2/