SpreadSheetSQL
========================================
現在既にこのライブラリはメンテナンスしていません。
Apache License 2.0で公開しているため、そのライセンスの範囲内で利用してください。
========================================
GoogleAppsScript で GoogleSpreadSheets をDBとして扱う際に
取得、変更、削除に手間がかかっていたので、SQLっぽく記述できるライブラリを作りました。
Github: https://github.com/roana0229/spreadsheets-sql
Document: https://script.google.com/macros/library/d/17p1ghyOkbWOhdE4bdBFhOXL079I-yt5xd0LAi00Zs5N-bUzpQtN7iT1a/6
インストール方法
ProjectID: MAoZrMsylZMiNUMljU4QtRHEMpGMKinCk
ScriptID: 17p1ghyOkbWOhdE4bdBFhOXL079I-yt5xd0LAi00Zs5N-bUzpQtN7iT1a
旧エディタ: GoogleAppsScript上でリソース > ライブラリ > ProjectIDを入力 > 選択 > 最新バージョンを選択
新エディタ: ライブラリ > ScriptIDを入力 > 選択 > 最新バージョンを選択
できること
普段見るDBのViewのように1行目にカラム名を記述し、そのカラム名に対応する形でSQLを叩くことができます。
コード例
インスタンスの生成
var id = 'SpreadSheets ID';
var name = 'SpreadSheets SheetName';
SpreadSheetsSQL.open(id, name)
行の取得
SpreadSheetsSQL.open(id, name).select(['name', 'age', 'married', 'company']).result();
クエリ結果 (json array)
[{
name: 'Gail',
age: 20,
married: true,
company: 'Google'
},{
name: 'Plato',
age: 18,
married: false,
company: 'Yahoo'
}]
オプション(filter,orderBy)
SpreadSheetsSQL.open(id, name).select(xxx).filter('age < 20').result();
SpreadSheetsSQL.open(id, name).select(xxx).orderBy(['name', 'age']).result();
SpreadSheetsSQL.open(id, name).select(xxx).filter(xxx).orderBy(xxx).result();
行の追加
SpreadSheetsSQL.open(id, name).insertRows([
{name: 'Colt', age: 30, married: false, company: 'Microsoft'},
{name: 'Smith', age: 24, married: true, company: 'Adobe'}
]);
行の更新
SpreadSheetsSQL.open(id, name).updateRows({
company: 'Adobe'
}, 'name = Colt');
行の削除
SpreadSheetsSQL.open(id, name).deleteRows('name = Colt AND company = Adobe');
主なメソッド
- open(): シートの取得
- select(): 取得するカラム名の選択
- filter(): 取得するデータのフィルタリング
- orderBy(): 取得するデータのソート
- result(): クエリ結果の取得
- insertRows(): データの追加
- updateRows(): データの変更
- deleteRows(): データの削除
フィルタリングに利用可能な記号
Symbol | Example |
---|---|
= | age = 20 |
< | age < 20 |
<= | age <= 20 |
> | age > 20 |
>= | age >= 20 |
IN | company IN Apple,Google |
OR | company = Apple OR company = Google |
AND | company = Apple AND age > 20 |
備考
SlackのBotを作成する際にGoogleAppsScriptを利用して、GoogleSpreadSheetsをDBとして扱っています。
Qiitaのfeedの同じ投稿の被りや記事更新による連続投稿を対処するために
SpreadSheetsに溜め込み一定時間毎に投稿させるようにしています。
ただ、生のSpreadSheetsをDBとして扱うのはコードが分かり辛くなるため
一度、FusionTablesを利用してみたのですが制限が厳しすぎて
じゃあ、SpreadSheetでSQLを叩ける用にしたらいいじゃないかと思い作成しました。
このライブラリを使えば、SpreadSheetsをDBとして扱う際の手間がかなり楽になると思います!
機能追加、バグのissueやプルリクはいつでも歓迎しています。
良いGoogleAppsScriptライフを!