SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Google Visualization APIを使ってWebアプリケーションにグラフィカルデータを表示する

Google Visualization APIの基本事項から高度な内容まで

外部ソースからのデータ読み込み

 ここまでのサンプルはどれも、ローカルに作成したデータをJavaScriptで利用するものでした。ただし、実稼働環境では、リモートのデータソースからデータを取得する場合のほうが多いでしょう。その場合はもちろん、データソース側がGoogle Visualization APIに準拠した形式でデータを提供する必要があります。

 Google Spreadsheetsであればそうした形式でデータを提供できるので、まずは先ほどのWebページからサンプルデータを抜き出してGoogleスプレッドシートに移すことにしましょう。Googleスプレッドシートを作成し、図4に示すようなデータを追加します。データを追加したら、こちらの手順に従って、Google Visualization APIに準拠したデータソースの形で公開するためのURLを求めます。

図4 図表化するデータの入ったGoogleスプレッドシート。このようにデータをGoogleスプレッドシートに挿入する
図4 図表化するデータの入ったGoogleスプレッドシート。このようにデータをGoogleスプレッドシートに挿入する

 これで、サンプルWebページの<script>セクションを置き換えれば、データをローカルに生成する代わりにリモートソースから読み込めるようになります。リスト6に変更部分を示します。

リスト6 Google Visualization APIデータソースとして機能するRailsコントローラ
class SampleController < GvizBaseController
  def fruits
    gvizifier do |gviz|
      gviz.add_col('string', :id => 'name', :label => 'Name')
      gviz.add_col('string', :id => 'parent', :label => 'Parent')
      gviz.add_col('number', :id => 'quantity', :label => 'Quantity')            
      data = [
        [ "Apples", "Root", 0],
        [ "Braeburn", "Apples", 1],
        [ "Cox", "Apples", 2.2],
        [ "Golden Delicious", "Apples", 0],
        [ "English", "Golden Delicious", 1],
        [ "French", "Golden Delicious", 2],
        [ "Bananas", "Root", 0],
        [ "Caribbean", "Bananas", 2.5],
        [ "Central American", "Bananas", 1.5],
        [ "Clementines", "Root", 3]
      ]
      gviz.set_data(data)      
    end
  end
end

 大きな違いは、google.visualization.Query()を使う点です。そこでsend()メソッドを呼び出すことにより、コンストラクタに渡されたリモートソースからデータが取得され、結果としてDataTableが返されます。ここから先は、以前のサンプルと同じようにデータを処理できます。

独自のデータソースの利用

 リモートソースからデータを読み込めるようになったので、今度はカスタムのデータソースをGoogleビジュアライゼーション用のデータソースとして公開してみましょう。データソースには、リレーショナルデータベースをはじめとするストレージエンジンが使えます。それらを互換性のあるデータソースとして公開すれば、2度手間をかけることなく既存のビジュアライゼーションを再利用できます。

 そのためには、ビジュアライゼーションがデータの要求に使用するワイヤプロトコルをデータソースが実装していなければなりません。このプロトコルでは、google.visualization.Queryインスタンスが出すHTTP GET要求への応答や、google.visualization.QueryResponseで想定されている形式と互換性があるJSON(JavaScript Object Notation)形式での応答が求められます。

 このプロトコルはかなり複雑なので、サーバ側でヘルパーライブラリを再利用するのが無難でしょう。Google Visualization APIには、既にPython用ヘルパーライブラリが用意されています。また、本稿のソースコードを収めたダウンロードファイルには、Ruby on Rails上で使えるヘルパークラスが入っています。このヘルパークラスは、ダウンロードファイルにあるRailsのコントローラとモデル(gviz_base_controller.rbgviz.rb)をRailsアプリケーションにインクルードするだけで使えます。以上の作業を終えてから、gvizifierヘルパーメソッド(リスト6を参照)を使用するRailsコントローラを実装すれば、カスタムデータをGoogleビジュアライゼーション用データソースとして公開できます。

 gvizifierヘルパーメソッドによって公開されるgvizオブジェクトは、応答の実装に使えます。このオブジェクトは、新しい列を作成するメソッド(gviz.add_col())と応答データを設定するメソッド(gviz.set_data())を持ち、こうした入力情報を適切な形のJSON応答に変換してクライアントに送信するのに必要なあらゆる処理を担当します。

 このヘルパーを使うと共に、リスト6のサンプルコードを(例えばActiveRecordモデルを使って)自分のデータベースからデータを取得するように書き換えれば、最小限の手間でそうしたデータを複数のビジュアライゼーションに対して提供できるようになります。

まとめ

 本稿では、Google Visualization APIの基本事項から高度な内容まで、広い範囲にわたって実践的な解説を行いました。このAPIの使い方や新たなビジュアライゼーションの作り方、さらには各自のデータを使いやすいデータソースとして公開したり、他の開発者が提供しているビジュアライゼーションを再利用したりする方法も紹介しました。

 さらに高度な内容を求めるなら、ビジュアライゼーションによるSQLライクなフィルタ処理やグループ化を可能にするVisualization Query Languageについて学んだり、ビジュアライゼーションをガジェット化してiGoogleやGoogleスプレッドシートに埋め込めるようにしたりするとよいでしょう。

 ただし、サードパーティによって提供されているビジュアライゼーションについては、個人情報およびセキュリティに関するポリシーに必ず目を通してから、データを適用するようにしてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Riccardo Govoni(Riccardo Govoni)

2003年からJ2EE開発者としてイタリアの金融サービス会社に勤務。ソフトウェアアーキテクトとして従来の銀行システムのWebフロントエンドの設計に従事。物理学修士。SCJP(Sun Certified Java Programmer)資格を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3660 2009/03/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー