10分で出来る!Googleドライブでデータベースを使ってみた | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

10分で出来る!Googleドライブでデータベースを使ってみた

Googleドライブは無料で様々な機能を使用することができて非常に便利です。
機能の1つに『Fusion Tables』というデータベースを使用できるものがあります。
この機能では、基本的なデータベースの機能はもちろん、チャート描画・Googleマップ連携も可能です。
導入は驚くほど簡単で、10分あればできてしまいます。
今回は、Googleスプレッドとの連携をテーマに『Fusion Tables』を使ってみます。
商品のラインナップの管理を想定して、簡単なデータを操作してみましょう。

スポンサーリンク

データベースを作成する

早速データベースを作っていきましょう!
まずは『Fusion Tables』をアプリに追加します。
「新規」 > 「その他」 > 「アプリを追加」を押して、『Fusion Tables』を検索してアプリに追加します。
FusionTables作成
検索するのは以下のアプリです。
FusionTablesのアプリ
そうすると、アプリに「Google Fusion Tables」が追加されますので、それを押します。
FusionTables作成
すると以下の画面が現れます。
今回は空のテーブルを使いたいので「Create empty table」を選びます。
空テーブルの作成
もうデータベースが作成できました。
できたデータベースは以下のように空になっています。
空のデータベース

列の編集をしたい場合は、「Edit」 > 「Change Columns」で以下の画面で編集可能です。
列の編集を行う

今回は以下のデータを使っていきます。
IDは商品のユニークな番号、Nameは商品名、Priceは商品の値段です。
2つの商品だけ追加されている状態です。
サンプルデータ

Googleスクリプトエディタを設定する

次は、データベースを操作するスクリプト側の設定を行います。
お好きなスプレッドシートを開いて、「ツール」 > 「スクリプト エディタ」を開いて、プロジェクトに名前を付けましょう。
スクリプト作成
「リソース」 > 「Googleの拡張サービス」を開きます。
FusionTablesAPIの拡張サービスを有効にする
その後、画像下部の「Google API コンソール」のリンクから、FusionTablesのAPIを有効にします。
FusionTablesAPIを有効にする
有効にする
これで、スクリプト側の設定が完了しました。

データベースをスプレッドシートに表示する

データベースとスクリプトの準備が整いました。
では、データベースから商品ラインナップを取り出して、スプレッドシートに出力してみましょう。

以下のコードを、そのまま貼り付けます。
ただし、xxxxxxxxxxxのところには、FusionTablesの「docid=」以降のパラメータに置き換えてください。
※「#rows:id=1」部分は不要


var docid = "xxxxxxxxxxx";
function getDB() {
  // SQL文を作成
  var sql = "SELECT * FROM " + docid;
  // FusionTablesのAPIを使って、SQLを実行
  var result = FusionTables.Query.sqlGet(sql);
  // スプレッドシートを更新する
  updateSheet(result);
}
function updateSheet(result){
  if (!result) return;
  // 現在のアクティブなシートを取得
  var activeSheet = SpreadsheetApp.getActiveSheet();
  // 一旦シートのデータをクリアする
  activeSheet.clear();
  // テーブルの列名を表示する
  for(var columnIndex=0; columnIndex < result.columns.length; ++columnIndex){
    activeSheet.getRange(1,columnIndex + 1).setValue(result.columns[columnIndex]);
  }
  // テーブルのデータを表示する
  for( var rowIndex=0; rowIndex < result.rows.length; ++rowIndex){
    var row = result.rows[rowIndex];
    for( var columnIndex=0; columnIndex < row.length; ++columnIndex){
      activeSheet.getRange(rowIndex + 2, columnIndex + 1).setValue(row[columnIndex]);
    }
  }
}

貼り付けたら、getDB関数を実行してみましょう。
問題なければ、スプレッドシート側にDBが出力されます。
出力結果

ここまでで、問題なければ10分あれば十分できたかと思います。
もし上手く動いていなければデバッグしましょう!
ログ出力は「Logger.log(出力したい内容)」で可能です。

行の追加・変更・削除をやってみる

商品ラインナップをデータベースから取り出しましたが、次に新商品の追加や、商品の値段変更、商品の削除を行います。
先程のコードに、以下のコードも貼り付けてください。

function insertRow(){
  var sql = "INSERT INTO " + docid + " (ID, Name, Price) VALUES ('300', '商品3', 4000)";
  FusionTables.Query.sql(sql);
}
function updateRow(){
  var sql = "SELECT ROWID FROM " + docid + " WHERE ID = '300'";
  FusionTables.Query.sql(sql);
  var rowid = FusionTables.Query.sql(sql).rows[0];
  var sql = "UPDATE " + docid + " SET Price = 5000 WHERE ROWID = '" + rowid + "'";
  FusionTables.Query.sql(sql);
}
function deleteRow(){
  var sql = "DELETE FROM " + docid + " WHERE ID = '300'";
  FusionTables.Query.sql(sql);
}

insertRow関数は、IDが300、Nameが商品3、Priceが4000の商品を追加します。
updateRow関数は、ID300のデータのPriceを5000に変更、つまり商品の値段を変更しています。
FusionTableのupdateは少し特徴的で、ROWIDに対してクエリを実行する必要があるので気をつけましょう。
deleteRow関数は、ID300の行を削除、つまり商品を削除しています。

それぞれ実行後に、getDB関数を実行すると、スプレッドシートにデータが反映されるかと思います。

まとめ

今回は、Googleドライブの『Fusion Tables』を使ったデータベースと、Googleスプレッドシートを連携する方法を説明しました。
解説のため、スクリプトはなるべく簡単にしました。
SQL文をもっと作り込めば、「特定の列だけ出力」「特定条件の項目だけ抽出」「別のデータベースと連携」したりすることも可能です。
また、『Fusion Tables』では、Googleマップとの連携や、チャートの描画も可能ですので、ぜひ使っていただければと思います。


03-6441-3336

いますぐ無料で
お試しください。

SiTestの革新的な機能を、
1か月間無料でお試しいただけます。

お名前【必須】
メールアドレス【必須】
電話番号【必須】

利用規約はこちら