https://github.com/fossamagna/gasworker
GASWorker is a library for the script that requires a long run in the Google Apps Script
https://github.com/fossamagna/gasworker
google-apps-script
Last synced: 4 months ago
JSON representation
GASWorker is a library for the script that requires a long run in the Google Apps Script
- Host: GitHub
- URL: https://github.com/fossamagna/gasworker
- Owner: fossamagna
- License: mit
- Created: 2015-02-18T02:28:47.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T14:27:04.000Z (over 2 years ago)
- Last Synced: 2025-10-21T10:35:51.358Z (8 months ago)
- Topics: google-apps-script
- Language: JavaScript
- Homepage:
- Size: 23.4 KB
- Stars: 5
- Watchers: 0
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# GASWorker [![NPM version][npm-image]][npm-url]
GASWorker は Google Apps Script で長時間の実行を必要とするスクリプトのためのライブラリです。
*Read this in other languages: [English](README.md), [日本語](README.ja.md).*
## Description
Google Apps Script はスクリプトの最大実行時間6分の [制限](https://developers.google.com/apps-script/guides/services/quotas#current_limitations) があります。
GASWorker はこの制限を超えて長時間に渡ってスクリプトを実行する場合に、便利な機能を提供します。
GASWorker は分割された長時間の処理を [時間ベースのトリガー](https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers) の時間制限内に収まるように呼び出すことで、長時間に渡るスクリプトの実行を**擬似的**に実現します。
長時間に渡って実行するスクリプトの処理を分割するのは GASWorker の利用者が行います。
GASWorker その分割された処理を時間ベースのトリガーを利用して呼び出します。
## Usage
### Initialize
```javascript
var gwConfig = {
callbackTarget: this,
doTask: function(token, userContext) {
var cell = userContext.sheet.getRange(token + 1, 1);
cell.setValue("doTask:" + new Date().toLocaleString() + "\n" + "token:" + token);
SpreadsheetApp.flush();
Utilities.sleep(10 * 1000);
token++;
return token < 30 ? token : null;
},
getProperties: function() {
return PropertiesService.getScriptProperties();
},
getLock: function() {
return LockService.getScriptLock();
}
};
GASWorker.setup(gwConfig);
```
* 最初に`GASWorker.setup()` 関数を呼び出して初期化を行います。
引数には設定オブジェクトを指定します。設定オブジェクトについては [Define configuration object](#configObject) を参照してください。
* `getLock` 関数はGASWorkerにアプリケーションスクリプトの [Lock](https://developers.google.com/apps-script/reference/lock/lock) オブジェクトを提供する必要があります。
* `getProperties` 関数はGASWorkerにアプリケーションスクリプトの [Properites](https://developers.google.com/apps-script/reference/properties/) オブジェクトを提供する必要があります。
### Define configuration object
設定オブジェクトには `GASWorker` からコールバックされる関数や
`GASWorker` が参照する値を設定します。
#### Define doTask function
```javascript
doTask: function(token, userContext) {
Logger.log("doWork:" + new Date().toLocaleString() + "\n" + "token:" + token);
Utilities.sleep(10 * 1000);
token++;
return token < 30 ? token : null;
}
```
`doTask` には分割した処理を定義します。
`doTask` は時間ベースのトリガーから呼び出されます。
`doTask` の戻り値は、 `doTask` が次に呼び出される時の `token` 引数になります。
`null`を返すと、 `doTask` は呼び出されなくなり、処理が終了します。
引数 `token` は 最初は `GASWorker.execute()` の引数が渡されます。
その後は、直前に呼び出された `doTask` の戻り値が渡されます。
引数 `userContext` は任意の値を追加・変更・削除できるオブジェクトです。
`userContext` オブジェクトの寿命は Google Apps Script
プロセスを同じです。
注意:`GASWorker.doTask`は6分以内に終了するようにしてください。
#### Define beforeTasks function
```javascript
beforeTasks: function(token, userContext) {
Logger.log("Hook before trigger start.");
}
```
`beforeTasks` 関数の定義はオプションです。
`beforeTasks` 関数を使ってタスクの開始前のタイミングをフックできます。
#### Define afterTasks function
```javascript
afterTasks: function(token, userContext) {
Logger.log("Hook before trigger end.");
}
```
`afterTasks` 関数の定義はオプションです。
`afterTasks` 関数を使ってタスクの終了前のタイミングをフックできます。
#### Define done function
```javascript
done: function() {
Logger.log("done() : cancelled=" + GASWorker.isCancelled());
}
```
`GASWorker.execute`で開始した処理が終了すると`done`が呼び出されます。
`done`の定義は任意です。定義しない場合は何もしません。
### Start Task
```javascript
function start() {
Logger.log("execute() : " + GASWorker.execute(0));
}
```
`GASWorker.execute` 関数を呼び出すと時間ベースのトリガーをインストールします。
インストールしたトリガーから`doTask`関数が呼び出されます。
### Cancel
```javascript
function cancel() {
GASWorker.cancel();
}
```
`GASWorker.execute`で開始した処理を途中で終了する場合、
`GASWorker.cancel()`関数を呼び出します。
## Install
### npmパッケージとして使う
```sh
$ npm install gas-worker --save
```
[Browserify](http://browserify.org)、 [gasify](https://www.npmjs.com/package/gasify) と一緒に使うことをお勧めします。
### ライブラリとして使う
Google Apps Script の[ライブラリ](https://developers.google.com/apps-script/guide_libraries)として使用できます。
* Project Key : MgArHDn4Cqyu5Dem4eLAklPFqzDO4jqHr
## Licence
[MIT](LICENCE.txt)
## Author
[fossamagna](https://github.com/fossamagna)
[npm-image]: https://badge.fury.io/js/gasworker.svg
[npm-url]: https://npmjs.org/package/gasworker