【ハウツー】

"ブラウザ+Gears"でここまでできる! Google GearsのDB機能を使ってみよう

1 Gearsの持つ組み込みデータベース

    白石俊平  [2007/06/07]

    Google Gearsをおさらい

    5月31日のGoogle Developer Dayで発表された新技術「Google Gears(以下、Gears)」。皆さんは既にお試しになっただろうか。ブラウザのプラグインというかたちでまったく新しいJavaScriptのAPIを提供するという発想に、今や世界中のギーク達が魅了されており、その可能性を追求すべく各地で熱心な研究が続けられている。

    Gearsについて軽く触れておくと、Gearsの実体はIE(Microsoft Internet Explorer)、Firefoxで動作するブラウザのプラグインだ(将来的にはMac OS XのSafariもサポートされる)。以下のようなJavaScript APIを提供し、オフラインでも動作するWebアプリケーションの構築をサポートする。

    • ローカルサーバ - Webページに関する様々なリソース(HTML、JavaScriptファイル、画像など)のキャッシュ
    • データベース - 組み込みのリレーショナルデータベース
    • ワーカプール - JavaScriptコードをバックグラウンドで非同期に実行するためのAPI

    このうち、ローカルサーバについては、こちらの記事で解説しているので参照していただきたい。Gearsのインストール方法や概要などは、こちらの記事が参考になるだろう。

    今回はGearsの機能のうち、データベースモジュールを解説する。

    Gearsの持つ組み込みデータベース

    では、ここからGearsが持つデータベースモジュールを詳しく解説したい。

    Gearsは、内部にSQLiteというデータベースを同梱している。SQLiteは、通常のデータベースとは異なり、アプリケーションに組み込まれることを最初から想定したライブラリだ。非常にコンパクトながら、SQL92が持つ機能の多くが実装済みで、トランザクションは勿論のこと、ビューやトリガーもサポートしている。

    Gearsをインストール済みのブラウザ上では、JavaScriptを用いてSQLiteにアクセスすることができる。つまり、JavaScriptコードからSQLを発行して、データベースの操作を行えるということだ。Gearsでは、ほんの少しの例外を除いて、SQLiteで使用できるクエリをほぼ全て使用することができる。SQLiteが持つSQLのシンタックスは、こちらのリファレンス(英語)を参照するとよい。

    Gearsによるデータベースアクセス方法は、JDBCなどによく似ているため習得するのは容易だ。以下に、そのほとんどを網羅した疑似的なコードを掲載するので参考にしてほしい。

    <!-- (1) gears_init.jsを読み込んで、Gearsのセットアップ -->
    <script type="text/javascript" src="gears_init.js"></script>
    <script type="text/javascript">
    // (2) データベースオブジェクトの作成
    var db = google.gears.factory.create('beta.database', '1.0');
    
    // (3) DBのオープン
    db.open("DB名");
    
    // (4) SQLの実行。create table文なども可能
    db.execute("insert into test ...");
    
    // (5) SELECTクエリの実行。
    var rs = db.execute("select * from test where id = ?", [1]);
    
    try {
       // (6) 検索結果をループし、処理を行う
       while (rs.isValidRow()) {
       // (7) 結果セットから値を取得
         var indexedField = rs.field(0);
         var namedField = rs.fieldByName("named");
    
         ...
         // (8) ResultSetのカーソルを進める
         rs.next();
       }
    } finally {
       if (rs) rs.close(); // (9) 結果セットのクローズ
    }
    db.close(); // DBのクローズ。別に行わなくとも良い
    </script>

    ポイントを簡単におさらいしておこう。

    (1) gears_init.jsの読み込みは、Gearsを使用するWebアプリケーション全てが行わねばならない。このJavaScriptの入手方法などは後述する。

    (2) データベースに限らず、GearsのAPIはコアとなるオブジェクトをgoogle.gears.factory.create("識別子", "バージョン")というAPIで作成するところから始まる。このコードにより、Databaseクラスのインスタンスを取得できる。

    (3) データベースのオープンはDatabase#open("データベース名")を使用する。任意の文字列をデータベースの名前として指定することができる。

    (4) Database#executeメソッドを用いてSQLを発行している。Gearsでは、検索クエリ(select)も、データ操作文(insert、update、delete)も同じくexecuteメソッドを用いて発行する。

    (5) Database#executeメソッドを用いて、プレースホルダ(「?」)付きのSQLを発行している。JDBCにおけるPreparedStatementと同様の考え方だ。executeメソッドのシグネチャは、Database#execute("SQL", [プレースホルダに対応する引数])となっており、第二引数は配列で指定する。SQLインジェクションというセキュリティホールを回避するためにも、プレースホルダの使用は推奨される。selectクエリを実行した場合は、戻り値はResultSetクラスのインスタンスだ。

    (6) 検索結果をループする処理は、ResultSet#isValidRow()メソッドがtrueを返す間、という条件式を用いる。JDBCにおけるjava.sql.ResultSetとはAPIが異なる。

    (7) ResultSet#field(int)を用いると、結果セット内の列インデックスを指定して値を取得できる。ResultSet#fieldByName(String)は、結果セット内の列名を指定して値を取得する。

    (8) ResultSet#next()を呼び出して、結果セット内のカーソルを進める。このメソッドを呼び忘れると、whileループが無限ループになってしまうので要注意だ。

    (9) ResultSet#close()メソッドを用いて結果セットをクローズしている。この例のように、finally節を用いてクローズするのが順当な方法だろう。

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン