イベントに反応してスクリプトを実行する決まった時間になったら実行されるスクリプトとか、フォームに入力されたら実行されるスクリプトを作るのにはどうしたらいいのだろう。そういう時のために、Google Apps スクリプトは、シンプルイベントハンドラーや、インストール可能イベントハンドラーという、時間やイベントでスクリプトが実行されるような関数を簡単に書く方法を搭載してる。 それぞれのシステムの詳細や違いを見る前に、イベントに使う用語を見てみよう。イベントとは一般的に起こった事柄と考えられてる。例を下に示すと
他の多くのコンピューター言語と同様に、Google Apps スクリプトではこれらのイベントは、イベントトリガーとか、単にトリガーとか呼ばれてる。そしてイベントで呼ばれるコードはイベントハンドラーとして知られている。常にではないがしばしば、イベントを表す引数がコードによってイベントハンドラーに送られる。この引数もイベントと呼ばれる。 シンプルイベントハンドラーシンプルイベントハンドラーはGoogle Apps スクリプト言語に組み込まれてる。イベントハンドラーを使うには、どんなタイプのイベントが関数を実行するのかわかるような特別な名前を関数に与える必要がある。以下の条件でシンプルイベントハンドラーを使用する。
シンプルイベントハンドラーはスプレッドシートの編集者のアクションによって実行され、その時の実行設定等はその編集者であるユーザーのものを使用する。もしボブがスプレッドシートを開いたなら、誰がそのスプレッドシートにスクリプトを組み込んだかに関わらず、 onOpen 関数はボブというユーザーの下で実行される。そのため、シンプルイベントハンドラーは以下のような制限がある。
イベントセキュリティの更なる情報は Understanding Permissions and Script Execution. onOpen()onOpen 関数はユーザーがスプレッドシートを開いた時自動的に実行される。しばしばスプレッドシートのメニューバーにカスタムメニューを加えるのに使われる。// onOpen関数はスプレッドシートが開かれる度に自動的に実行される onEdit(event)onEdit 関数はスプレッドシートのどこかのセルが編集されると自動的に実行される。単純な使用方法としては、セルの最終更新時間をコメントに残すというのがある。関数に引き渡される引数 e は1つだけプロパティを持っている。それは source でこれは今,編集中のスプレッドシートを指す。function onEdit(event) onInstall()onInstall 関数はスクリプトギャラリーからスクリプトをインストールした時に呼び出される。よくある使用方法はonOpen と同様にカスタムメニューの設定である。onOpen 関数は最初にスクリプトがインストールされた時は、すでにスプレッドシートが開かれている状態のため実行されない。インストールしてすぐに行いたいタスクのメニューが必要なとき、onInstall からonOpen を呼ぶことができる。例は次のように// onInstallからonOpenを呼ぶ インストール可能イベントハンドラーインストール可能イベントハンドラーはスクリプトエディタ内のトリガーメニューで選択する。ここからここではトリガーと呼ぶことにする。トリガーを使うのは以下のような場合:
インストール可能イベントハンドラーは、シンプルイベントハンドラーと似ているが、次のような違いもある。
トリガーがインストールしたユーザーのアイデンティティで動くのは、安全性の理由からである。あなたがインストールしたトリガーを、共同作業者が実行したとしても、あなたのアイデンティティでスクリプトは実行される。更なるこれに関する情報は、Understanding Permissions and Script Execution イベントハンドラーをインストールするのに、カレンダーやメールやその他のサービスの認証が求められるかもしれないが、それはスクリプトが何をするかによる。 時限トリガーの使用スクリプトを毎日、毎時間、もしくは毎週同じ日に実行したい時どうすればいいのだろうか?そういう時は以下のようにすればいい。 スクリプトをある時間、もしくは希望する時間に実行するには:
その他のインストール可能イベントハンドラーの使用スクリプトを実行できるトリガーは3つある:
あるアクションがなされたらスクリプトが実行されるには:
イベントはイベントハンドラーに引数 e として渡される。その引数 e に属性(アトリビュート)を付け加えて、トリガーがどう働くかや、どうスクリプトがトリガーされるのかといった情報を手に入れることができる。もし属性を使うなら、上のセクションに書いたとおり、トリガーメニューからトリガーをセットしないといけない。 ここに例として、フォームが送信された際に、ある個人に向けてスプレッドシートによって取り出した情報を元に、メールを送る関数を示す。 // フォームは二つのフィールドを持つものとする (name and age) この関数内で、引数 補足: この例では、e.values は配列になっていて、ユーザーからフォームによって送信された値を全て含んでいる。e.values[0]はフォームが送信されたタイムスタンプを返し、 トリガーによって利用可能属性(アトリビュート)は次のテーブルの様になる: 時間イベント
スプレッドシートopenイベント
スプレッドシート編集イベント
スプレッドシートフォーム送信イベント
イベントハンドラーのエラーイベントハンドラーが失敗しても、スクリプトエディタでスクリプトを実行した時のようにエラー表示を見ることができない。Google Appsスクリプトは、メールでイベントハンドラーが失敗したことを知らせる。殆どの場合、スクリプトが失敗した結果のエラーが送られてくる。メールには失敗したイベントハンドラーを削除したり編集するためのリンクも一緒に書かれている。 初期状態では、メールは深夜に一日一回送られ、それには失敗したスクリプトのそれぞれの箇所についての情報が書かれている。送られてくる時間は変更可能である。送られてくるアカウントや、頻度も同様に変更できる。失敗したらすぐに送られてくるように設定することもできる。 初期状態の変更をするには:
もしスクリプトをテストテストしている最中なら、すぐにエラーメッセージを見たいだろうけど、どうすればいいのだろう。それには、try-catchブロックでスクリプトを囲めばいい。下はエラーを捕まえてメールでエラーメッセージを送ることに特化したコードだ。 function myFunction(){ |