あなたの知らないGASのタイムアウトエラー(6分の壁)を回避する裏技

GASのタイムアウトエラー(6分の壁)を回避する裏技

GASの処理の実行時間は最大6分まで(有料プランは30分まで)で、それを越えるとタイムアウトエラーになってしまうというのが一般です。一般的に、6分の壁30分の壁と言われていますが、解決方法があります!

テストで動かしてみよう!

まず、スプレッドシートを新しく作成し、シート名は「test」にしてください。

シート「test」

シート名「test」

次に、拡張機能から「AppsScript」を選択し、下記のスクリプトを全て貼り付けて実行ください。

拡張機能からAppsScript

拡張機能からAppsScript

// 1000回ループさせるテスト
function testLoop300() {
  const startTime = new Date(); // ①実行開始時点の日時
  const SS = SpreadsheetApp.getActiveSpreadsheet();
  const SHEET_TEST = SS.getSheetByName('test');
  let startIndex = Number(PropertiesService.getScriptProperties().getProperty('nextIndex'));
  if (!startIndex) startIndex = 1; // もしstartIndexがnullの場合は1を代入
  for(let index = startIndex; index <= 300; index++){
    const currentTime = new Date(); // ②ループx周目時点の日時
    const seconds = (currentTime - startTime)/1000; // 経過秒数を計算(①と②の差分)
    if(seconds > 100){
      // 300秒経過したら、スクリプトプロパティを設定し、トリガーをセットして、returnする
      PropertiesService.getScriptProperties().setProperty('nextIndex', index);
      setTrigger();
      return;
    }
    SHEET_TEST.getRange(index+1, 1).setValue(index);   // A列にindexを入力
    SHEET_TEST.getRange(index+1, 2).setValue(seconds); // B列に経過秒数を入力
    SpreadsheetApp.flush();
    Utilities.sleep(1000);  // 1秒スリープさせる(1秒 = 1000ミリ秒)
  }
  // 300周し終えたらトリガーを削除
  const triggers = ScriptApp.getProjectTriggers();
  for(const trigger of triggers){
    if(trigger.getHandlerFunction() == 'testLoop300'){
      ScriptApp.deleteTrigger(trigger);
    }
  }
  // 1000周し終えたらスクリプトプロパティを削除
  PropertiesService.getScriptProperties().deleteProperty('nextIndex');  
}

function setTrigger() {
  const triggers = ScriptApp.getProjectTriggers();
  // プロジェクト内のセットされているトリガーを一つずつチェック
  for(const trigger of triggers){
    // もし、'testLoop1000'という名前のトリガーがあったら、そのトリガーを削除
    if(trigger.getHandlerFunction() == 'testLoop300'){
      ScriptApp.deleteTrigger(trigger);
    }
  }
  // 1分後にトリガーをセット(1分 = 60秒 = 1秒*60 = 1000ミリ秒 * 60)
  ScriptApp.newTrigger('testLoop300').timeBased().after(1000 * 60).create();
}

自動的にスプレッドシートに記述していき、300行到達するまで半永久的に実行し続けているのがわかると思います!

A列が300に到達するまで半永久的に更新

A列が300に到達するまで半永久的に更新

ぜひご活用ください。

「ChatGPT API × LINE」Udemy講座を販売中

OpenAI社のAPIを使ったLINEチャットボットの作り方のUdemy講座を公開中!

まだChatGPTのAPIを使って生成AIアプリ開発をしたことがない方はもちろん、非エンジニアの方にも分かりやすくプログラミングの基礎から丁寧に2時間半かけて解説しています。是非Udemy講座も併せてチェックしてご受講いただけると幸いです!