GruffをRailsで使う
Gruff は Ruby 用のグラフ描画ライブラリです(参考: Gruffでグラフ)。 今回は、Gruff を Rails から使う方法を説明します。
Sparklines というグラフライブラリは、Rails 用の generator も用意されて いますが、Gruff にはまだないようです。 なので、手作業で Rails に組み込むことになりますが、手順は簡単です。
準備
Gruffでグラフ等を参照して Gruff をインストールします。
サンプルデータの作成
ここでは、説明のため、以下のデータ(携帯電話/PHSの契約数)を用意するも のとします。
sqlite3用スキーマ
create table cellphones ( id integer primary key, name varchar(255) not null, subscriber integer );
データの内容(2005年11月末現在の契約者数)
sqlite> select * from cellphones; 1|DoCoMo|50114700 2|KDDI|24511200 3|Vodafone|15053000 4|Willcom|3562900 5|DoCoMo PHS|916800 6|Astel|51800
モデル
class Cellphone < ActiveRecord::Base end
Railsで使う
gruffライブラリを使うため、Rails アプリの config/environment.rb に以下の行を追加します。
require 'gruff'
次に Gruff 生成用のアクションを作ります。アクションのメソッドは任意の コントローラの中に入れて良いですが、ここではコントローラ名は MyController としています。
class MyController < ApplicationController
def gruff_pie
g = Gruff::Pie.new 500
g.title = "Cellphone/PHS subscriber"
phones = Cellphone.find :all
phones.each {|phone|
g.data(phone.name, [phone.subscriber])
}
send_data(g.to_blob, :type => 'image/png')
end
以下略
gruff_pie メソッドでは、Cellphoneテーブルのデータを元に Pie グラフを生 成しています。
send_data は ActionController の機能で、通常アクションはレンダリング した HTML を返すところを、任意のデータを返すために使うメソッドです。
send_data(g.to_blob, :type => 'image/png')
で、グラフの画像データ g.to_blob を、Content-Type: image/png で送信するこ とになります。
あとは、ビューのテンプレートから
携帯電話/PHS 契約者数内訳<br/> <img src="<%= url_for :controller=>'my', :action=>'gruff_pie' %>">
のように呼び出すことによって、画像をインライン表示できます。


Keyword(s):
References:[FrontPage] [Gruffでグラフ]