第6回 YAMLファイルの扱い方
2007/12/03
Ruby on Railsの「業界」では、構造化されたデータを表現するフォーマットとして XML よりも YAML が好まれているようです。
YAML は、"YAML Ain't Markup Language" という冗談のような名前の省略形です。「ヤムル」と発音されます。本稿では、YAML の詳しい仕様や XML との違いを説明することはしません。『Rubyist Magazine』にプログラマーのための YAML 入門 (初級編)という非常に優れた解説がありますので、そちらを参照してください。
次に示すのは、ハッシュ(連想配列)を表現する YAML コードの例です。
name: taro email: [email protected] age: 39
Ruby 言語で表現すれば、次のようになります。
{
"name" => "taro",
"email" => "[email protected]",
"age" => 39
}
いま、この YAML データが RAILS_ROOT/tmp/taro.yml というファイルに書かれているとすれば、データを読み込んで、メールアドレスを表示するコードは次のようになります。
data = YAML.load_file(RAILS_ROOT + "/tmp/taro.yml") puts data["email"]
とても簡単ですね。
ここまで分かれば、アクションの中で外部の YAML ファイルを読み込んで、テンプレートに渡すことができます。たとえば、 RAILS_ROOT/data/table1.yml というファイルがあって、そこに次のように書かれていたとします。
- name: taro email: [email protected] age: 39 - name: jiro email: [email protected] age: 35 - name: saburo email: [email protected] age: 31
そして、テンプレート show.rhtml がこんな風になっているとすると。
<table border="1" cellpadding="4">
<tr>
<th>名前</th>
<th>メールアドレス</th>
<th>年齢</th>
</tr>
<% @records.each do |record| -%>
<tr>
<td><%= record['name'] %></td>
<td><%= record['email'] %></td>
<td><%= record['age'] %></td>
</tr>
<% end -%>
</table>
show アクションは、こうなります。
class TablesController < ActionController
def show
id = params[:id]
@records = YAML.load_file(RAILS_ROOT + "/data/table#{id}.yml")
end
end
こうしておいてブラウザで http://localhost:3000/tables/show/1 にアクセスすれば、次のようなテーブルが表示される、というわけです。
| 名前 | メールアドレス | 年齢 |
|---|---|---|
| taro | [email protected] | 39 |
| jiro | [email protected] | 35 |
| saburo | [email protected] | 31 |
次回は、YAML よりも皆さんになじみ深い CSV ファイルについて説明します。Microsoft Excel データを CSV 形式経由で読み込んで、Web ページを生成してみましょう。
