WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

Google Gears 活用法 : SQLAdmin for Google Gears で SQL に挑戦!

先日公開した Infosketch はお試しいただけたでしょうか。まだまだ Google Gears の機能のごく一部を使っているに過ぎませんが、 JavaScript のみで大容量の永続ストレージが利用できる点はとても興味深いと思います(あのレベルなら Flex のローカルストレージという手もありますが ^^;)。僅かながら Google Gears のノウハウも得られましたので、今回から少しずつご紹介していこうと思っています。

ということで、第一回は Infosketch の開発でもずいぶんお世話になった SQLAdmin for Google Gears (以下 SQLAdmin)というツールを使って、 SQL の基本を押さえてみようと思います。というのも、 Google Gears のデータベース機能は SQLite という本格的な SQL データベースなので、 SQL がわかっていないとまったく使えません。これって Google Gears を使った開発を始める上で、けっこうなネックになると思うんですよね。

そこで、ブラウザ上で簡単に SQL の実験ができる SQLAdmin を利用して、 SQL の動作を実際に確認しながら覚えていこうという試みです。たしかに SQL はとっつきにくいところがありますが、 Google Gears のプログラミングで必要になる部分はさほど複雑ではありません(データの規模はせいぜい数千行程度でしょうから ^^;)。 JavaScript が使える方なら必ず理解できると思いますので、ぜひ挑戦してみてください。

当然ながら、 SQLAdmin for Google Gears を使うには Google Gears が必要です。もしまだインストールされていない場合は、こちらからインストールしておいてください。

SQLAdmin を使ってみよう

SQLAdminChristophe Coenraets 氏が開発した Flex ベースのアプリケーションで、 Google Gears のデータベースをブラウザ上の GUI で操作できます。この SQLAdmin をすぐに使えるよう、サンプルデータと共にセットアップしておきましたので、ご利用ください。

http://webos-goodies.googlecode.com/svn/trunk/blog/articles/51163729/index.html

このページにアクセスすると、最初に以下のようなダイアログが開きます。

Google Gears のセキュリティー警告画面

"webos-goodies.googlecode.com" ドメインに Google Gears の利用を許可するかどうかを尋ねていますので、「Don't ask me again」にチェックを入れて「Allow」をクリックしてください。これで次回以降は尋ねてこなくなります。後ほど設定を取り消したい場合は、ブラウザのメインメニューの [ツール]-[Google Gears Settings] を使ってください。

データベースの初期化に少々時間がかかりますが、それが終わると SQLAdmin のページにリダイレクトします。今度は使用するデータベース名を尋ねてくるので、「example」と入力して、「OK」ボタンを押してください。

SQLAdmin のデータベース名ダイアログ

すると、以下のような SQLAdmin のメイン画面が表示されます。

SQLAdmin 起動画面

これで SQL の実験をする準備が整いました。

テーブルの内容を表示してみよう

それでは、実際に SQL を打ち込んでデータを操作してみましょう。画面左上のほうにある「New Query」をクリックすると、以下のようなウインドウが表示されます。

SQLAdmin のクエリーウインドウ

ウインドウ上部のテキストボックスに SQL 文を打ち込んで「Execute」ボタンをクリックすれば、その SQL 文が実行されて結果が下に表示されます。実験用のデータとして、この blog の iGoogle ガジェット関連の記事リストが保存されていますので、まずはそれを表示することから始めてみましょうか。

SELECT : 単純にテーブル内容を表示する

テーブルの内容を取得(表示)するには、 SELECT という SQL 文を使います。 SELECT 文は SQL の多彩なデータ検索・読み出し機能のほとんどをまかなっているため、とても多機能です。そのすべてを把握するのはとても大変なので、ここではごく基本的な使い方に絞ってご紹介しようと思います。

もっとも単純な SELECT 文の構文は以下のようになります。

SELECT カラム1[, カラム2]... FROM テーブル

試しに以下の SQL を実行してみてください。

SELECT id, title, date FROM articles

