【解決録】Apps Script マニフェストの “webapp.executeAs” エラー対処法

Google Apps Script を clasp でデプロイしようとした際に、次のようなエラーに遭遇しました:
"appsscript.json" has errors: Invalid manifest:
Expected one of [USER_ACCESSING, USER_DEPLOYING, SERVICE_ACCOUNT, UNKNOWN_EXECUTE_AS]
for "webapp.executeAs", but was "USER".
この記事では、このエラーの原因と解決方法をまとめます。
原因
appsscript.json に記述している webapp.executeAs の値が間違っているためです。Google Apps Script のマニフェストでは、webapp.executeAs に指定できる値が 決まっている定数 だけです。
許可されている値は以下の通り:
USER_ACCESSING: Web アプリを開いたユーザー権限で実行USER_DEPLOYING: デプロイしたユーザー権限で実行SERVICE_ACCOUNT: サービスアカウントを利用するケース(特殊用途)UNKNOWN_EXECUTE_AS: 将来的な互換性のための予約値
つまり、単純に "USER" という文字列は 無効 なのです。
解決方法
1. appsscript.json を修正
以下のように USER を正しい定数に置き換えます。
{
"timeZone": "Asia/Tokyo",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"access": "ANYONE",
"executeAs": "USER_DEPLOYING"
}
}
2. 再度 clasp push
修正後に clasp push を実行すると、エラーは解消され、スクリプトが正常にアップロードされます。
✔ Manifest file has been updated. Do you want to push and overwrite? Yes
Pushed 2 files.
└─ appsscript.json
└─ your_script.js
どちらを選ぶべき?
USER_ACCESSING: ユーザーごとに権限を切り替えたい場合(例:自分のGoogle Driveにだけアクセスさせたいアプリ)USER_DEPLOYING: デプロイした人の権限で一律実行したい場合(例:Bot的な処理や共通リソースへのアクセス)
大半のケースでは USER_DEPLOYING を指定するのが安全です。
まとめ
- エラー原因は
"USER"が無効な値だったこと - 許されるのは
[USER_ACCESSING, USER_DEPLOYING, SERVICE_ACCOUNT, UNKNOWN_EXECUTE_AS] - 修正は
appsscript.jsonを正しい定数に直すだけ
ニッチですが、clasp を触ると必ずぶつかる可能性がある罠なので、備忘録として残しておきます。