Ruby で YAML

RubyYAML を処理したいです。

RubyYAML を使うには require 'yaml' としてからコードを書いていけば良いようです。Perl では use YAML、などですね。Ruby では 外部ライブラリの読み込みは require を使うようです。

準備のためにワインを表現した Wine クラスのファイルを wine.rb という名前で作りました。

class Wine
  attr_accessor :name, :year, :country
  def initialize(name, year, country)
    @name = name
    @year = year
    @country = country
  end
end

yaml と wine を require して、Wine オブジェクトを実行してみます。

#!/usr/local/bin/ruby

require 'yaml'
require 'wine'

wine = Wine.new('Ernest & Julio Gallo', 2003, 'Sonoma Coast, California')
puts wine.to_yaml

とすると

--- !ruby/object:Wine
country: Sonoma Coast, California
name: Ernest & Julio Gallo
year: 2003

と、YAMLシリアライズされました。

このシリアライズしたものをファイルに保存してみます。ファイル書き出しは File.open + block でやってみます。

wine = Wine.new('Ernest & Julio Gallo', 2003, 'Sonoma Coast, California')
File.open('wine.yaml', 'w') do |file|
  file.puts(wine.to_yaml)
end

たしかに同じディレクトリに wine.yaml ができあがり、出力が書き込まれました。この書き出したものを読んでデシリアライズしてみたいと思います。

まとめてファイルを読み出すのには File.read を使います。ruby 1.8 から使えるそうです。

#!/usr/local/bin/ruby

require 'yaml'
require 'wine'

wine = YAML::load(File.read('wine.yaml'))
puts wine.name

実行してみます。

$ ruby load_wine.rb
Ernest & Julio Gallo

ぱちぱち。