0.はじめに
GASの変更時トリガーってあるけど、
本当に全ての変更をキャッチしてくれてるの?
と疑問に思ったので検証してみました。
例えばGoogleフォーム回答が入力されるスプレッドシートに対して、
シート変更時トリガーを仕込んでおり複数から同時に回答があったとしたら・・・?
本当はそんなスクリプトは組まない方がいいわけですが、
そんな時どうなるのか気になる方はぜひご覧ください。
1.検証用のコードとトリガー
本当の限界頻度を知りたいので、ごくシンプルな負荷の低いコードを使いました。
function myFunction() {
console.log("testやで");
GmailApp.createDraft("test@test","testやで","testやわ");
}
トリガーはこちら。普通の変更時トリガーです。
もちろんこのスクリプトはスプレッドシートにバインドしています。
2.高速で実行してみた
まず、適当に10回実行してみた結果がこちらです。
10回変更したのに実行ログは6行しかあらへん。どういうこっちゃ。
実行されてるけど、実行ログだけ出てないのか?と思い、Gmailの下書きを確認します。
やっぱり6件しかない。という事で、6回しか実行されていないようです。
高速での変更時トリガーは実行が欠損する
という事が分かりました。
(1回だけでは試行回数不足のため複数回、別時期にも試しております。)
3.実行頻度を落として実行してみた
どれぐらいが敷居なのか判断したいため、
秒間1~3回程度に実行ペースを落としてみます。
10回成功 秒間1~2回
10回成功 秒間1~3回
9回成功 秒間1~2回
無暗に高速実行した時より成功率は上がりましたが、まだムラがあります。
(3回だけでは試行回数不足のため複数回、別時期にも試しております。)
4.秒間1回にしてみた
では秒間1回ではどうでしょうか。
秒間1回程度で10回成功
秒間1回程度で10回成功その2
秒間1回程度で10回成功その3
概ね、1秒に1回程度の実行であれば安定して動きそうです。
私の過去の検証や経験則を合わせても、
1秒1回以下のペースで安定すると結論付けてよいのでは、と考えています。
5.さいごに
いかがでしたでしょうか。
変更時トリガーが安定しない、同時実行の際に不安、
といった場合にはぜひこの内容を思い出してみてください。
それにしても、皆さんに画像で伝わるように秒間1回で実行するとかって難しいですね…w
GASの限界に挑戦するシリーズ、個人的に面白いなと思っているので、
何か思いつけばまたやってみようと思います。
「これ試してみてほしい!」等あればお気軽にコメントくださいね。