GASの変更時トリガーが実行頻度によっては実行されない問題について検証してみた

  • このエントリーをはてなブックマークに追加
  • LINEで送る

0.はじめに

GASの変更時トリガーってあるけど、
本当に全ての変更をキャッチしてくれてるの?

と疑問に思ったので検証してみました。

例えばGoogleフォーム回答が入力されるスプレッドシートに対して、
シート変更時トリガーを仕込んでおり複数から同時に回答があったとしたら・・・?
本当はそんなスクリプトは組まない方がいいわけですが、
そんな時どうなるのか気になる方はぜひご覧ください。

 

1.検証用のコードとトリガー

本当の限界頻度を知りたいので、ごくシンプルな負荷の低いコードを使いました。


function myFunction() {
  console.log("testやで");
  GmailApp.createDraft("test@test","testやで","testやわ");
}

トリガーはこちら。普通の変更時トリガーです。
変更時トリガー設定の画像
もちろんこのスクリプトはスプレッドシートにバインドしています。

 

2.高速で実行してみた

まず、適当に10回実行してみた結果がこちらです。
セルを10個変更したスプレッドシートの画像
6行の実行ログ
10回変更したのに実行ログは6行しかあらへん。どういうこっちゃ。
実行されてるけど、実行ログだけ出てないのか?と思い、Gmailの下書きを確認します。
6件だけのメール下書き
やっぱり6件しかない。という事で、6回しか実行されていないようです。
高速での変更時トリガーは実行が欠損する
という事が分かりました。
(1回だけでは試行回数不足のため複数回、別時期にも試しております。)

 

3.実行頻度を落として実行してみた

どれぐらいが敷居なのか判断したいため、
秒間1~3回程度に実行ペースを落としてみます。

10回成功 秒間1~2回
10回成功した画像

10回成功 秒間1~3回
10回成功した画像

9回成功 秒間1~2回
9回成功した画像

無暗に高速実行した時より成功率は上がりましたが、まだムラがあります。
(3回だけでは試行回数不足のため複数回、別時期にも試しております。)

 

4.秒間1回にしてみた

では秒間1回ではどうでしょうか。

秒間1回程度で10回成功
秒間1回程度の実行で10回成功している画像

秒間1回程度で10回成功その2
秒間1回程度の実行で10回成功している画像

秒間1回程度で10回成功その3
秒間1回程度の実行で10回成功している画像

概ね、1秒に1回程度の実行であれば安定して動きそうです。
私の過去の検証や経験則を合わせても、
1秒1回以下のペースで安定すると結論付けてよいのでは、と考えています。

 

5.さいごに

いかがでしたでしょうか。
変更時トリガーが安定しない、同時実行の際に不安、
といった場合にはぜひこの内容を思い出してみてください。

それにしても、皆さんに画像で伝わるように秒間1回で実行するとかって難しいですね…w
GASの限界に挑戦するシリーズ、個人的に面白いなと思っているので、
何か思いつけばまたやってみようと思います。
「これ試してみてほしい!」等あればお気軽にコメントくださいね。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

コメントを残す

*