GASはとても便利ですが、オーナーの異動や退職による権限問題には注意が必要です。特にトリガーは本人しか消せないので厄介です。後から対処が難しいことも多いので、しっかり事前の対処をしておきましょう。
まず、GASやコンテナ(GAS付きのスプシやフォーム)は共有ドライブ上に作成してください。共有ドライブ上に作っておけばオーナーは「共有ドライブ(の管理者)」になりますので、引継ぎが用意になります。
GASやコンテナを共有ドライブに置ければ、残りの課題はトリガーです。トリガーとは「毎日24時に実行」のような自動化の仕掛けです。OAuth…つまり「設定者の権限を借りて実行する」という仕掛けで動きます。
しかしトリガー設定画面では「自分」「他のユーザー」と2種類の表示しかされません。ですので古いGASを見つけて…オーナーが異動してたりすると…「誰がオーナーやねん」状態が発生します…。
後で困らないために、おまじないを仕掛けておくことをお勧めします。
例えばこんなGASがあったとします。
function sample() {
// ここに処理を記載します。
console.log("処理を実行しました");
}
そこに以下のおまじないを追記します。
function sample() {
// ここに処理を記載します。
console.log("処理を実行しました");
let triggerOwner=Session.getEffectiveUser().getEmail();
console.log(triggerOwner)
}
こうしておけば、トリガーの実行ログに、トリガー設定者…つまり「他のユーザー」のメールアドレスが毎回残ります。これだけでもかなり助かるかと思います。しかもこれは「後から追加」しても動きます!
通常は他人のトリガーを削除することはできません。ですのでトリガー設定者が異動した…といった時に変更ができなくて困ります。
以下のコードを実行すると、「自分のトリガーを全削除」することができます。
function deleteTrigger() {
const triggers = ScriptApp.getProjectTriggers();
for(let i=0;i<triggers.length;i++){
ScriptApp.deleteTrigger(triggers[i]);
}
}
これでは「他のユーザー」が残したトリガーは消せません。ですので「下準備」が必要です。先ほどの例を使うと…
function sample() {
// ここに処理を記載します。
console.log("処理を実行しました");
let triggerOwner=Session.getEffectiveUser().getEmail();
console.log(triggerOwner)
}
function deleteTrigger() {
const triggers = ScriptApp.getProjectTriggers();
for(let i=0;i<triggers.length;i++){
ScriptApp.deleteTrigger(triggers[i]);
}
}
としておき、トリガーを設置する前に、設定者が手動で「deleteTrigger()」を実行すると、「後日、GASプロジェクトが」トリガーを消す権限」を付与することができます。こうしておけば…以下の手順で手順で「他のユーザーのトリガー」を削除することができます。
トリガーを設定したい関数(先ほどの例では「sample()」)を別名で同じプロジェクト内にコピーする(例えば「sample2()」など)。
新しい関数(sample2())に対してトリガーを設定する
「deleteTrigger()」の関数名を、他のユーザーがトリガーを設定した関数名(先ほどの例では「sample()」)に変更する
こうすれば、次回トリガー発動時に
新しい関数(sample2()))が本来やりたい処理を実行する
他の人の設定したトリガーの中身「自分のトリガーの全削除」に代わっていて、しかも事前に権限付与もしてあるので…不要トリガーが全削除される。
となります。
「トリガーを消す」などのプロジェクトを操作する権限を設定してしまう方法もあります。まずはプロジェクトの設定で「appsscript.json」を編集可能にします。
コードエディタで「appsscript.json」を編集できるようになります。
以下のように追記してください。
{
"timeZone": "Asia/Tokyo",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": [
"https://www.googleapis.com/auth/script.projects"
],
"runtimeVersion": "V8"
}
こうしておくことで、トリガー設置時に、トリガー削除権限もセットで付与されます。
後からトリガーを削除することが可能となります。
ここまで、他のユーザーの設置したトリガーを削除する方法を紹介しました。それでも「トリガー設定者が退職している」などの理由で、Google Workspaceのアカウントが完全に削除されてしまうと、どうにもならなくなります。
こうなってしまったら、あきらめて「GASやコンテナを最初から作り直す」しかないです。
幸いなことに、昨今ではGeminiにコードをコピペして解説させると、かなりわかりやすく説明してくれます。なんとか復活させつつ…同じことが起きないような対策を講じましょう。
これまで話をまとめます。
事前にできる対策は講じておきしょう。
GASやコンテナは安全な場所に配置
トリガー対策は事前に実施
それでもアカウントが削除されるとどうしようもない…
異動や退職時にトリガーを確認する運用フローを用意する
退職時は一定期間は、Archiveライセンスを利用するなど…復活可能な状態を作っておく
などの対策を、よく考えてからGASのトリガーを利用するようにしましょう。