スキップしてメイン コンテンツに移動

GASで毎分自動化

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点です。

  1. トリガーの数を最小限に抑える。重複したトリガーは実行時間を浪費します。
  2. 実行時間が長い処理は、Batch API や UrlFetchApp.fetchAll で非同期化し、スクリプトの実行時間制限を超えないようにします。
  3. トリガーの失敗を検知するために、ログを Stackdriver Logging へ送るか、メール通知を設定します。

さらに、トリガーを動的に更新する場合は、既存のトリガーを取得して delete() で削除し、新しい設定を作成するパターンが一般的です。

function updateTrigger() {
  var triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(function(t) {
    if (t.getHandlerFunction() === 'sendReport') {
      ScriptApp.deleteTrigger(t);
    }
  });
  createDailyTrigger();
}

このように、インストーラブルトリガーを活用すれば、GAS で高度な自動化を実現できます。ぜひプロジェクトに取り入れてみてください。

この記事はAIによって作成されました。

コメント