GASで毎分自動化
GAS実践の概要
Google Apps Script(GAS)は、Google Workspace のサービスを拡張するためのスクリプト言語です。スプレッドシートの自動化、メール送信、カレンダーイベントの管理など、日常業務を効率化するために広く利用されています。この記事では、特に「インストーラブルトリガー」を使った時間主導型の自動化に焦点を当て、実際のコード例とベストプラクティスを紹介します。
GAS のトリガーは、ユーザーが手動で実行する「手動トリガー」と、スクリプトが自動で実行される「インストーラブルトリガー」の2種類があります。後者は ScriptApp クラスを使って動的に作成でき、時間ベースやイベントベースで設定できます。
インストーラブルトリガーとは
インストーラブルトリガーは、スクリプトが実行されるタイミングを細かく制御できる機能です。ScriptApp.newTrigger() を呼び出すことで、任意の関数を指定し、timeBased や onEdit などのイベントに紐付けることができます。
例えば、毎日午前9時にレポートを送信するトリガーを作る場合、次のようにコードを書きます。
function createDailyTrigger() {
ScriptApp.newTrigger('sendReport')
.timeBased()
.atHour(9)
.everyDays(1)
.create();
}
このコードは、sendReport 関数を毎日午前9時に実行します。トリガーはプロジェクトごとに管理され、スクリプトエディタの「トリガー」メニューから確認・削除が可能です。
timeBasedトリガーの設定例
timeBased トリガーは、時間主導でスクリプトを実行するために最も頻繁に使われます。主なメソッドは everyMinutes、everyHours、everyDays、atHour などです。
以下は everyMinutes を使って5分ごとに実行する例です。
function createMinuteTrigger() {
ScriptApp.newTrigger('refreshData')
.timeBased()
.everyMinutes(5)
.create();
}
また、cron 風のスケジュールを設定したい場合は、ScriptApp の timeBased で atMinute と atHour を組み合わせることができます。例えば、毎日 14:30 に実行したい場合は次のようにします。
function createCronLikeTrigger() {
ScriptApp.newTrigger('dailyTask')
.timeBased()
.atHour(14)
.nearMinute(30)
.everyDays(1)
.create();
}
このように、GAS でも cron のような柔軟なスケジューリングが可能です。
cron風定期実行と自動化のベストプラクティス
定期実行を設計する際のポイントは、以下の3点です。
- トリガーの数を最小限に抑える。重複したトリガーは実行時間を浪費します。
- 実行時間が長い処理は、Batch API や UrlFetchApp.fetchAll で非同期化し、スクリプトの実行時間制限を超えないようにします。
- トリガーの失敗を検知するために、ログを Stackdriver Logging へ送るか、メール通知を設定します。
さらに、トリガーを動的に更新する場合は、既存のトリガーを取得して delete() で削除し、新しい設定を作成するパターンが一般的です。
function updateTrigger() {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(t) {
if (t.getHandlerFunction() === 'sendReport') {
ScriptApp.deleteTrigger(t);
}
});
createDailyTrigger();
}
このように、インストーラブルトリガーを活用すれば、GAS で高度な自動化を実現できます。ぜひプロジェクトに取り入れてみてください。
コメント
コメントを投稿