【Google Apps Script:GAS】ドライブにあるファイルを一定期間経過後に自動削除する方法を実例で解説|setTrashed(true)

Apps Script apps script GAS-prograshi(プロぐらし)-kv AppsScript
記事内に広告が含まれていることがあります。

Google Apps Script(GAS)を使うと指定したGoogleドライブ内のファイルを自動で削除するプログラムを作成することができます。

更に、各ファイルの最終更新日を取得し時間(ミリ秒)と比較することで、30日間など一定の期間を経過したファイルのみ自動的に削除することもできます。

ここではその方法を実例を踏まえて解説しています。


処理の概要

GASでドライブにあるファイルを一定期間経過後に自動削除するプログラムの概要は以下になります。

「完了ファイル」というフォルダの中にファイルがあるとします。このファイルを取得し、最終更新日から30日以上経過している場合は自動で削除するというプログラムです。


コード全体像

コードは割とシンプルです。

function deleteFiles() {

  let finishedFolderId = "フォルダID";

  const finishedFolder = DriveApp.getFolderById( finishedFolderId );
  let files = finishedFolder.getFiles();
  let now = new Date();
  let msg = "";
  let fileName = "";

  while( files.hasNext() ){
    let file = files.next();
    let lastUpdated = file.getLastUpdated();

    let thirtyDays = 30 * 24 * 60 * 60 * 1000; //30日間をミリ秒に変換
    if( (now - lastUpdated) > thirtyDays ){
      fileName = file.getName();
      file.setTrashed(true);
      msg += "・" + fileName + "\n";
    }
  }

  if( msg == ""  ){
    console.log( "削除対象のファイルはありません" );
  }else{
     msg = "ファイルを削除しました。 \n\n" + msg;
     console.log(msg);
  }


コードの解説

全てのファイルを取得

  let finishedFolderId = "フォルダID";

  const finishedFolder = DriveApp.getFolderById( finishedFolderId );
  let files = finishedFolder.getFiles();

まずは、削除を行うGoogleドライブのフォルダIDを指定します。

DriveApp.getFolderByIdでドライブを取得し、getFilesメソッドでその中にあるすべてのファイルを取得し、filesという変数に格納します。


ファイルと最終更新日を取得

  while( files.hasNext() ){
    let file = files.next();
    let lastUpdated = file.getLastUpdated();
   

続いて、while文を使い、条件式にfiles.hasNextを入れます。hasNextメソッドは対象のオブジェクトの中にファイルが存在する場合はtrueを、存在しない場合はfalseを返します。

ファイルが存在する場合はfiles.nextで、nextメソッドを使ってファイルを1つ取得します。

getLastUpdatedメソッドを使って、そのファイルの最終更新日を取得します。

getLastUpdatedメソッドの結果は以下のDate形式を返します。

Mon Jun 03 2024 09:11:31 GMT+0900 (Japan Standard Time)


30日未満の場合は削除する

  while( files.hasNext() ){
    let file = files.next();
    let lastUpdated = file.getLastUpdated();

    let thirtyDays = 30 * 24 * 60 * 60 * 1000; //30日間をミリ秒に変換
    if( (now - lastUpdated) > thirtyDays ){
      fileName = file.getName();
      file.setTrashed(true);
      msg += "・" + fileName + "\n";
    }
  }


次に30日間をミリ秒で作成します。

let thirtyDays = 30 * 24 * 60 * 60 * 1000; //30日間をミリ秒に変換


続いて、現在時刻と最終更新日を引いた値と30日間のミリ秒を比較します。

    if( (now - lastUpdated) > thirtyDays ){}

この結果がtrue(30日経過)になればsetTrashedメソッドを使って、引数をtrueにすることでファイルを削除します。

file.setTrashed(true);


memo

setTrashedメソッドはファイルを完全に削除するのではなく、ゴミ箱に移動するメソッドです。
ゴミ箱に入っているファイルは30日後に自動で完全に削除されます。


確認用メッセージ

  if( msg == ""  ){
    console.log( "削除対象のファイルはありません" );
  }else{
     msg = "ファイルを削除しました。 \n\n" + msg;
     console.log(msg);

処理が終わったら、確認用のメッセージをコンソールに表示します。

削除対象がない場合は「削除対象のファイルはありません」

ファイルを削除した場合は以下のように削除したファイル名の一覧を表示します。


対象のフォルダの中が空っぽになり、30日を経過したファイルはゴミ箱に移動します。



トリガーの設定

最後に、作成した関数を実行するトリガーを設定します。


ポイントはイベントのソースを選択で「時間主導型」にし、時間ベースのトリガーのタイプを選択で「日付ベースのタイマー」を設定し、時刻を設定することです。

これで、1日1回プログラムを実行し30日間を超えたファイルがあれば自動でゴミ箱に入れてくれます。


以上で完了です。

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