PR

ブラウザの機能拡張「Gears」とは

2009年1月7日(水)
澤村 正樹

データベースを使う

では、Gearsからデータベースを扱う方法を見ていきます。Gearsを使うとページ上のJavaScriptからクラアントPCの中にあるSQLiteにアクセスすることができます。

クラアントサイドにデータを持たせる手段として、URLにパラメータとして埋め込む方法以外にCookieが使われてきましたが、Cookieでは保存できる容量がかなり制限されてしまいます。アプリケーションの状態を表す簡単な変数を持たせることでしたらCookieでも十分可能でしたが、例えばJavaScriptでエクセル風の表計算アプリケーションを書くとして、それらのデータの一時保存先として利用するならば、ある程度まとまった量の保存領域が必要になってきます。

Gears経由でSQLiteを使うと、Cookieでの制限を大幅に超えて多くのデータをクライアントに持たせることができます。また、要領的なメリットだけでなくデータを扱う際にSQL文を利用することができるので、複雑な条件でデータを取得できるようになり、かなり使い勝手が良くなります。

さて、WebページでGearsを利用するにはGearsのページから配布されている「gears_init.js」をインクルードします。

<script type="text/javascript" src="gears_init.js"></script>

このスクリプトを読みこんでおくと、Gearsがインストールされているブラウザでそのページにアクセスするとgoogle.gearsというオブジェクトが存在するようになります。google.gearsオブジェクトの存在が確認できたら以下のようなコードでデータベースを開きます。

db = google.gears.factory.create('beta.database');
db.open('mydb'); // 任意のデータベース名

SQLiteは1つのデータベースが1つのファイルとして管理されます。初めてデータベースを開いた時には新規にファイルが作られます。

SQL文を実行する

dbオブジェクトができたら、それを経由してSQL文が実行できます。SQL文の実行はexecuteメソッドで行います。例えば、テーブルを新規に作る場合は以下のようになります。

db.execute('create table if not exists mydb (script text, reg_date int)');

データベースからデータを取り出す場合は、まずはselect文を実行して結果セットをオブジェクトとして取得します。以下のような例です。

var result = db.execute('select * from recipe order by reg_date desc');

実行に成功すると結果セットをオブジェクトとして取得できます。そのオブジェクトからテーブルの1行ずつ結果を取り出す場合は以下のようにループをまわします。

while (rs.isValidRow()) { // データがあるかどうかを確認
 // データ取得処理
rs.next(); // 次の行へ }

そのループ中で、カラム単位でデータを取り出すのは以下のようにします。

rs.field(0); // カラムを左から順に数字で指定
rs.fieldByName("food"); // カラム名で指定

図2のソースコードは、そのほかのdeleteやupdateを含めたJavaScriptコードのイメージです。もしRDBを使ったコードを書いたことのある方でしたら、それほど違和感なく書きこなせるかと思います。

ちなみに、同じようにクライアントサイドのデータベースをSQLを使ってアクセスする仕様としてはSafariなどで実装されているHTML 5のクライアントサイドデータベース機能がありますが、それと比べても比較的シンプルなコードになるかと思います。データベースが扱えるようになると、JavaScriptだけである程度データを保存したり読み出したりするようなアプリケーションを作ることが可能になります。そのほかにも、例えば大きなアプリケーションを作る際に、フロントエンドのモックを作る場合などにも活用できるかと思います。

このように、データをクライアントに保存してSQLで取り出せることで、単にCookieだけではできなかったさまざまなアイデアが可能になります。ぜひ試してみてください。

次は、最近追加されたGeoLocaion APIについて解説します。

NTTレゾナント株式会社
1976年生まれ、横浜国立大学電子情報工学科卒業。論文査読システムや写真ストックサイトなどのフロントエンドエンジニアリングを経て、角川書店系のウォーカープラス・ドット・コムにて各種サービス開発にかかわる。現在はNTTレゾナント「goo」にて検索サービスを中心としたエンジニアリングとユーザーインターフェース設計、および新サービスの企画立案に携わる。gooラボ:http://labs.goo.ne.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています