Google Wave API開発ガイド(前編)

プレビュー公開が始まったGoogle Wave「超」入門


株式会社鳥人間
郷田まり子
2009/10/1


Google Wave Gadget開発の基礎知識


Gadget作成の概要

 Wave Gadgetを挿入するときは、WaveのBlipの中に<iframe>要素として呼び出します。

 GadgetはXML形式で記述します。XMLには、<iframe>内に呼び出すHTML要素のほか、CSSやJavaScriptなども記述できます。

 

Gadgetの例、オンラインのチェス
Gadgetの例、オンラインのチェス

Gadget XMLの記述

 最も単純なWave Gadgetは、次のような構造のXMLです。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Hello Gadget">
<Require feature="wave" />
</ModulePrefs>
<Content type="html">
<![CDATA[
Hello Gadget!
]]>
</Content>
</Module>

 このXMLを、どこかのWebサーバに設置してGadgetとして呼び出すと、「HelloGadget!」と表示された<iframe>が挿入されます。このXMLの構造を、以下の表で少し詳しく解説します。

<Module> ルート要素。このタグの中身がGadgetの内容となる
<ModulePrefs> Gadgetと作者についての情報を記述
<Require> 利用するライブラリを記述。<ModulePrefs>タグの中に複数の<Require>タグを含めることができる。Waveの基本的機能を使うならfeature属性の"wave" は必須。ほかにも、setprefs、 dynamic-height、 settitle、 tabs、 minimessage、 flash、 locked-domainといったライブラリがあるので、詳細はAPIドキュメント参照
<Content> Gadgetの中身

 Gadgetの寸法を指定する場合は、<ModulePrefs>タグのwidth、height属性に記述します。

<ModulePrefs title="HelloGadget" height="120" width="120"> 

 <Content>タグ内のCDATA の内部には、HTMLタグを記述できます。ここに記述するものは、<body>タグの内部に相当するものだけで構いません。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Button Test">
<Require feature="wave" />
</ModulePrefs>
<Content type="html">
<![CDATA[
<div>
<input type="button" value="Click Me!"/>
</div>
]]>
</Content>
</Module>

 JavaScriptなどの外部ファイルを呼び出すこともできます。<script>タグで記述します。

<script language="javascript" src="http://example.com/exampleGadget.js"></script>

JavaScriptの実装

 Gadgetが表示されたときに呼び出される処理を登録します。

    gadgets.util.registerOnLoadHandler (関数) 

 例えば、関数 "init" を最初に呼ぶ場合には、以下のように記述します。

function init () {
    //Gadgetを表示してまず実行する処理をここに書く 
}
 
gadgets.util.registerOnLoadHandler(init);

Stateの利用

 Wave Gadget内で、ゲームからドキュメント共同編集まで、さまざまなデータを参加者間で同期するための重要な概念が「SharedState」(あるいは単純に、「State」)というものです。

 Stateには、JavaScriptでアクセスします。Stateには、key-value形式のハッシュとして、文字列を複数保存できます。文字列以外を保存したい場合には、何か適切なフォーマット(例:CSVJSON、 XML)でいったん文字列にして保存し、取得時に復元するといった工夫が必要でしょう。

 Stateにデータを保存する処理は、以下のコードです。

wave.getState().submitDelta({'someKey': someValue})

 Stateの変更をフックするには、wave.setStateCallbackメソッドにコールバック関数を渡します。

function init () {
    // 初期化
    if (wave && wave.isInWaveContainer()) {
        wave.setStateCallback(stateUpdated);
    }
}
 
gadgets.util.registerOnLoadHandler(init);
 
function stateUpdated () {
    //Stateに保存した値を送る
    var stateValue = wave.getState().get('someKey');
    // 以下、State変更時の処理を書く
}

 Stateの変遷は記録されており、後からプレイバック機能を利用して再現できます。

参加者の情報の取り扱い

 WaveGadgetでは、参加者の情報を取り扱うこともできます。参加者情報はParticipantオブジェクトとして取り扱われ、IDや名前、アイコンなどを取得できます。参加者を取得するメソッドには、以下のようなものがあります。

wave.getParticipants() 参加者全員の配列を返す
wave.getHost() Gadgetを追加した人を返す
wave.getViewer() 自分自身を返す

 個々の参加者の情報は、以下のようなメソッドで取得します。

getId() ID
getDisiplayName() 表示されている名前
getThumbnailUrl() アイコンのURL

 参加者の変更をフックすることもできます。wave.setParticipantCallback にコールバック関数を渡します。

function init () {
    // 初期化
    if (wave && wave.isInWaveContainer()) {
        wave.setParticipantCallback(participantUpdated);
    }
}
 
gadgets.util.registerOnLoadHandler(init);
 
function participantUpdated () {
    wave.getState().get('count');
}

Gadgetを使用するには

 Gadgetが完成したら、XMLファイルを外部からHTTPアクセスできるどこか適当な場所に設置します。Webアクセスできる場所ならどこに置いても構いません。そして、GadgetのXMLファイルまでのURLを覚えておきましょう。

 次に、Waveサイトの画面上から呼び出してBlipに挿入します。Gadgetを追加したい場所にカーソルを置いた状態で、Waveサイトの画面右上のGadget追加アイコン(緑のジグソーパズルのピース)をクリックします。

 画面が小さいとこの部分は隠れてしまうかもしれないので、幅を広げてみてください。

 小さなダイアログが開くので、ここに挿入したいGadgetのURLを入れます。[Add]をクリックすると、Gadgetが挿入されます。

 次ページでは、サンプルとしてちょっとした「投票Gadget」を作ってみます。

1-2-3-4

 INDEX
Google Wave API開発ガイド(前編)
プレビュー公開が始まったGoogle Wave「超」入門
  Page1
ついにプレビュー公開が始まった「Google Wave」とは
Google Waveって結局、何ができるの?
Waveの3つのカタチGadget、Robot、Embed
Page2
Google Wave Gadget開発の基礎知識
  Page3
投票Gadgetを作ってみた
  Page4
Google Wave Embed開発の基礎知識
今後次々と充実? Embed APIのこれから



リッチクライアント&帳票 全記事一覧へ



HTML5 + UX フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日 月間