【GAS】複数の.gsファイルがあるときにスコープが自動で追加されず「xxxを呼び出す権限がありません」とエラーを吐かれる


エラーが発生する条件

下記のように2つの.gsファイルに分けてコードを書き、test()を実行しようとすると例外が出て実行できない

フォルダ読み込み.gs
const ID_DIR_SUB = "hogehogehogehogehogehogehogehoge";

const Dir_sub = DriveApp.getFolderById(ID_DIR_SUB);
子フォルダ作成.gs
function test() {
  let Dir_new = Dir_sub.createFolder("testFolder");
}

該当エラー文

エラー内容は下記のような感じ。普通だったら初回実行時に自動で必要なスコープを追加してくれるはずだが、複数ファイルにすると漏れるっぽい

Exception: You do not have permission to call DriveApp.Folder.createFolder. Required permissions: https://www.googleapis.com/auth/drive
test @ 子フォルダ作成.gs:2

やったこと

  1. 旧エディタに戻って
  2. マニフェストファイルを開いて
  3. スコープを明示的に記載する

参考

Qiita:GASのエラー”呼び出す権限がありません”はマニフェストファイルに問題あり
解決方法自体はこっちのほうが詳しいのでこちらを見ていただければ。今回の記事は「複数の.gsファイルを作った場合に発生する上記エラーが出る可能性が高いよ」っていう備忘として載せておく

解決方法

マニフェストファイルを明示的に作成して、そっちでスコープを強制的に書き換える。

  • 旧エディタに切り替える

    ※プロパディやマニフェストファイルをいじるメニューが新エディタにはないため

  • 「ファイル>プロジェクトのプロパティ>スコープ」から、既存の(自動設定された)スコープをコピーしておく

    今回の場合はdrive.readonlyのみ

  • 「表示>マニフェストファイルを表示」でマニフェストファイル(appsscript.json)を開く

appsscript.json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}
  • スコープに関する記述を追加して、既存スコープと強制的に追加したいスコープを記載する
    ※今回は元々設定されてたスコープがdrive.readonlyだったので、driveを追加するだけでよし
appsscript.json(変更後)
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes":["https://www.googleapis.com/auth/drive"
  ]
}
  • 保存して実行するとエラーが解消されているはず

あとがき

普通に書く分にはスコープを自動で認識してくれるみたいだが、できない場合はちょっとめんどくさい。
新エディタになってからプロジェクトのプロパティとかスコープとか色々見れなくなってるのはやくどうにかしてくれないかな。