GASの実行を一時中断・止めて処理を遅延させる方法(sleepメソッド)

Google Apps Script(GAS)で時間のかかる処理を行うと、その処理が終わる前に次の処理が開始してしまう場合があります。

そこで、GASの処理を一時中断して、その後の処理を遅延させる方法について解説します。

GASでは実行に時間がかかる処理も

Google Apps Script(GAS)のコードでは、1行ごとの処理にかかる時間は基本的には少ないです。

というのも、GASには実行時間制限が設けられているからです。

無料のGoogleアカウントではGASの実行時間は6分以内に収める必要があります。

そのため、そこまで処理負荷が大きくない処理をGASで行うことが多いですが、中には実行時間がかかる処理もあります。

実行時間が長いと次の処理に移ることも

Google Apps Script(GAS)で実行時間の長い処理があると、コード実行に不具合をもたらすことがあります。

特定処理の実行時間が長すぎるため、次の処理に移ってしまうからです。

例えば、前段の処理を行い、その処理結果を用いて後段の処理につなげるGASスクリプトがあったとします。

しかし、前段処理の実行時間が長いため、その終わらず、後段処理が走ってしまい、エラーすることがあります。

GASのコード的に問題ないのに、想定どおりに処理が動かないケースでは、実行時間が長いことが原因であることも多いです。

GASを実行を一時中断・遅延させるsleepメソッド

Google Apps Scriptのスクリプトに実行時間がかかる処理が含まれている場合の対処方法が、「実行を一時中断・遅延させる」です。

処理に時間がかかるコードのあと、GASのスクリプトを一時中断させる処理を挟むことで、遅延させることができます。

そのためにGASに用意されているのがsleepメソッドです。

Utilities.sleep(ミリ秒)

引数に指定するのは秒ではなくミリ秒の数字を指定します。

そのため、sleepメソッドで処理を1秒中断したい場合はUtilities.sleep(1000)と書きます。

なお、引数で指定可能な最大数は300,000ミリ秒で、最大5分の処理遅延が可能です。

GASのsleepメソッドのサンプルコード

Google Apps Scriptで処理を一時中断させるsleepメソッドは以下のように記述します。

GASサンプルコードには、sleepメソッド以外の処理を全く記述していないため、本来1秒もかからずに終了します。

しかし、sleepメソッドの引数に5000ミリ秒=5秒を指定したことで、実行ログの実行開始と実行完了の時間差が5秒になっています。

このようにGASスクリプトでsleepメソッドを活用することで、任意の場所で処理を中断することが可能です。

フェッチやAPIリクエストでsleepが必要な場合も

Google Apps Script(GAS)でsleepメソッドを利用するシートとしては、WebページのフェッチやAPIにリクエストを行う場合です。

APIによる通信はレスポンスが返ってくるまでに時間がかかることがあります。

特にAIや画像処理などの負荷が大きい処理を行うAPIの場合、戻り値が返ってくるのが遅いです。

そんなケースでUtilities.sleepメソッドを実行することで、GASスクリプトの前段の処理が終わるのを待ってから、後段の処理に移ることができます。

まとめ・終わりに

今回、Google Apps Script(GAS)で処理を一時中断、遅延させるsleepメソッドを紹介しました。

Utilities.sleep(ミリ秒)という形で引数に指定した数字のミリ秒分、処理を遅らせることができます。

APIリクエストなどをGASで行う場合、一定時間待つことで正常に処理を継続させるためにsleepメソッドを活用できます。

APIを利用しているスクリプトで、GASコードは問題ないけれども、どうも想定どおりに動かない場合はsleepを活用して処理を遅らせてみましょう。