スクリプト機能を使うことで、本来mBaaSでは提供されていない機能を呼び出せるようになります。言語もNode.jsやRubyが使えるので、サーバサイド開発のようにmBaaSの機能を拡張できます。
そんなスクリプトを使ってデータの自動更新などを行っているケースは多いですが、サーバサイドの処理になるのでエラーが出ていても分かりづらいという問題があります。そこで今回はGoogle Apps Scriptを使ってスクリプトを自動テストしてみたいと思います。
Googleスプレッドシートについて
Googleスプレッドシートではスクリプトを列挙し、さらに設定するクエリー、ヘッダー、ボディをそれぞれ指定します。そして最後に期待するレスポンスを書いておきます。
Google Apps Scriptについて
Google Apps Scriptでの実装です。まずスプレッドシートのオブジェクトを取得します。
const ss = SpreadsheetApp.getActiveSpreadsheet(); const sh = ss.getSheetByName('testResult');
次にmBaaSを初期化します。ライブラリのIDは 1Z8Lezd0OS6qm9W0EVQxBGx1gztqD14kXPfQxycr_rc2atOfKujiWZe7I
になります。
const applicationKey = 'b6f...ee6'; const clientKey = '955...202'; const ncmb = NCMB.init(applicationKey, clientKey);
次にスプレッドシートの上から順番に読み込んでいきます。
const lastRow = sh.getLastRow(); let lastColumn = sh.getLastColumn() + 1; sh.getRange(1, lastColumn).setValue(new Date); for (let row = 2; row <= lastRow; row++) { const values = sh.getRange(row, 1, row, 6).getValues()[0]; const script = values[0]; const method = values[1]; const query = values[2] !== "" ? JSON.parse(values[2]) : {}; const headers = values[3] !== "" ? JSON.parse(values[3]) : {}; const body = values[4] !== "" ? JSON.parse(values[4]) : {}; const success = values[5]; // 処理が続きます }
必要な情報を得たら、スクリプトを実行します。そして結果を期待したレスポンスと比較して、成否を判断します。結果はスプレッドシートに記録されていきます。
const response = ncmb .Script() .set(headers) .query(query) .data(body) .exec(method, script); if (success === JSON.stringify(response)) { sh.getRange(row, lastColumn).setValue('成功'); } else { sh.getRange(row, lastColumn).setValue('失敗'); }
トリガーを設定する
完了したら、トリガーを設定します。今回の場合、1日1回実行されるのを想定しています。
注意点
今回のレスポンスは固定値で返ってくるのを想定しています。レスポンスが変化する場合には、入っていて欲しいJSONキーを指定して成否を判断するなど、カスタマイズしてみてください。失敗時にはスプレッドシートに記録するだけでなく、メールやプッシュ通知、またはSlackへの通知を活用してもよさそうです。
コードについて
コード全体は次のようになります。実装時の参考にしてください。
function scriptTest() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sh = ss.getSheetByName('testResult'); const applicationKey = 'b6f...ee6'; const clientKey = '955...202'; const ncmb = NCMB.init(applicationKey, clientKey); const lastRow = sh.getLastRow(); let lastColumn = sh.getLastColumn() + 1; sh.getRange(1, lastColumn).setValue(new Date); for (let row = 2; row <= lastRow; row++) { const values = sh.getRange(row, 1, row, 6).getValues()[0]; const script = values[0]; const method = values[1]; const query = values[2] !== "" ? JSON.parse(values[2]) : {}; const headers = values[3] !== "" ? JSON.parse(values[3]) : {}; const body = values[4] !== "" ? JSON.parse(values[4]) : {}; const success = values[5]; const response = ncmb .Script() .set(headers) .query(query) .data(body) .exec(method, script); if (success === JSON.stringify(response)) { sh.getRange(row, lastColumn).setValue('成功'); } else { sh.getRange(row, lastColumn).setValue('失敗'); } } }
まとめ
mBaaSではタイマー機能がないので、Google Apps Scriptのトリガーを使うのが一番手軽な方法になるかと思います。テスト実行した結果も蓄積できれば、スクリプトが正常に動いているかどうかもすぐに分かるでしょう。