第6回 YAMLファイルの扱い方
Ruby on Railsの「業界」では、構造化されたデータを表現するフォーマットとして XML よりも YAML が好まれているようです。
YAML は、"YAML Ain't Markup Language" という冗談のような名前の省略形です。「ヤムル」と発音されます。本稿では、YAML の詳しい仕様や XML との違いを説明することはしません。『Rubyist Magazine』にプログラマーのための YAML 入門 (初級編)という非常に優れた解説がありますので、そちらを参照してください。
次に示すのは、ハッシュ(連想配列)を表現する YAML コードの例です。
name: taro email: taro@sample.com age: 39
Ruby 言語で表現すれば、次のようになります。
{
"name" => "taro",
"email" => "taro@sample.com",
"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: taro@sample.com age: 39 - name: jiro email: jiro@sample.com age: 35 - name: saburo email: saburo@sample.com 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 | taro@sample.com | 39 |
| jiro | jiro@sample.com | 35 |
| saburo | saburo@sample.com | 31 |
次回は、YAML よりも皆さんになじみ深い CSV ファイルについて説明します。Microsoft Excel データを CSV 形式経由で読み込んで、Web ページを生成してみましょう。
(2007/12/03)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- 第1回 Ruby on RailsによるWeb制作の基本的な流れ (2007/09/24)
- 第2回 変数、配列、ハッシュ (2007/10/01)
- 第3回 レイアウトと部分テンプレート (2007/10/08)
- 第4回 RailsのインストールとWebサーバの起動 (2007/10/22)
- 第5回 テンプレートファイルの配置と命名規則 (2007/11/12)
- 第6回 YAMLファイルの扱い方 (2007/12/03)
- 第7回 CSV形式経由でExcelデータを読み込む (2008/02/23)

