takeda_san’s blog

KotlinとVRを頑張っていく方向。

GASでGoogle Driveのファイルを削除する(できないものもある)

きっかけ

Google Drive上のファイルをGASで削除するときにハマったことがあったのでメモ。

通常の削除

削除といえば、setTrashedでございますね。
https://developers.google.com/apps-script/reference/drive/file#settrashedtrashed

ちなみにremoveFileは非推奨でございます。
https://developers.google.com/apps-script/reference/drive/folder#removeFile(File)

function trashFile() {
  const file = DriveApp.getFileById("fileid")
  file.setTrashed(true)  
}

f:id:takeda_san:20210717210016p:plain

削除の実行後、無事ゴミ箱に移動されているのが確認できました。

f:id:takeda_san:20210717210629p:plain

ほかの人がアップロードしたファイルの場合

今度はオーナーが自分ではなくて、ほかの人の場合。

f:id:takeda_san:20210717211430p:plain

権限不足で例外が出てしまいました。
実行結果。

Exception: Access denied: DriveApp.
trashFile   @ main.gs:3

Webの画面からなら削除できるんですけどね。
不思議。

ファイルのゴミ箱への移動はオーナー権限が必要

Only the owner may trash the File.

ドキュメントにも書いてあるんですが、オーナーのみがファイルをゴミ箱に移動できる。 じゃぁ、オーナーに付け替えようかとこんなコードを書く。

  const file = DriveApp.getFileById("fileid")

  // オーナーの設定
  const email = Session.getActiveUser().getEmail()
  file.setOwner(email)

  file.setTrashed(true)  
}

オーナーの付け替えだ。
ただこれも例外が出る。

Exception: Action not allowed
trashFile   @ main.gs:6

例外が出てるのは、ちょうどsetOwnerしているところ。

ここでGoogle Driveのヘルプを見てみよう。

Make someone else the owner of your file - Computer - Google Drive Help

譲渡できるファイル
個人アカウント(-----@gmail.com)では、次のファイル形式を移行できます。

Google ドキュメント
Google スプレッドシート
Google スライド
Google 図形描画
Google マイマップ
フォルダ

というわけで通常のファイルは、Web画面から削除しましょうね。
という話でした。
(マジで困ってるので、GASで削除できる方法あったら教えてほしい)