yaml入門
#01 yamlを使ってみる。
- 環境はruby(cloud9で立ち上げ)を使用。(rubyのバージョンは2.3)
- yamlはデータ構造をシンプルな表記で記述する記法
#03 スカラーを扱ってみる。
- yamlが扱える3種類のデータ構造の1つ
- スカラー:値
- 文字列
- 数値
- 真偽値
- null
- 日付
入力例
scaler.yml
- testdata
- 30
- 23.5
- true #true/false, yes/no, on/off
- null #~
- 2016-07-10
- "333" #文字列として解釈する
#04シーケンスを扱ってみる。
- シーケンス:配列
- ハイフンを付けてスカラーを記述すればOK
- インラインスタイルで書いても認識してくれる。
sequence1.yml
# ブロックスタイル
- a
- b
- c
# フロースタイル
[d,e,f]
入れ子構造
sequence2.yml
- a
- #入れ子構造にしたい時は、ここにスカラーを入れない。
- b-1
- b-2
- c
#05 マッピング:ハッシュ(key / value)
- キーと値を並べてあげればよい。
mapping1.yml
name: test
score: 80
# フロースタイルでも書ける
{name: test, score: 70}
入れ子構造
mapping2.yml
name: test
score:
game-1: 40
game-2: 60
#06 複雑なデータを扱う
配列のハッシュ
complex1.yml
names:
- test
- taro
scores:
- 60
- 90
# フロースタイルでもOK
names: [test, taro]
scores: [60, 90]
ハッシュの配列
complex2.yml
- name: test
score: 60
- name: taro
score: 90
# フロースタイル
- {name: test, socre: 60}
- {name: taro, socre: 90}
#07 改行を含むデータを扱う
- 改行はスペースに変換されてしまう。
- 改行も含めたデータとして取り扱いたい場合は以下のとおり。
data.yml
- |+ #最終行の改行を含めたい場合は"+"、除きたい場合は"-"
this
is
a
pen.
- >+ #途中の改行はスペース変換。最後の改行は有効
this
is
a
pen.
#08 アンカーとエイリアスを使ってみる。
- 何かしらのスカラーを変数化したい時につかう。
anker.yml
- &leader tanaka #アンカー
- *leader #エイリアス
- &staff sato
- *staff
- *staff
- *staff
- *staff
複雑なデータのアンカーとエイリアス
* ハッシュに対して友達関係を表現したい場合。
anker2.yml
- &test
name: test
score: 90
- &taro
name: taro
score: 60
friends:
- *test
- &jiro
name: jiro
score: 45
friends:
- *taro
- *test
#09 ハッシュをマージする。
- 共通のハッシュなどをスッキリ書くときに使う。
hash_merge.yml
common: &common #commonのアンカーを定義する。
user: dbuser
password: dbpassword
development:
database: myapp_dev
<<: *common #commonのエイリアスを挿入(マージ)する。
production:
database: myapp_prod
<<: *common
test:
database: myapp_test
<<: *common
#10 複数のデータを解釈する。
- 通常は1つのスカラーやシーケンスは1つのデータとして処理される。
- データの始まり(---)と終了(...)を記述することで、複数のデータをまとめて解釈する。
mydata.yml
---
- 1
- 2
- 3
... #...は省略可能
---
- a
- b
- c
...
parse.rb
require "yaml"
File.open('mydata.yml') do |io|
YAML.load_documents(io) do |d|
p d
end
end
出力
[1, 2, 3]
["a", "b", "c"]
#11 Rubyのto_yamlを試してみる。
- yamlの記法を忘れてしまった時などに使える。
- rubyでは、to_yaml
parse.rb
require "yaml"
users = [
{'name' => 'test', 'score' => '90'},
{'name' => 'taro', 'score' => '100'},
]
puts users.to_yaml
出力
---
- name: test
score: '90'
- name: taro
score: '100'
以上、yaml便利!