まくまくRubyノート
Ruby で YAML ファイルを扱う
2016-10-20

Ruby には YAML ファイルを扱うためのモジュール yaml が標準で搭載されています。

YAML ファイルの拡張子は、.yaml が使われていたり、.yml が使われていたりしますが、YAML 公式サイトでは .yaml を使うことを推奨しているようです。

YAML 形式の文字列をパースする

下記のように、YAML.load メソッドを使用することで、YAML 形式のテキストをパースして Ruby のオブジェクトにしてくれます。

sample.rb

require 'yaml'

text = <<END
  key1: value1
  key2: value2
  key3:
    - value3-1
    - value3-2
    - value3-3
  key4: {a1: a2, b1: b2, c1: c2}
END

ym = YAML.load(text)
puts ym

実行結果

$ ruby sample.rb
{"key1"=>"value1", "key2"=>"value2", "key3"=>["value3-1", "value3-2", "value3-3"], "key4"=>{"a1"=>"a2", "b1"=>"b2", "c1"=>"c2"}}

YAML ファイルを読み込む

YAML.load_file メソッドを使用すると、YAML 形式のテキストファイルを読み込んで Ruby のオブジェクトに変換してくれます。

books.yaml

- name: The Ruby Programming Language
  author: [David Flanagan, Yukihiro, Matsumoto]
- name: Ruby Cookbook
  author: [Lucas Carlson, Leonard Richardson]

sample.rb

require 'yaml'

ym = YAML.load_file('input.yaml')
p ym

実行結果

$ ruby sample.rb
[{"name"=>"The Ruby Programming Language", "author"=>["David Flanagan", "Yukihiro", "Matsumoto"]}, {"name"=>"Ruby Cookbook", "author"=>["Lucas Carlson", "Leonard Richardson"]}]

Ruby のオブジェクトを YAML 形式のテキストに変換する

yaml モジュールをロードしておくと、Ruby のオブジェクトを YAML 形式のテキストに変換するための Object#to_yaml メソッドが使えるようになります。

sample.rb

require 'yaml'

obj = {'key1' => 'value1', 'key2' => 'value2', 'key3' => [100, 200, 300]}
puts obj.to_yaml

実行結果

$ ruby sample.rb
---
key1: value1
key2: value2
key3:
- 100
- 200
- 300
2016-10-20