Google Apps Scriptでタイムアウトを検知する

Google Apps Scriptの制限について

Gooogle Appsの各種サービスを利用する上で考えて置かなければならないのが利用制限である。下記のURLに詳細が記載されているとおり、利用時にはいろいろな制限がある。

Google Apps Script ダッシュボード

今回はこの中の実行時間6分の壁について考えてみようと思う。

そもそも実行制限を超えると何が起こるか?

答えは簡単「何も起こらない」である。処理の書き方にもよるけど急に止まる。ロールバック処理を入れようがない。途中でファイル出力とかしてたら書きっぱなしである。
そのためトリガーをセットしてバックグラウンドで実行している時、タイムアウトが発生した場合、なにもわからないのである。

こんなのいかがでしょうか?

5分の壁を超える方法は色々な人が教えてくれているようなので、本稿ではそもそもタイム・アウトしてしまった時の処理について考えてみた。

まぁ、簡単に言うとこれだけである。

  1. タイムアウト検知用の処理を作成
  2. メイン処理開始時に上記処理を10分後(値は任意)に起動するようにトリガーを作成
  3. メイン処理終了時に先のトリガーを削除

Class ScriptApp

サンプルコード

[javascript highlight=”18,22″]
/**
* タイムアウト通知処理
*/
function sendTimeout() {
// ここにタイムアウト時に通知を行う手段を記載する
// メールで通知やSlackに投稿なんぞいかがでしょう
}

/**
* メイン処理
*/
function main() {
// タイムアウト検知用トリガーをセット(10分後)
var triggerTimeout = ScriptApp.newTrigger(‘sendTimeout’).timeBased().after(10 * 60 * 1000).create();

// メインの処理を記載します

// タイムアウト検知用トリガーを削除
ScriptApp.deleteTrigger(triggerTimeout);
}
[/javascript]

注意

タイムアウトが発生した場合、検知用トリガーが残りっぱなしになるので、こればっかりは運用で削除するしかありませんな・・・