LoginSignup
10
8

More than 5 years have passed since last update.

YAMLを始める

Last updated at Posted at 2014-11-29

YAML

  • テキストデータの構造管理を簡単な記述で実現する
  • マークアップランゲージではない

参考

環境準備とお試し

  • vagrantでCentOS6.5の仮想環境を準備
  • 仮想環境内にはrubyの2.1系をインストール済み
  • 以下のディレクトリで作業する
    • /home/vagrant/yaml_lesson
  • ファイル作成
コマンド
touch mydata.yml
touch parse.rb
  • YAMLファイルを編集
mydata.yml
- d1
- d2
- d3
  • Rubyファイルを編集
parse.rb
require 'yaml'
d = YAML.load_file('mydata.yml')
p d
  • Rubyファイルを実行
コマンド
ruby parse.rb
出力
["d1", "d2", "d3"]

シーケンスを扱ってみる

  • Rubyで言うところの配列(上記でやったやつ)
  • mydata.ymlを編集
mydata.yml
# ハイフン+スペースの後にデータを記述
# インデントでデータのネストも可能
- d1
-
 - x1
 - x2
- d3
  • Rubyファイルを実行
コマンド
ruby parse.rb
出力
["d1", ["x1", "x2"], "d3"]
  • インデント時はtabは使えないので注意

マッピングを使ってみる

  • Rubyで言うところのハッシュ
  • keyとvalueをペアで管理する
  • mydata.ymlを編集
mydata.yml
name: taro
address: japan
  • Rubyファイルを実行
コマンド
ruby parse.rb
出力
{"name"=>"taro", "address"=>"japan"}
  • コロンの後はスペース必須なので注意
  • こっちもシーケンスと同じでネスト可能
mydata.yml
name: taro
address:
  main: japan
  sub : UK

ブロックスタイルとフロースタイル

  • 上記までのは「ブロックスタイル」
  • 「フロースタイル」をやってみる
    • シーケンスは [hoge, fuga] といった形で記述
    • マッピングは {key: value} といった形で記述
mydata.yml
[d1, d2, {key: val}, {key2: val2}]
  • Rubyファイルを実行
コマンド
ruby parse.rb
出力
["d1", "d2", {"key"=>"val"}, {"key2"=>"val"}]

データ型の解釈

  • 基本はオート
mydata.yml
str: hoge
num: 1
num2: 2.2
bool: true
bool2: false
nothing: null
出力
{"str"=>"hoge", "num"=>1, "num2"=>2.2, "bool"=>true, "bool2"=>false, "nothing"=>nil}
  • "true"とかダブルクォーテーションで囲めば文字として認識される

改行データをあつかう

  • | を使う
  • ラスイチの改行だけを生かす場合は > を使う
mydata.yml
d1:
 aaa
 bbb
 ccc
d2: |
 aaa
 bbb
 ccc

d3: >
 ddd
 eee
 fff

出力
{"d1"=>"aaa bbb ccc", "d2"=>"aaa\nbbb\nccc\n", "d3"=>"ddd eee fff\n"}

...と---

  • ... は解釈の終了を意味する
  • --- は区切りを意味する
mydata.yml
---
[d1,d2,d3]
---
[d4,d5,d6]
...
---
[d7,d8,d9]
parse.rb
require 'yaml'

File.open('mydata.yml') do |io|
  YAML.load_documents(io) do |d|
    p d
  end
end
出力
["d1", "d2", "d3"]
["d4", "d5", "d6"]
["d7", "d8", "d9"]

... が効かなかったっぽい

mydata.yml
- d4
- d5
...
- d6

エラー

  • parse.rb を戻せば正常に動作した
出力
["d4", "d5"]
  • 元のrubyソースはファイル単位で読み込む際に...をただしく解釈したということか
10
8
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
10
8