libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

Script Serviceによるスクリプトの自動制御 (4/4)

作成:2012-07-12 09:42
更新:2012-07-12 09:42

■新規トリガーを作成する

新たにスクリプトの設定を作成するための処理について説明していきましょう。Script Serviceでは「トリガー」を作成し追加することができます。

●TriggerBuilderオブジェクトを作成する
変数 = ScriptApp.newTrigger( 関数名 );
これで変数にTriggerオブジェクトが設定されます。newTriggerの引数には、トリガーとして割り当てる関数名を指定します。返り値は、実はTriggerではありません。トリガーを生成するための「TriggerBuilder」というオブジェクトになります。これでトリガーの諸設定をしてから、最後にTriggerを生成します。

Triggerオブジェクトを作成したら、これに必要な設定をしていきます。まず最初に行うべきは、「トリガーの種類の設定」でしょう。

●各種トリガーを設定する
変数 = 《Trigger》.timeBased();
変数 = 《Trigger》.forSpreadSheet( [SpreadSheet] );
変数 = 《Trigger》.forSpreadSheet( [SpreadSheet ID] );
timeBasedは「ClockTriggerBuilder」、forSpreadSheetは「SpreadSheetTriggerBuilder」というオブジェクトをそれぞれ生成し返します。これらそれぞれのオブジェクト内にあるメソッドを更に呼び出してトリガーの設定を行います。

●ClockTriggerBuilderの主なメソッド
変数 = 《ClockTriggerBuilder》.nearMinute( 分 );
変数 = 《ClockTriggerBuilder》.atHour( 時 );
変数 = 《ClockTriggerBuilder》.everyMinutes();
変数 = 《ClockTriggerBuilder》.everyHours();
変数 = 《ClockTriggerBuilder》.everyDays();
変数 = 《ClockTriggerBuilder》.everyWeeks();
変数 = 《ClockTriggerBuilder》.everyMonths();
変数 = 《ClockTriggerBuilder》.onMonthDay( 日数 );
変数 = 《ClockTriggerBuilder》.atDate( 年 , 月 , 日 );
これらは、それぞれ「各秒ごと」「各時間ごと」「各週ごと」「各月ごと」に実行するためのClockTriggerBuilderを取得します。月を示すものが2つありますが、everyMonthsは毎月実行するもので、onMonthDayは「毎月○○日に実行」といった形で実行します。また、atDateは年月日を指定して、その日に実行させます。nearMinuteは、「だいたい」指定した分ごとに呼び出します。「だいたい」というのは、7~8分ぐらいの誤差はありますよ、ということです。

これらのメソッドは、すべてClockTriggerBuilderオブジェクト自身を返すため、メソッドチェーンを使って連続して記述することが可能です。

●SpreadSheetTriggerBuilderの主なメソッド
変数 = 《SpreadSheetTriggerBuilder》.onOpen();
変数 = 《SpreadSheetTriggerBuilder》.onEdit();
変数 = 《SpreadSheetTriggerBuilder》.onFormSubmit();
SpreadSheetTriggerBuilderのメソッドは比較的簡単です。onOpenonEditonFormSubmitのそれぞれのイベントで実行するよう設定するメソッドが用意されているだけです。いずれも引数はなく、呼び出すだけで指定のイベントで実行するように設定されます。


――これらのメソッドを使って、TriggerBuilderの諸設定が完了したら、最後に「create」メソッドを使ってTriggerを作成します。

●Triggerの生成
変数 = 《ClockTriggerBuilder》.create();
変数 = 《SpreadSheetTriggerBuilder》.create();
返り値にはTriggerオブジェクトが渡されますが、Triggerを生成した段階でスクリプトにトリガーは設定されますので、返り値のTriggerは不要であれば受け取る必要はありません。作成されたトリガーの内容を確認するような場合にのみ取得すればよいでしょう。


下に簡単なサンプルを作成しておきます。実行するとスプレッドシート側に関数名を尋ねるダイアログが現れます。ここで名前を入力すると、その関数を毎日定期的に実行するようにトリガー設定します。

――こんな具合に、スクリプトを使ってトリガーの作成ができると、必要に応じて処理の定期実行を設定するなど、いろいろな使い方ができそうですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function makeTrigger(){
  var fname = Browser.inputBox("関数名:");
  var trigger = ScriptApp.newTrigger(fname);
  trigger.timeBased().everyDays(1).create();
}
※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る