第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: 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 ページを生成してみましょう。