WebデザイナーのためのRuby on Rails

第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>
  <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)

WebデザイナーのためのRuby on Rails

Ruby on Rails トップへ