RubyでYAML形式ファイルの読み込み・書き出しを行う方法

YAML とは構造化されたデータを表現するフォーマットのひとつであり、設定ファイル、データ保存・交換、ログファイルなどでよく使われます。Ruby on Rails でも活用されており、Ruby では使う機会の多いデータ形式です。

今回は YAML 形式ファイルの読み込み・書き出しの方法を紹介します。

YAML 形式のデータを読み込む

Ruby で YAML 形式のデータを扱う場合は、標準ライブラリである yaml をインポートします。YAML 形式のファイルを読み込むときは、yaml ライブラリの load メソッドを使用します。

YAML.load(ファイルオブジェクト)

load メソッドの引数にはファイルオブジェクトを指定します。また、引数には YAML 形式の文字列を指定することもできます。load メソッドは戻り値としてパース後のオブジェクトを返します。

今回は例として以下のファイル(sample.yml)を読み込みます。

fruits:
  - Orange
  - Apple
  - Grape

以下は sample.yml をパースするプログラムの例です。

require 'yaml'

data = open('sample.yml', 'r') { |f| YAML.load(f) }
p data # {"fruits"=>["Orange", "Apple", "Grape"]}

上のプログラムを実行すると、YAML 形式のデータがハッシュオブジェクトに変換されて表示されます。

YAML 形式データの書き出し

YAML 形式ファイルの書き出しには、 dump メソッドを使用します。

YAML.dump(変換したいオブジェクト, ファイルオブジェクト)

以下は YAML ファイルへの書き出しのプログラム例です。

require 'yaml'

data = { "fruits" => ["Orange", "Apple", "Grape"] }
YAML.dump(data, File.open('sample2.yml', 'w'))

ファイルの中身を確認してみます。

$ cat sample2.yml
---
fruits:
- Orange
- Apple
- Grape

ハッシュオブジェクトが YAML 形式に変換されファイルに書き込まれていることが確認できます。「---」は YAML データ形式の区切りを表し、複数の YAML データを扱うときに利用されるものです。パース時にオブジェクトには変換されません。


イベント

2017/12/05(火)
Design Thinking Square