2015年8月31日月曜日

Googleドライブの不要なファイルを自動で削除してみる 【自動削除編】

こんにちは、井下です。

前回からかなり間が空きましたが、引き続きGoogleドライブから不要なファイルを自動で削除してみます。

参考:前回→Googleドライブの不要なファイルを自動で削除してみる 【リストアップ編】

方法としては、以下の手順になります。
  1. "最終更新日から一定の日にちが経過しているファイル"を削除対象候補として、スプレッドシートにリストアップする
  2. 削除対象を確定する(手動で行います)
  3. 確定させたリストを基に、削除対象のファイルを全て削除する
手順1については前回実装・説明したので、今回は手順2について実装・説明します。
ただ、今回は手順1で実装した内容についてパフォーマンスの改善と、手順2で利用するカラムの追加を行っているのでご注意ください。
NAME_COLUMN = 0;
OWNER_COLUMN = 1;
MAIL_COLUMN = 2
LAST_UPDATED_COLUMN = 3;
ID_COLUMN = 4;

START_ROW = 1
START_COLUMN = 1

// 手順1
// 不要と思われるファイル(最終更新日から一定の日にちが経過したファイル)をリストアップする
function listup() {
  var DATE_OFFSET = 10;
  var sheet = SpreadsheetApp.getActiveSheet();

  var nowDate = new Date();
  var baseDate = dateFormat(new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate() - DATE_OFFSET));

  var files = DriveApp.searchFiles('modifiedDate <= "' + baseDate + '"');

  var values = [['ファイル名', 'オーナー', 'オーナー(メールアドレス)', '最終更新日', 'ファイルID']];

  var row = 1;

  while(files.hasNext()){
    var file = files.next();
    var owner = file.getOwner();
    values[row] = [];
    values[row][NAME_COLUMN] = "=HYPERLINK(\"" + file.getUrl() + "\",\"" + file.getName() + "\")";
    values[row][OWNER_COLUMN] = owner.getName();
    values[row][MAIL_COLUMN] = owner.getEmail();
    values[row][LAST_UPDATED_COLUMN] = file.getLastUpdated();
    values[row][ID_COLUMN] = file.getId();
    row++;
  }

  sheet.getRange(START_ROW, START_COLUMN, values.length, values[0].length).setValues(values);
}

// 手順3
// 手順1でリストアップしたファイルを削除する(自分がオーナーでないファイルは、マイドライブから表示しなくするだけ)
function trash() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var values = sheet.getRange(START_ROW, START_COLUMN, lastRow, ID_COLUMN + 1).getValues();

  for(var index = 1; index < lastRow; index++){
    if(values[index].join('') == ""){
      continue;
    }
 
    var owner = values[index][MAIL_COLUMN];
    var file = DriveApp.getFileById(values[index][ID_COLUMN]);
 
    // マイドライブから表示されないようにする
    DriveApp.removeFile(file);

    if(owner == Session.getActiveUser().getEmail()){
      // 自分がオーナーのファイルはゴミ箱に移動する
      file.setTrashed(true);
    }
  }
}

function dateFormat(date) {
  return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1) ).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
}

前回から不要なファイルを削除するために、trashメソッドを追加しています。

trachメソッドはシートに書き込まれたファイルを参照し、自分がオーナーのファイルはゴミ箱へ移動します。
また、オーナーに関係なく、シートに書き込まれているファイルは全てマイドライブから表示されないようにします。
※ あくまでマイドライブから表示されなくなるだけで、ファイル自体は削除されません。

運用方法としては、次のようになると考えています。
  1. listupメソッドによって最新更新日から一定期間以上経過したファイルをリストアップする(手動でlistupを起動 or トリガーによって定期的に自動起動)
  2. リストアップされたファイルを確認し、削除したくないファイル名が記載された行を削除する(ここは手動で行います)
  3. trashメソッドによってリストアップされたファイルを全て削除する(手動でtrashを起動 or トリガーによって定期的に自動起動)
listupメソッドはトリガーで自動起動しても問題ありませんが、trashメソッドは人の目によるリストのチェックが事前にあるものと想定しているので、トリガーによる自動起動はご注意ください。

なお、最悪誤って削除してしまった場合も、ゴミ箱に移動しているだけなので、数日間は元に戻すことができます。

Google Driveの整理にご利用ください。

0 件のコメント:

コメントを投稿