FrontPage  Index  Search  Changes  Login

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' %>">

のように呼び出すことによって、画像をインライン表示できます。

/imgs/s-WS105.jpg

Last modified:2005/12/28 00:53:19
Keyword(s):
References:[FrontPage] [Gruffでグラフ]