📘
GASのトリガーはプログラムからセットすると「時刻ぴったり」で実行できる
GASのトリガーはコードから作ると「時間ピッタリ」で動く
なんでこんなことするの?
Slack見てると、GAS経由で投稿されるWebhookが毎回ちょっとずつ時間ズレて届くんですよね。
GUIでトリガーを設定すると「◯時〜◯時の間」みたいな1時間幅しか選べなくて、秒単位のキッチリ指定ができないのが原因っぽい。
解決方法:トリガーをコードで作っちゃう
実は ScriptApp.newTrigger()
を使うと、コードからトリガーを作れて、「毎週日曜12:00ちょうど」 みたいな指定ができちゃいます。
投稿時間を揃えたいときはこっちのほうが便利。
サンプルコード
以下みたいに createWeeklyTrigger()
を作っておいて、GUIで「この関数を実行」って選べばOK。
毎週日曜12時に main()
が走るように設定されます。
/**
* 毎週日曜の12時に main() を実行するトリガーを作成
* これを手動実行するとトリガーが登録される
*/
function createWeeklyTrigger() {
// 既存トリガーを削除してから新規作成
deleteAllTriggers();
ScriptApp.newTrigger('main')
.timeBased()
.onWeekDay(ScriptApp.WeekDay.SUNDAY)
.atHour(12) // JSTの12時
.create();
console.log('毎週日曜12時のトリガーを設定しました');
}
/**
* 既存のトリガーをすべて削除
*/
function deleteAllTriggers() {
const triggers = ScriptApp.getProjectTriggers();
triggers.forEach(trigger => {
if (trigger.getHandlerFunction() === 'main') {
ScriptApp.deleteTrigger(trigger);
}
});
console.log(`${triggers.length}個のトリガーを削除しました`);
}
まとめ
- GUIで設定すると「1時間幅」でしか定期実行を指定できない
- プログラムから設定すると「時刻ぴったり」で実行可能
- 投稿時間を揃えたいSlack連携やレポート配信に便利ですぞ
Discussion