Google Apps Script(GAS) 開発でローカル環境で開発したり、単体テストしたり、デプロイ先(Dev/Prod)を切り替えたりする開発プロジェクトのテンプレ。
こんな事を思ったこと有りませんか?
- 皆が使ってるドキュメントやーシートで使われているGASをいきなり書き換えるのが怖い。Dev環境みたいなので動作確認したい
- ローカルの手慣れたエディタで開発したい
- ローカルでも単体テストがしたい
- Node的に良い感じにファイル分割して書きたい
こういうのを解消する一案です。
- src/*
- ソースコード
- src-test/*
- 単体テストコード
- src-mock/*
- GASのモックファイル(SpreadSheetAppとかの)
- オマケでリアルにHTTP通信を受け取るHTTPサーバーのモックも有るよ
- src-mock/Test*
- モックの単体テストコード
- Google Drive上のGASプロジェクトをローカルにDLしたり、逆にULしたりするのにはGoogle公式ツール、「clasp」を使っっています
- Node的にファイル分割されたファイルをGASでも動くように変換するには「gasify」を使っています
- 単体テストには「GasT」を使っています
$ brew install node
$ npm install -g browserify
$ npm install -g @google/clasp
$ npm install
よしなにググって clasp login までやっておくこと。
$ cp clasp_dev.json.sample clasp_dev.json
$ cp clasp_prod.json.sample clasp_prod.json
各 clasp_xxx.json の scriptId に開発用や本番用に使う Google Apps Script プロジェクトのプロジェクトIDを記載しておく。
既存のコードをベースに開発をするときは既存のコードをまずDL
$ ./build.sh -s [-t prod]
↓Google Apps Scriptでの実行対象の関数一覧に表示させるには main.js の中で、こんな感じで global スコープに登録しておく。
global.callApi = function (sheetId, name) {
var storage = new SpreadSheetDataStorage(sheetId);
//storage.getSheetByName(name);
}
Browserify&gasify します。
$ ./build.sh -b
$ ./build.sh -b -t prod
$ ./build.sh -b -d
$ ./build.sh -b -d -t prod
- テスト実行
$ node -e "require('./src-test/MockTestRunner'); gastTestRunner();"
- ビルド&デプロイ
$ ./build.sh -b -d -e ./src-test/RealTestRunner.js
- GASのテスト用プロジェクトを開いて、「gastTestRunner」関数を実行すると単体テストが実行できる。実行結果はログに出力される。
$ node -e "require('./src-mock/TestRunner'); gastTestRunner();"