Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

yamlはXMLに代わる構造化されたデータを表現するためのフォーマットです。Ruby on Railsの設定ファイルのデータ形式に採用されたことで注目されています。

今回は、yamlフォーマットのデータにアクセスするためのRuby用ライブラリであるyamlライブラリの使い方について紹介します。

yamlの仕様

構造化されたデータを表現するフォーマットとしてはXMLが有名ですが、読みやすいフォーマットとは言えません。もっと読みやすいフォーマットが提案されています。そして、そのようなXMLに代わる新しいフォーマットの1つがyamlです。

なおyamlはRuby on Railsの設定ファイルに採用されたことで注目されているフォーマットで、読みやすくシンプルにデータを記述できるのが特徴です。Rubyのプログラムでyamlフォーマットのデータを操作する方法を説明する前に、まずはyamlの仕様について紹介します。

yamlとは

yamlとは、XMLに代わる別のマークアップ言語(Yet Another Markup Language)として開発されたフォーマットで、公式には「YAML Ain’t Markup Language」(YAMLはマークアップ言語ではない)の略とされています。

マークアップ言語といえばXMLが有名ですが、人が編集する場合、タグで囲む書き方は編集しやすいフォーマットとはいえません。その点yamlは、シンプルな構造のため人が編集するのもコンピュータが処理するもの容易です。

スペースによるインデントによる表記

yamlのフォーマットは、半角スペースによるインデントによりデータの深さを表現するのが特徴です。そのため階層構造を持つデータをyamlで表現する場合、半角スペースの数でネスト深さを表現します。

例えば、次のような配列をyamlで表現してみましょう。

階層構造を持つ配列の例

["a1", ["b1", "b2", ["c1", "c2"]], "a3"]

先ほどの配列をyamlフォーマットで表現した例

- a1
-
 - b1
 - b2
 -
  - c1
  - c2
- a3

Rubyでyamlを利用するには

yamlのフォーマットはテキストのため、yamlを解析するプログラムを自力で作れます。しかし、yamlの仕様を全て盛り込んだプログラムを作るのは面倒です。

Rubyには標準で多くのライブラリを用意されていますが、yamlのデータを扱うライブラリもRubyを標準で用意されているのでRubyの実行環境をインストールすればすぐに使えます。

yamlフォーマットのデータを利用するのなら、Ruby標準のyamlライブラリを利用してください。

Rubyのyamlライブラリを使うには

yamlは、先ほど紹介したように構造化されたデータを表現するフォーマットです。Rubyで扱うなら、yamlを扱うための標準の外部ライブラリであるyamlライブラリを利用します。

次からyamlライブラリの使い方について紹介します。

yamlライブラリをrequireする

今回紹介するyamlライブラリは、Rubyと同時にインストールされるライブラリです。Rubyが使える環境であれば、Rubyのプログラムの冒頭でrequireによりyamlライブラリを取り込むことで、yamlを操作する機能を利用できます。

yamlライブラリをrequireする例

require ‘yaml’

yamlフォーマットのファイルを読み書きする

yamlライブラリを取り込むことで、yamlファイルを読み書きするメソッドなどが使えます。まずはRubyのプログラムからyamlフォーマットのファイルを読み込む方法とファイルに書き出す方法について紹介します。

yamlフォーマットを読み込む

yamlファイルを読み込むには、yamlライブラリのloadメソッドを使います。なおloadメソッドは、引数にファイルオブジェクトを指定し、yamlファイルの内容をハッシュオブジェクトに格納して返すメソッドです。

yamlライブラリのloadメソッドの文法

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

yamlライブラリのloadメソッドの使用例

require 'yaml'

f = open('sample.yml')
yml_obj = YAML.load(f)

上記のプログラムで下のyamlファイルをloadメソッドで読み込んだ場合、ハッシュ形式のデータに読み込まれます。

yamlファイルの例

colors:
  - red
  - green
  - blue

yamlファイルを取り込んだハッシュの例

{"colors"=>["red", "green", "blue"]}

yamlファイル名を指定して読み込むには

先ほどファイルオブジェクトを使用するloadメソッドの使い方を紹介しましたが、yamlライブラリにはファイル名を指定してyamlフォーマットのデータを読み込むメソッドも用意されています。それが、load_fileメソッドです。

