====== 04 トリガーでExceeded maximum execution time対応 ====== GASでは6分以上スクリプトを実行できない。 そこで6分を超えそうなら、トリガーへ渡してトリガーから実行を繰り返す事で6分を超えて実行可能です。 [[13_javascript:03_gas:03_properties_service]] をカウントに利用する。 ===== トリガー制限 ===== トリガー制限にもあるので注意 処理の自動化のために時間等でトリガーを設定することも多いかと思いますが、このトリガーにも制限があります。 ^対象^無料アカウント^Google Workspace^ |トリガーの総実行時間|90 分 / 日|6 時間 / 日| |トリガー数|20 / ユーザー / スクリプト|20 / ユーザー / スクリプト| ===== サンプルスクリプト ===== これで10秒スリープしながら、30回スプレッドシートへ1行づつ文字を挿入していく 30秒を超えるようなら、countへ行数を保存しつつトリガーへ設定して実行させる。 設定したトリガーは5秒後に実行される。 const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var scriptProperties = PropertiesService.getScriptProperties(); var MAX_RUNNING_TIME = 30000; //スクリプト実行時間(ミリ秒) 30秒 var REASONABLE_TIME_TO_WAIT = 5000; //トリガー実行までの時間 5秒後 function main(){ // トリガー制限にかからないようトリガーを削除 deletedTriggers(); // countを1にしておく scriptProperties.setProperty('count', 1); runProccess(); } function runProccess() { var count = scriptProperties.getProperty("count"); if(!count){ count = 1 } var startTime= (new Date()).getTime(); for(var i = Number(count); i <= 30; i++) { var currTime = (new Date()).getTime(); Logger.log('i '+i+' '+(currTime - startTime)); if(currTime - startTime >= MAX_RUNNING_TIME) { // 時間がなければトリガーセット setTrigger(currTime,i) break; }else{ var array = [['てすとメッセージ','実行行:' + i]]; sheet.getRange(i,1,1,2).setValues(array).setFontWeight("bold"); ss.toast(ii + "/30" + '実行中', '進行状況',0); Utilities.sleep(10000); // 時間があれば実行 if( i == 30){ sheet.getRange('A3').setValue('完了'); } } } } function setTrigger(time, triggerValue){ scriptProperties.setProperty('count', triggerValue); ScriptApp.newTrigger("runProccess") .timeBased() .at(new Date(time+REASONABLE_TIME_TO_WAIT)) .create(); Logger.log('トリガーセット完了'); ss.toast('続きの処理をトリガーで処理しています。', '進行状況', -1); } function deletedTriggers(){ var triggers = ScriptApp.getProjectTriggers(); Logger.log('トリガー数: ' + triggers.length); triggers.forEach(function(trigger){ // Logger.log(trigger.getHandlerFunction()); if(trigger.getHandlerFunction() == 'runProccess'){ ScriptApp.deleteTrigger(trigger) } }); } {{tag>GAS}}