ls -al

仮想通貨やプログラミングに関する事などをつらつらと書き綴ります

SpreadsheetをDBのように気軽に使うGAS向けライブラリ

以前こちらでGASからSpreadsheetをDB的に扱いやすくするメソッド群を公開しましたが、今回はそれを改修してきちんとライブラリとしたものを紹介します。

本来なら以前の記事に追記等の変更を加えて紹介しようと思ってましたが、思っていたよりも大幅に変更されたので、こちらで新規に紹介します。

追記 2018/04/15

版「4」にて、ライブラリとして利用した際にコンストラクタでコケてしまい動作できないという致命的なバグがあったので修正しました。

ライブラリ紹介

ライブラリの導入方法はわかりやすく解説されているサイトが山程あるので、ここでは取り扱いません。

背景など

以前の記事を参照してください。

特徴

  • Spreadsheetを意識しないで使える

    • Spreadsheetの存在を完全に隠匿した作りになっています。2次元配列なデータをどう扱うかなど考えないでORMを触っているような気軽さでSpreadsheetをDBのように扱うことが出来ます。
    • DB的に扱いたい上で装飾を適用したいというニーズに答えるために、内部で持っているSpreadsheetを取得できるインターフェースが用意されています
  • APIを多用しない

    • 最初の一度だけSpreadsheetからデータベースを取得した後はデータの変更などは全てGAS上で行われ、一々Spreadsheetにアクセスしない作りになっています。そのため、saveメソッドを呼ぶまでは変更は保存されない点には注意してください。

動作の詳細

本ライブラリは以下のような構造のシートに対して適用できます

  • シートの1行目にはカラム名が定義されている
  • idという名称のカラムが定義されている
  • 2行目以降には1行目のカラム名に対応しているデータが入力されている
  • 1行目A列からスタートしている
  • 余計な空白などがなくデータが連続している

他におまけとして、datetimeカラムが定義されている場合、生成時に生成された時間が自動で入力されます。

例として以下のようなテーブルが上の条件を満たします。

A B C
1 id datetime text
2 1 2018/04/08 23:14:53 bar
3 2 2018/04/10 17:04:12 foo

function example(){
  var url = "対象のスプレッドシートのURLを入力してください";
  var sheet_name = "シート名を入力してください";

  //インスタンス取得
  var dbManager = 識別名.createSpreadsheetsDBManager(url, sheet_name);

  //新しいレコードの作成
  var newRecord = dbManager.create();

  //IDが1のレコードの検索
  var record1 = dbManager.findById(1);

  //textカラムがbarのレコードの検索,古い順に上から一番目
  var record2 = dbManager.find("text","bar");

  //textカラムがbarのレコードの検索,古い順に上から三番目
  var record2 = dbManager.find("text","bar",3);

  //レコードの更新
  newRecord.text = "foo";
  record1.text = "bar";

  //変更の適用
  dbManager.update(newRecord);
  dbManager.update(record1);

  //スプレッドシートへの保存
  dbManager.save()
}