Google Apps Script(GAS)でWebアプリを構築し、ユーザーからアップロードされたファイルをGoogleドライブへ保存しようとした際に「DriveApp.Folder.createFile を呼び出す権限がありません」と表示されるケースは、権限設定や実行主体の仕様理解が不足している場合に発生しやすい問題です。ここでは、このエラーの原因と、Workspace環境での正しい設計方針について整理します。
エラーの正体:DriveAppの実行権限とは
DriveAppはGoogleドライブにアクセスするための高度な権限を必要とするサービスです。
特にcreateFileは「実行ユーザーの権限」で動作するため、Webアプリの設定によってはアクセス権が不足してエラーになります。
今回のケースでは、ユーザーがアップロードしているにもかかわらず、保存処理が実行ユーザーとして正しく動いていない可能性があります。
「USER_DEPLOYING」と「USER_ACCESSING」の違い
GASのWebアプリには実行主体の選択肢があります。
「ウェブアプリを実行するユーザー(USER_DEPLOYING)」はデプロイ者の権限で実行されますが、現在のUIやWorkspace制限では選択肢が制限されることがあります。
一方「ウェブアプリにアクセスしているユーザー(USER_ACCESSING)」は利用者自身の権限で実行されるため、フォルダ権限がないとDrive操作でエラーになります。
Workspace環境による制限の可能性
Google Workspaceでは、組織管理者によるセキュリティポリシーがGASの挙動に影響することがあります。
特に外部ユーザーの権限委譲やドメイン内制限によって「なりすまし実行(ドメイン-wide権限)」が制限されることがあります。
その結果、USER_DEPLOYING相当の実行が選べない状況が発生する場合があります。
一般的な設計上の問題点
WebアプリでファイルをDriveに保存する場合、ユーザーにフォルダ権限を与えずに処理する設計は一見シンプルですが、GASでは直接的に制限されることがあります。
そのため、サーバーサイドでの代理実行やサービスアカウント的な発想が必要になりますが、GAS単体では完全なサービスアカウント置き換えはできません。
この点を理解せずに設計すると今回のような権限エラーが発生します。
回避策と現実的な解決方法
最も一般的な解決策は、アップロードデータを一度GASの一時領域(Blob)として受け取り、管理者アカウントで保存処理を実行する構成です。
または、Google Drive APIをOAuth2で直接叩き、スコープを明示的に管理する方法もあります。
さらに組織環境では、管理者により「ドメイン全体の委任(Domain-wide delegation)」が有効化されているか確認することも重要です。
まとめ
今回のエラーは単純なバグではなく、GASの実行主体とGoogle Workspaceのセキュリティ制限が組み合わさって発生する典型的なケースです。
特にWebアプリでは「誰の権限でDriveを操作しているか」が重要なポイントになります。
仕様を理解した上で、管理者実行・API利用・組織設定の確認を行うことで解決に近づきます。


コメント