【GAS入門】onOpenトリガー完全攻略〜複数設定する方法はある?〜

GASのonOpenトリガーを使って特定の処理を自動化したいです
猫男
猫男
catman
catman
オッケー。catmanと一緒に学んでいこう

GASのonOpenトリガーとは?

GASのonOpenトリガーとは、

GoogleスプレッドシートやGoogleドキュメントを開いたときに自動で実行されるスクリプトだ。

  • ファイルを開く
  • 再度読み込み

というアクションが引き金となり、onOpen関数の内部の処理が実行されるんだ。

onOpenはシンプルトリガーだから、GASの「トリガー設定」を手動追加する必要もない。

「シンプルトリガー」:関数名を特定の名前にするだけで、自動的に発火するトリガーのこと

 

日常に例えるなら、ドアを開けたら上からタライが落ちてくる場面だ。

gas onopen

たまに、あるだろ?

このトリガーを使えば、ファイルを開いた際に自動的に初期設定をしたり、メニューを追加したりできるぞ。

 

onOpenトリガーの基本設定方法

まずは基本的なonOpenトリガーの設定を見てみよう。


function onOpen() {
  SpreadsheetApp.getActiveSpreadsheet().toast('こんにちは!');
}

function onOpen() {} を定義することで、スプレッドシートが開かれたときに実行。
toastメソッドで小さなポップアップ通知を表示。

 

このスクリプトをとあるスプレッドシートのコンテナバインド型で作成。

そして、そのスプレッドシートを開くか、リロードするかすると、次のように右下にポップ表示が出るはずだ。

gas onopen

 

onOpenトリガーが実行されない理由

あれ、でも、僕のonOpenトリガーはどうして動かないんだろう…
猫男
猫男
catman
catman
GASのonOpenトリガーが動かない理由はいくつかある。例えば、権限の設定やスクリプトの誤りが考えられる。確認してみよう。

 

  1. 権限の問題:スクリプトが適切な権限で実行されていないと、onOpenは動作しない。
  2. スクリプトのエラーチェック:JavaScriptの構文チェックを行い、エラーが無いか確認する。
  3. スプレッドシートの動作:開くスプレッドシートでトリガーが紐付いているか確認。

 

これらをチェックしても動かない?

そんなときはログを表示してデバッグさ。Logger.logでonOpenの処理がリロード時に実行されているか確認してみよう。

https://earthpg.school/gas-console-logger/

 

GASのonOpenは複数設定できる??

onOpenを複数設定したい場合にはどうしたらいいんですか?
猫男
猫男
catman
catman
onOpenトリガーは1つしか使えない。だが、その中で他の関数を呼び出して複数の処理を行わせる方法があるぞ。

function onOpen() {
  taskOne();
  taskTwo();
}

function taskOne() {
  Logger.log("タスク1実行中");
}

function taskTwo() {
  Logger.log("タスク2実行中");
}

複数の処理を実行したいときは、onOpen内で複数の関数を呼び出す設計にするのが基本だ。

 

GASのonOpenとonEditの違い

onOpenonEditの違いってなんですか?
猫男
猫男
catman
catman
onOpenOnEditはトリガーの発動条件が違う。onOpenはファイルが開かれたとき、OnEditはスプレッドシートが編集されたときに発動する。その違いを意識するといいぞ。
日常生活にたとえると?
猫男
猫男
catman
catman
onEditは、部屋の中でちょっとでも動いたらタライが落ちてくる場面だな

あっ、へ〜
猫男
猫男
catman
catman
この際、GASのonEditの使い方も復習しておこうぜ

 

練習問題

GASのonOpenトリガーを利用して「おかえりなさい」というメッセージをログに出力するスクリプトを書いてみよう。

 

 

解答・解説


function onOpen() {
  Logger.log("おかえりなさい");
}
なるほど、これでonOpenトリガーもしっかり理解できました!ありがとうございます、catman!
猫男
猫男
catman
catman
どういたしまして。引き続きGASを使ってスクリプトを自動化していこう。何か困ったことがあればまた呼んでくれ。