ScriptDbによるオブジェクトデータベース (1/6)
作成:2012-07-01 13:58
更新:2015-09-06 09:43
更新:2015-09-06 09:43
■ScriptDbの基本とオブジェクトの保存
※ScriptDbは、現在、Deprecated(非推奨)となっており、間もなく使えなくなる予定です。現時点では利用できますが、今後を考え、利用しないことを強く勧めます。データベース利用には、「Google Cloud SQL」を利用下さい。
(http://libro.tuyano.com/index3?id=1062003)
Google Apps Scriptは、本格的なWebアプリケーションサービスも作成できるように設計されています。が、この種のサービスを作成しようとすると、必ず引っかかってくるのが「データベース」の問題です。本格的なデータベースを必要とするのであれば、MySQLサーバーを立ててJDBC経由でアクセスする、といった手段はあります。が、そこまではできない、あるいはGoogle Apps Script標準の機能でシンプルに使えるデータベースがほしい、という要望は非常に多かったはずです。
スプレッドシートにデータを保存し、読みに行くという手もあります。がシートのセル数には限りがありますのでそれほど多量のデータは扱えません。それに、スプレッドシートはあくまでシートですから、値を指定のセルから読み込んだり変更したりするのもけっこう煩雑です。
実は、Google Apps Scriptにはもっとシンプルで非常にすぐれたデータベース機能があるのです。それは「ScriptDb」と呼ばれるものです。これは、JavaScriptのオブジェクトをそのまま保存し管理できる「オブジェクトデータベース」ともいえるものなのです。
ScriptDbは、オブジェクトをそのまま保存し、いつでも検索しとり出すことができます。といってもSQLデーアタベースではありません。簡単なクエリー指定機能を持っていますが、SQL言語ではありません。どちらかというと、HTML5のIndexedDbのような非SQLデータベースといえます。
●オブジェクトの保存
このScriptDbは以下のようにしてオブジェクトを取得し、利用します。
ただし、データベースとしてScriptDbを利用するのであれば、保存するオブジェクトの内容をよく考えておく必要があるでしょう。データベースとして的確にオブジェクトを検索するためには、保存するオブジェクトをすべて同じ形式のものにしておく必要があります。オブジェクトごとに、中にある値がばらばらではうまく検索できませんからね。
では、実際の利用例を挙げておきましょう。下のリスト欄のスクリプトは、実行すると名前・メールアドレス・電話番号・年齢を「personaldata」という種類のオブジェクトとして保存するサンプルです。実行すると、まずBrowser.inputBoxでそれぞれの値を訪ね、それらを一つの連想配列(すなわちオブジェクト)にまとめ、それをsaveします。
ここで注目して欲しいのは、最初にあるtype: "personaldata"という値です。このtypeというものにより、オブジェクトの種類を特定しています。これにより、「そのオブジェクトはどういう種類のものか」を指定しているのです。ここではpersonaldataという種類を指定しています。これは、要するにオブジェクトの名前のようなものと考えると良いでしょう。
(http://libro.tuyano.com/index3?id=1062003)
Google Apps Scriptは、本格的なWebアプリケーションサービスも作成できるように設計されています。が、この種のサービスを作成しようとすると、必ず引っかかってくるのが「データベース」の問題です。本格的なデータベースを必要とするのであれば、MySQLサーバーを立ててJDBC経由でアクセスする、といった手段はあります。が、そこまではできない、あるいはGoogle Apps Script標準の機能でシンプルに使えるデータベースがほしい、という要望は非常に多かったはずです。
スプレッドシートにデータを保存し、読みに行くという手もあります。がシートのセル数には限りがありますのでそれほど多量のデータは扱えません。それに、スプレッドシートはあくまでシートですから、値を指定のセルから読み込んだり変更したりするのもけっこう煩雑です。
実は、Google Apps Scriptにはもっとシンプルで非常にすぐれたデータベース機能があるのです。それは「ScriptDb」と呼ばれるものです。これは、JavaScriptのオブジェクトをそのまま保存し管理できる「オブジェクトデータベース」ともいえるものなのです。
ScriptDbは、オブジェクトをそのまま保存し、いつでも検索しとり出すことができます。といってもSQLデーアタベースではありません。簡単なクエリー指定機能を持っていますが、SQL言語ではありません。どちらかというと、HTML5のIndexedDbのような非SQLデータベースといえます。
●オブジェクトの保存
このScriptDbは以下のようにしてオブジェクトを取得し、利用します。
変数 = ScriptDb.getMyDb();こうして得られたオブジェクトは、ScriptDbInstanceというものになります。この中に、オブジェクトの管理に関する機能がまとめられています。――まずは、「オブジェクトの保存」からやってみましょう。これは、驚くほどに簡単です。
《ScriptDbInstance》.save( オブジェクト );たったこれだけです。これでオブジェクトが保存できます。他に説明することはなにもなし!
ただし、データベースとしてScriptDbを利用するのであれば、保存するオブジェクトの内容をよく考えておく必要があるでしょう。データベースとして的確にオブジェクトを検索するためには、保存するオブジェクトをすべて同じ形式のものにしておく必要があります。オブジェクトごとに、中にある値がばらばらではうまく検索できませんからね。
では、実際の利用例を挙げておきましょう。下のリスト欄のスクリプトは、実行すると名前・メールアドレス・電話番号・年齢を「personaldata」という種類のオブジェクトとして保存するサンプルです。実行すると、まずBrowser.inputBoxでそれぞれの値を訪ね、それらを一つの連想配列(すなわちオブジェクト)にまとめ、それをsaveします。
ここで注目して欲しいのは、最初にあるtype: "personaldata"という値です。このtypeというものにより、オブジェクトの種類を特定しています。これにより、「そのオブジェクトはどういう種類のものか」を指定しているのです。ここではpersonaldataという種類を指定しています。これは、要するにオブジェクトの名前のようなものと考えると良いでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
function addData(){ var name = Browser.inputBox("名前:"); var mail = Browser.inputBox("メールアドレス:"); var tel = Browser.inputBox("電話番号:"); var age = Browser.inputBox("年齢:"); var db = ScriptDb.getMyDb(); var obj = {type: "personaldata", name: name, mail: mail, tel:tel, age:age}; var stored = db.save(obj); }
※関連コンテンツ
「Google Apps Scriptプログラミング [中級編]」に戻る