GoogleSpreadsheetを使って簡易DBを作る

##はじめに
Unityなんかでゲーム制作をしていると、スコアランキングなんかを作りたい時があります。
ふつうはMySQLなんかのDBを使って書くといいと思います。しかしサーバーの維持費がかかったりします。そんな時は、Google Spreadsheetを使って節約しましょう

##Google スプレッドシート
最近は、オフィスソフトウェアもオンラインで動くものが増えてきて、Googleスプレッドシートも、いわゆる、ウェブ上で動作する表計算ソフトウェアです。
簡単にファイルを共有でき、Googleドライブなんかに保存されるので、個人でのファイル管理に割く手間を省いてくれます。

表計算ソフトということで、マクロ機能が付いています。
さらに、このマクロを、ウェブアプリケーションとして公開という機能があります。
この機能を使うと、GETとPOSTを受け取ることができます。

余談ですが、Google Formなんかもウェブアプリケーションの類でしょうか、最近使う人がとても増えてきましたね。自分で書かずとも、簡単にウェブフォームを作ることができるので、とても便利ですね。その結果をGoogleスプレッドシートで見れてとても良いですね。

##マクロ
適当にスプレッドシートを作成した後、ツール>スクリプトエディタと開きます。

ここで、Google Apps Script=マクロの言語を自由に記述できます。
このGoogle Apps Scriptとかいうやつは、だいたいのグーグルサービス共通で、様々なサービスのAPIが使えます。よい!無料部分でだいたいなんでもできます。めっちゃ便利
詳しくは解説しないので、ここらへんとか読んでください。

その中で、doPostとdoGetという関数名にすると、HTMLのPOSTとかGETとかを受け取れる。参考

スクリプトエディタに、次のように追加します

function doGet(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
sheet.getRange("A1").setValue('HelloWorld');
}

適当にデバッグボタンを押して実行します。(デバッグボタンの横にある関数一覧をdoGetにしておきましょう)初回実行の際は、なんか、スプレッドシートにアクセスの許可が必要です、なんたらかんたら~って出るので、適当に許可しましょう。

A1セルに、”HelloWorld”と表示されましたか?
でたら成功です。

まだまだこれでは普通ですね。スプレッドシートに戻ってA1セルを消しておきましょう。

##URLでアクセスできるようにする

メニューから、公開>ウェブアプリケーションとして導入を押します。
そしたら、なんか出るので、アプリケーションにアクセスできるユーザーを「全員(匿名も含む)」に変えて導入を押します。

でてきたURLをコピーして、別のタブで開いてみると……何も起きませんね。(一見では
でも、スプレッドシートに戻ってみると、”HelloWorld”とあるはずです。あら便利。

##パラメータを受け取って、結果を返してみる。

function doGet(e) {
var req = "Dance to Dance";
var response = "failed";
if(!!e && !!e.parameter && !!e.parameter.text) {
req = e.parameter.text;
}
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var ary = sheet.getRange("A1:A10").getValues();
for(var i = 0; i < ary.length; i++) {
if(ary[i][0] == "") {
sheet.getRange("A" + (i + 1)).setValue(req);
response = "success";
break;
}
}
return ContentService.createTextOutput(encodeURIComponent(response)).setMimeType(ContentService.MimeType.TEXT);
}

先ほどと同じように、URLも発行します。(保存しなおす度にURLを再発行する必要があります)

そのURLの最後に……

https://script.google.com/macros/(……中略……)/exec?text=yeah

GET送信のパラメータを付け加えてアクセスすると……
success, failedなんか出たりします。
ここで、スプレッドシートに戻ってみると……

はい、yeahというのがA1かA2セルにあるかと思います。
やばい、もうめっちゃDBじゃん。

あとは、リファレンスを読むなり、VBAができるならそれっぽい要領で上手くできると思います。

かといって、私は、このDBをゲームのスコア管理ぐらいにしか使っていませんが……!よいライフを