load_fileメソッドの使い方

YAML.load_file(yamlファイル名)

なおこのメソッドの使い方は、先ほど紹介したloadメソッドのファイルオブジェクトがファイル名に変わるだけです。

yamlライブラリのloadメソッドの使用例

require 'yaml'

file_name = "sample.yml"
yml_obj = YAML.load(file_name)

yamlフォーマットのデータをファイルに書き出す

yamlライブラリを用いてyaml形式でファイルを書き出す際に使うのがdumpメソッドです。なお、dumpメソッドは、yamlで書き出ししたいハッシュ形式のデータと、ファイルオブジェクトを指定します。

yamlライブラリのdumpメソッドの文法

YAML.dump(ハッシュ形式の書き出しデータ、ファイルオブジェクト)

yamlライブラリのdumpメソッドの使用例

require 'yaml'

data = {"colors"=>["red", "green", "blue"]}
f = open('sample.yml', "w")
YAML.dump(data, f)

yamlファイルへの書き出し例

---
colors:
  - red
  - green
  - blue

なお、yamlライブラリのdumpメソッドでファイルに書き出しすると、1行目に「—」が書き出されます。これはyamlデータ形式の区切り記号なので、先ほどのloadメソッドではハッシュオブジェクトに変換される際に無視されます。

複数のyamlを取り出す方法

先ほど、dumpメソッドでyamlファイルを作成すると、1行目に区切り記号となる「—」が出力されます。yamlデータは、「—」を使うことで複数のドキュメントを格納できます。そして、複数のyamlのドキュメントを処理する際に使われるのがload_documentsメソッドとload_streamメソッドです。

複数のドキュメントを格納したyamlファイルの例

先ほど紹介したようにyamlのフォーマットの「—」は区切り記号です。そしてyamlでは、区切り記号があるとそこまでを1つのドキュメントとして扱い、区切り記号の次から記述されたデータとは別に扱います。

例えば次のyamlデータを見てください。

---
sample:
 - ex1
 - ex2
---
colors:
 - red
 - green
 - blue

このyamlデータには、「—」から次の「—」までの「sample:」から始まるデータと、続く「colors;」から始めるデータの2つのドキュメントが記述されています。今回紹介するload_documentsメソッドとload_streamメソッドは、この2つのドキュメントを別に扱うことが可能です。

ブロックで処理を指定するload_documentsメソッド

複数のyamlフォーマットのドキュメントを読み込み、ブロックに記述した処理を適用するメソッドがload_documentsメソッドです。load_documentsメソッドは、引数にyamlデータを含むファイルオブジェクトを指定し、続くブロックに読み込んだyamlのドキュメントを処理する手順を記述します。

load_documentsメソッドの使い方

YAML.load_documents(ファイルオブジェクト) { yamlドキュメントへの処理 }

yamlライブラリのload_documentsメソッドの使用例

require 'yaml'

f = open('samples.yml', "w")
YAML.load_documents(f) { |doc}
  p doc
}

この例は、samples.ymlから読み込んだyamlドキュメントをハッシュに格納し、そのハッシュをpメソッドで表示します。

まとめて処理するならload_streamメソッド

load_streamメソッドは、複数のドキュメントを含むyamlフォーマットのファイルを読み込み、それを複数のハッシュを含むオブジェクトに変換するメソッドです。そして、このオブジェクトに格納された複数のハッシュは、eachメソッドなどで取り出せます。

load_streamメソッドの使い方

オブジェクト = load_stream(ファイルオブジェクト)

yamlライブラリのload_streamメソッドの使用例

require 'yaml'

f = open('samples.yml', "w")
yaml_obj = load_stream(f)
yaml_obj.each { |doc}
  p doc
}

まとめ

これまで解説したようにRubyのyamlライブラリを利用することで、新しいデータ格納フォーマットとして注目されているyamlから簡単にデータを取り出すことが可能です。

なおyamlのデータ形式は、以前から使われているXMLに比べて人が読みやすく、また自由度が高いフォーマットです。Ruby on Railsを利用したWebシステムの設定データの保存などに、ぜひ利用してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。