GoogleAppsScript

GAS 「実行する権限がありません」にハマりました

GASをいじる機会が多くなりました。

当然、Googleサービスにアクセスする機会も増えるのですが、スクリプトを実行しようとすると「~を実行する権限がありません」とエラーが表示されてしまいます。

調べたところ同じような悩みを抱えている方もいらっしゃいました。
[GAS]実行に失敗: その操作を実行する権限がありません。に悩んだこと

私が遭遇したのはonOpenメソッド。スプレッドシートが開いたときに実行されるものですね。

スプレッドシートが開くと同時にエラーが出るのだから問題です。

色々試しているとリンク先さんと同様に、単体実行時、もしくはonOpenをプロジェクトのイベントに追加するとOKでした。

ではなぜ単体だとOKなのか?
イベントトリガについて見直してみました。

Google Apps Scriptのトリガ要因は大きく分けてSimpleTriggerと InstallableTriggerの2種類です。

SimpleTriggerはシステムで用意されているトリガなので、onOpen(), onEdit()はScriptに宣言するだけで実行してくれます。
ScriptApps.getProjectTriggers()をコールしても引っかからないトリガです。(ユーザーが任意に登録している場合を除く)
この状態ではシステムの最も低位な権限(実行の認証を行っていないため)でスクリプトを実行しているものと思われます。

InstallableTriggerは任意に登録できるイベントトリガです。スプレッドシートでは「開いた時」「値が変わった時」「編集した時」などが当たります。ScriptApps.getProjectTriggers()をコールすると登録内容が確認できるトリガです。
こちらはユーザー権限で実行されます。(最初のデバッグや実行時に認証確認があるアレです)

つまりは、実行権の問題なんでしょうね。
SimpleTriggerで実行している時はSession情報も利用できなかったので、恐らく間違いないかと。
(単体動作を行うときはSessionが見れるのでユーザー権限で動作していると思われます)

話は変わりますが、Google Apps Scriptの実行権、公開ウェブアプリケーションに限らず実行時のユーザー権限で動作させることは解禁されないんだろうか…

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!