[GAS]Google Driveから一定期間経過したファイルを自動で削除する方法

電気工学
Business concept male finger pointing delete key on a metallic keyboard

Google Driveはクラウドサービスとして有名ですよね.

でも,無料で使用できる容量は限られているので,容量の大きいデータを保存しようとすると何かを削除する必要があるかもしれません.

今回は,GAS(Google Apps Script)と呼ばれる Google のサービスを連携・自動化するスクリプトを使用して Google Drive から一定期間経過したファイルを自動で削除する方法について紹介します.

毎日や毎月定期的に実行をしたいという方におすすめです.

最後までご覧ください!!

GASのスクリプト

基本的には以下のコードをコピペで使用できます.

自分の Google Drive 上で新規 GAS の作成から以下を貼り付けます.

ただ,以下のスクリプトを正常に動作させるには準備が必要です.

1つは,Drive との連携の設定です.

以下の記事に従って進めてください.

Google app script + REST API v2でファイルを完全削除またはゴミ箱を空にする - Qiita
この記事は?Google Apps Script Advent Calendar 2016の12月21日の記事です。Google app scriptのDrive API には、ファイルをゴミ箱…

もう一つは削除するフォルダIDの定義です.

これを行うために,GAS の管理画面から”プロジェクトのプロパティ”を選択

図1:フォルダIDの定義方法

すると以下の画面が現れるので”スクリプトのプロパティ”タブを選択し,プロパティに GAS のスクリプトで使用する名前を任意に入力(“folder_id”とかでいいと思います).

値には,フォルダID を入力します. フォルダID とは,スプレッドシートのURLの…google.com/d/○○○/edit…の○○○の部分です.

この部分をコピーして貼り付けてください.

図2:フォルダIDの設定
function doHouseKeeping() {
  
  // Get root folder id from script property
  var scriptProperty = PropertiesService.getScriptProperties().getProperties();

//前述した"プロパティ"で指定した名前を定義してください
  var ROOT_FOLDER_IDA = scriptProperty.ROOT_FOLDER_IDA;
  
  // Generate target date
  var baseDate = new Date();

//どれくらい前のファイルを削除するか指定
  baseDate.setDate(baseDate.getDate() - 14);
  
  // Clean up file & folder
  var result_A = cleanUpFolder(ROOT_FOLDER_IDA, baseDate);
  // Empty trash.
  // If this code isn't exist, Google drive entity still survived.
  Drive.Files.emptyTrash();
  
  // Report to Stackdriver
  reportToStackdriver(result_A.removedObjects);
}


/// Delete file and empty subfolder.

function cleanUpFolder(parentFolderId, baseDate){

  // Initialization
  var result = {};
  result.isEmpty = false;
  result.removedObjects = new Array();
  
  // Get parent folder id
  var currentFolder = DriveApp.getFolderById(parentFolderId);
  
  // Get all subfolders
  var folderList = new Array();
  var folders = DriveApp.searchFolders("'"+parentFolderId+"' in parents");
  while(folders.hasNext()){
    var folder = folders.next();
    folderList.push(folder);
  }
  
  for(var i = 0; i < folderList.length; i++){
    // Delete files recursively
    var folderResult = cleanUpFolder(folderList[i].getId(), baseDate);
    if (folderResult.isEmpty){
      // Remember deleted file and subfolder names
      Array.prototype.push.apply(result.removedObjects, folderResult.removedObjects);
      // Remember empty subfolder
      result.removedObjects.push(folderList[i].getName());
      // Delete empty subfolder
      currentFolder.removeFolder(folderList[i]);
    }
  }
  
  // Get all files
  var fileList = new Array();
  var files = DriveApp.searchFiles("'"+parentFolderId+"' in parents");
  while(files.hasNext()){
    var file = files.next();
    fileList.push(file);
  }
  
  for(var i = 0; i < fileList.length; i++){
    // Get last updated time
    var targetDate = fileList[i].getLastUpdated();
    if (targetDate.getTime() < baseDate.getTime()){
      // Remember file name to delete
      result.removedObjects.push(fileList[i].getName());
      // Delete file
      fileList[i].setTrashed(true);
    }
  }

  // Count files and subfolders
  folders = DriveApp.searchFolders("'"+parentFolderId+"' in parents");
  files = DriveApp.searchFiles("'"+parentFolderId+"' in parents");
  if ((!folders.hasNext()) && (!files.hasNext())){

    result.isEmpty = true;
  }
  else {
    result.isEmpty = false;
  }

  return result;
}
function reportToStackdriver(removedObjects){
  if (removedObjects.length < 1) {
    console.info("[HouseKeeping] no objects has deleted.");
  }
  else {
    console.info("[HouseKeeping] DELETE OBJECTS: ", removedObjects);
  }
}

どれくらい前のファイルを削除するかは,

baseDate.setDate(baseDate.getDate() – 14);

の14の部分を任意に変更してください.

14だと2週間前のファイルを削除することになります.

スクリプト中の”ROOT_FOLDER_IDA”の部分はプロパティで自分が設定した名前に変更してください.

以上で一定期間経過したファイルの削除が自動で行えるようになります.

定期実行の設定

スクリプトが完成しても削除したい時に毎回手動で実行するのはめんどうですよね.

GAS には定期実行を設定できるようになっていてとても便利です.

以下の GAS の画面から時計のマークを選択すると,

図3:定期実行

以下の画面に切り替わるので,右下のトリガーを追加から

図4:定期実行

“イベントのソース”で時間主導型を選択すると,実行のタイミングを指定できます.

以下の画像では,1時間おきに実行することになっています.

図5:定期実行

以上で,自分の指定したタイミングでGoogle Drive内の一定期間経過したファイルを自動で削除できるようになりました.

お役に立てていれば光栄です.

ご覧いただきありがとうございました!

[参考文献]

https://www.northtorch.co.jp/archives/375

コメント

タイトルとURLをコピーしました