すると articles テーブルの全項目の ID 、記事名、投稿日時が表示されます。項目の順番が違っているのはご愛嬌(^^;。どうやらアルファベット順にソートしてしまうようですね。

全項目の表示

簡単ですよね。 SQL 恐るるに足らずです。 SQLAdmin ではこのようにグリッドにクエリー結果が表示されますが、 Google GearsAPI レベルでは ResultSet という JavaScript オブジェクトを介してアクセスします。このあたりに関しては、後の回でご紹介しようと思っています。

WHERE : 特定の行のみを表示する

とりあえず項目を取得する方法はわかりましたが、ひとつの項目が必要なだけなのに毎回全項目を取得していたら、物凄く重い Web アプリケーションになってしまいますよね。今度は条件を指定して一部の項目のみを表示する方法をご紹介しましょう。

取得する項目の条件を指定するには SELECT 文に WHERE 句を追加します。例えば、 ID が 51032489 の記事を取得するには、以下のように記述します。

SELECT id, title, date FROM articles WHERE id = 51032489

条件には不等号も使えますし、 AND や OR で複数条件を指定することも可能です。以下の SQL で 2007 年 1 月の記事を列挙できます。実際にはもっと効率の良いやり方がありますが、それは各自で探してみてください。

SELECT id, title, date FROM articles
  WHERE date >= '2007-01-01 00:00:00'
    AND date <= '2007-01-31 23:59:59'

このように、該当する項目が複数あれば、それらをすべて取得できます。掲示板などで特定の日付の記事のみを表示するのに使えそうですね。

ORDER BY : ソートする

範囲指定ができたのはいいのですが、まだ順序がばらばらでわかりにくいですね。今度は項目のソートをやってみましょう。データを取得した後に JavaScript でソートすることも可能ですが、パフォーマンス的には SQL で行ったほうが有利です。それでは、 id が 51100000 以上の記事を、日付順にソートしてみましょう。

SELECT id, title, date FROM articles
  WHERE id >= 51100000 ORDER BY date

このように、ソートのキーとなるカラムを指定するだけでソートができます。 GROUP BY 句は常に WHERE 句の後に書く必要があるので注意してください。並び順はデフォルトで昇順ですが、 DESC を付けると降順になります。

SELECT id, title, date FROM articles
  WHERE id >= 51100000 ORDER BY date DESC

これで記事の並び順もバッチリ指定できました。他にもいろいろな機能がありますが、きりがないのでこれで終わりにします。もっと他の機能も知りたい!という方は、記事の最後でご紹介している参考文献をご参照ください。

テーブルの内容を変更してみよう

既存データの取得方法がわかったら、今度はデータを変更してみましょう。実は変更のほうが、取得よりもバリエーションが少ないので簡単です。 SQLAdmin を使って動作を確かめていけばすぐに把握できると思いますので、ぜひやってみてください。

UPDATE : 既存項目の更新

まずは既存項目の書き換えに挑戦してみましょう。これには UPDATE 文を使います。構文は以下のようになります。

UPDATE テーブル SET カラム1=値1[,カラム2=値2]... WHERE 条件

テーブルとカラムの順番が SELECT と逆なのは勘弁してほしいのですが(´Д`;、決まりなので仕方がありません。そういうものだと思って覚えましょう。「カラム=値」のリストは変更したいカラムのみ記述すれば OK です。それ以外のカラムは元の値が保持されます。

それでは、例として ID が 51032489 の項目のタイトルを「新タイトル」に変更する SQL を実行してみましょう。

UPDATE articles SET title='新タイトル' WHERE ID=51032489

このように、 SQL は文字列データをシングルクォートで囲うことになっています。文法的に曖昧でなければ省略できるのですが、日本語はだめみたいですね。間違いを避けるため、文字列データは常にシングルクォートで囲う癖をつけるのが無難です。実行したら、以下の SELECT 文で更新されたことを確認できます。

SELECT title FROM articles WHERE id=51032489

タイトル変更の確認

ばっちり更新されていますね。

INSERT : 新規項目の追加

次は新しい項目の追加です。今度は INSERT 文です。

INSERT INTO テーブル (カラム1[, カラム2]...) VALUES (1[, 値2]...)

UPDATE のときとは違って、挿入するカラムのリストと、そこに代入する値を別々に記述します。なんでこんなに統一性がないのかと小一時間問い詰めたいところです。それはさておき、実際にやってみましょう。こんな感じでしょうか。

INSERT INTO articles (id, title, date)
  VALUES (1, 'Google Gears', '2007-01-01 00:00:00')

このように、カラムのリストに記述した順番でそこに代入する値を列挙します。 UPDATE 文と同様に、初期値を指定したいカラムのみを列挙すればよく、指定のないカラムは NULL という特殊な値で初期化されます。ただし、カラムと値の個数が違うとエラーになりますので注意してください。

なお、 INSERT 文の代わりに REPLACE 文を使うと、対象の項目がすでに存在するときは UPDATE 、そうでなければ INSERT の挙動となります。文法はまったく同じです。存在チェックを省略できるので便利ですよ。

DELETE : 項目の削除

最後は項目の削除です。 DELETE 文を使います。

DELETE FROM テーブル WHERE 条件

もはや説明することがないほど単純です(笑)。それでは、先ほど追加したばかりの項目を削除してみましょう。

DELETE FROM articles WHERE id = 1

これだけです。 WHERE 句の条件に複数の項目が該当すれば、それらのすべてが削除されます。 WHERE 句を忘れると全項目が削除されてしまうので注意してくださいね。

さあ、これで項目の取得・追加・更新・削除がすべてできるようになりました。もうかなり自由にデータ操作が行えるようになっていると思います。いろいろ試してみてください。

テーブルの作成に挑戦

最後にご紹介する SQL はテーブルの作成方法です。これを乗り越えれば、 Google Gears でデータベース操作を行う最低限の知識が身に付きます。もうひと頑張り。

CREATE TABLE : テーブルの新規作成

テーブルの作成は、カラム構成を指定しなければいけないのでちょっと複雑です。だいたい以下のような構文になります。

CREATE TABLE [IF NOT EXISTS] テーブル  (カラム11[, カラム22]...)

"IF NOT EXISTS" という指定はオプションで、もし同名のテーブルが存在した場合はなにもせず(エラーにせず)に終了します。通常は常に指定しても問題はないでしょう。 SQLite で有効な型は以下のとおりです(実際には他の指定も使えますが、このうちのいずれかとして解釈されます)。

型名 保持できるデータ
INTEGER整数(8bit 〜 64bit)
REAL 実数(64bit IEEE 754)
TEXT 文字列
BLOB バイナリデータ

それでは、試しに "name" という文字列型カラムと "point" という整数型カラムを保持するテーブル "test" を作ってみましょう。

CREATE TABLE IF NOT EXISTS test
  (name TEXT, point INTEGER)

実行後、画面左側のテーブルリストの下にある「Refresh」ボタンを押してみてください。以下のように作成したテーブルが表示されるはずです。

テーブルの追加

ついでなので、 name が「foo」、 point が「10」の項目を追加してみましょう。

INSERT INTO test (name, point) VALUES ('foo', 10)

その他、前述の SELECT, UPDATE, INSERT, DELETE の各 SQL 文を使って、いろいろ試してみてください。

DROP TABLE : テーブルの削除

テーブルの削除はとても簡単です。以下のように実行するだけです。

DROP TABLE [IF EXISTS] テーブル

"IF EXIST" を付けると指定したテーブルが存在しない場合でもエラーなりません。こちらも常につけておいて問題はないでしょう。例として、先ほど作成したテーブルを削除する SQL を掲載しておきます。

DROP TABLE IF EXISTS test

実際に実行して、テーブルが削除されるのを確認してみてください。実行後にテーブルリストの「Refresh」ボタンを押すのを忘れずに。

SQLAdmin を自分のサイトでホストする

以上のように、 SQLAdmin はとても便利なツールです。自分で Google Gears を使った Web アプリケーションを作り始めると、自分のサイトでも SQLAdmin を実行したくなることでしょう。もちろん可能です。具体的な方法は以下のとおりです。

  1. この ZIP ファイルをダウンロードする(SQLAdmin のページにもリンクはあるのですが、非常にわかりづらいので直リンクしています)。
  2. ZIP ファイルを適当な場所に展開。
  3. 展開してできたファイルをすべて自分のサイトにアップロード。
  4. Google Gears をインストールしたブラウザで、上でアップロードした "sqladmin.html" を表示する。

以上。簡単ですよね。 Google Gears アプリ開発の際は、ぜひ活用してください。

参考資料

本日は SQLAdmin for Google Gears を使って基本的な SQL 文をご紹介しました。まだ自由にデータベースを使いこなすというまではいきませんが、だいたいの感じは掴んでいただけたのではないでしょうか。残念なことに SQL に関する詳細な解説ページというのは(とくに日本語では)数少ないのですが、以下にいくつかご紹介しておきます。

その他にも関連情報を Wiki の SQL, SQLite のページに記載してありますので、ご参照ください。また、左の書籍も購入してみまして、けっこう良かったので併せてご紹介しておきます。内容は SQLite の概要、コマンドラインツールの使用方法、各言語用の SQLite ライブラリの使用方法、 SQLite で使える SQL のリファレンス、 SQLite Control Center, SQLite Database BrowserSQLite のデスクトップ GUI クライアントで、 Google Gears データベースにも使えます)の使用方法などで、それぞれよくまとまっていると思います。より深く理解したい方は、購入して損はないと思います。

以上、本日は SQLAdmin for Google Gears を使って Google Gears のデータベースを編集する方法をご紹介しました。実際に試していただければ、これまで SQL に馴染みがなかった方もだいたいの感触がわかっていただけるかと思います。次回からは、いよいよ Google Gears データベース API の使い方をご紹介していこうと思っていますので、ご期待ください!

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles