GASで他人が登録したトリガーを削除する方法(事前条件あり)

Google Apps Script(GAS)のトリガーは登録したユーザーに紐づいて実行されます。

GASスクリプトを複数人で管理していると、他のユーザーが登録したトリガーを削除したいケースがあります。

しかし、トリガー設定画面では他人のトリガー登録を削除できません。

そこで他人が登録したGASのトリガーを削除する方法を解説します。

※紹介するトリガー削除方法には事前の権限許可が必要なため、未設定の場合はトリガー削除できません。

GASはトリガー実行が可能

Google Apps Script(GAS)にはトリガー登録機能が用意されています。

登録したトリガー条件に従い、GASで書いたコードの関数を自動実行できる機能です。

例えば、1時間ごとに実行するスケジュール実行や、スプレッドシートが編集されたタイミングや、Googleフォームでフォーム入力が完了したタイミングでのトリガー実行があります。

トリガー登録によってGASの処理を手動で実行せずに実行したいタイミングで実行できるのはGASの大きなメリットの1つです。

他ユーザー登録トリガーは閲覧・削除不可

Google Apps Script(GAS)のトリガーには「トリガー設定を編集・削除できるのは登録ユーザーのみ」という仕様があります。

そのため、他のユーザーが登録したトリガーを削除することは通常できません。

自分で登録したトリガーは設定メニューが表示されます。

トリガーにマウスカーソルをあわせると、編集の鉛筆アイコンや「︙」から「トリガーを削除」が選択可能です。

しかし、他のユーザーのトリガーでは実行数などは確認できても、編集アイコンや削除が表示されません。

編集アイコンを選択しないと、トリガー設定が確認できないため、実行履歴から設定内容を推測する必要があります。

これはスクリプトのオーナーユーザーでも関係ありません。

自分が作成してオーナー権限をもつスクリプトを他のユーザーに共有し、他のユーザーが登録したトリガーは編集・削除ができない仕様です。

そのため、GASのトリガー設定から他人のトリガーを削除することは不可能です。

組織・グループで他人のトリガーを削除したいケースも

ただ、組織やグループでGoogle Apps Script(GAS)を運用していると他人のトリガーを削除したいケースがあります。

例えば人事異動や担当変更があった場合に、担当者が登録していたトリガーは削除しなければなりません。

担当ではなくなったユーザーが異動後もGASにアクセスでき、トリガー実行しているのは権限管理において不適切です。

それゆえに異動のタイミングで登録しているトリガーを削除し、後任の担当者のアカウントでトリガー設定し直す必要があります。

ただ、このトリガー削除は面倒な作業なため、忘れがちです。

すべてのトリガーを削除・再登録できておらず、後々になって他のユーザーが登録したトリガーが実行されていることに気づきます。

異動であれば連絡してトリガーの削除を依頼できますが、退職してしまった場合はトリガー削除が難しいです。

GASによる効率化に多く取り組んでいる組織やグループほど、この問題に直面します。

他人が登録したGASのトリガーを削除する方法

Google Apps Script(GAS)のトリガーは登録したユーザーしか編集・削除できず、他のユーザーのトリガーは削除できないと前述しました。

しかし、ある方法によって他のユーザーが登録しているGASのトリガーを削除することができます。

※(注意)この方法は後述する注意点の条件を満たした場合のみ、他人のトリガー削除が可能です。

他人が登録したトリガーを削除する方法は「トリガー登録しているGASの関数の中身を書き換えること」です。

例えば、下記のようなGASプロジェクトがあったとします。

上記のGASプロジェクトを他のユーザーと共有して、他のユーザーが「testTrigger」関数でトリガー登録していたとします。

その場合にtestTriggerの関数の中身を下記のように書き換えます。

function testTrigger() {
  //GASプロジェクトに設定したトリガーをすべて取得
  const triggers = ScriptApp.getProjectTriggers();
  //トリガー登録数のforループを実行
  for(let i=0;i<triggers.length;i++){
    //取得したトリガーをdeleteTriggerで削除
    ScriptApp.deleteTrigger(triggers[i]);
  }
}

GASプロジェクトに設定したトリガーをすべて取得し、forループで削除していくスクリプトです。

GAS関数の処理を「トリガー削除」に書き換えることで、他人が登録したトリガーが実行されたタイミングで、トリガーが削除されます。

トリガー設定に移動すると、トリガーが削除されています。

このようにして他人が登録したトリガーをスクリプトを書き換えることで、トリガー削除することが可能です。

※後述するトリガー削除するための条件を満たしていない場合、他人のトリガー削除は実行できません。

他のユーザーのトリガーを削除するための注意点

他のユーザーのGoogle Apps Script(GAS)のトリガーを削除する方法には注意点があります。

「トリガーを閲覧・操作(編集・削除)する権限」を事前に追加しておくことです。

書き換えたスクリプトではトリガーの取得ならびに削除を行っています。

スクリプトからトリガー取得と削除するにはトリガー登録時の初回実行時の認証で許可が必要です。

トリガー関連の権限には「自分がいないときにこのアプリケーションを実行できるようにします」があります。

初回認証時に他のユーザーがトリガー操作に関する権限を許可していない場合、トリガー登録した関数をトリガー削除する処理に書き換えても、実行できません。

それゆえに、今回紹介した方法はトリガー操作がないスクリプトでは、他のユーザーのトリガーが残っている場合には対処できません。

事前にGASのコードの中でトリガーを操作する処理が存在している場合のみ、認証時にトリガーの操作権限を許可しているため、トリガー削除に書き換えても実行に成功します。

そのため、他のユーザーが登録したGASのトリガーを削除できるよう、スクリプト内にトリガー削除する関数を含めておくのがおすすめです。

こうしておけば、他のユーザーのトリガー登録が残ってしまっても、GASの関数をトリガー削除するスクリプトに書き換えることで、他のユーザーのトリガーを削除できます。

まとめ・終わりに

今回、Google Apps Script(GAS)で他のユーザーが登録したトリガーを削除する方法を紹介しました。

通常のGASのトリガー設定画面では、自分のトリガーしか編集・削除できず、他人が登録したトリガーは削除できません。

しかし、トリガー実行しているGAS関数の中身をトリガー削除に書き換えることで、他人のトリガーを削除できるようにできます。

ただし、この方法を実行するにはトリガー操作の権限である「自分がいないときにこのアプリケーションを実行できるようにします」の許可が必要です。

組織でGASを使った効率化を複数人のグループで行っていると、前任者のトリガーが残ってしまうことがよく起こります。

そうした場合にわざわざ連絡せずにトリガーを削除できるようにスクリプトを整えておくのがおすすめです。