Google Driveはクラウドサービスとして有名ですよね.
でも,無料で使用できる容量は限られているので,容量の大きいデータを保存しようとすると何かを削除する必要があるかもしれません.
今回は,GAS(Google Apps Script)と呼ばれる Google のサービスを連携・自動化するスクリプトを使用して Google Drive から一定期間経過したファイルを自動で削除する方法について紹介します.
毎日や毎月定期的に実行をしたいという方におすすめです.
最後までご覧ください!!
GASのスクリプト
基本的には以下のコードをコピペで使用できます.
自分の Google Drive 上で新規 GAS の作成から以下を貼り付けます.
ただ,以下のスクリプトを正常に動作させるには準備が必要です.
1つは,Drive との連携の設定です.
以下の記事に従って進めてください.
もう一つは削除するフォルダIDの定義です.
これを行うために,GAS の管理画面から”プロジェクトのプロパティ”を選択
すると以下の画面が現れるので”スクリプトのプロパティ”タブを選択し,プロパティに GAS のスクリプトで使用する名前を任意に入力(“folder_id”とかでいいと思います).
値には,フォルダID を入力します. フォルダID とは,スプレッドシートのURLの…google.com/d/○○○/edit…の○○○の部分です.
この部分をコピーして貼り付けてください.
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 の画面から時計のマークを選択すると,
以下の画面に切り替わるので,右下のトリガーを追加から
“イベントのソース”で時間主導型を選択すると,実行のタイミングを指定できます.
以下の画像では,1時間おきに実行することになっています.
以上で,自分の指定したタイミングでGoogle Drive内の一定期間経過したファイルを自動で削除できるようになりました.
お役に立てていれば光栄です.
ご覧いただきありがとうございました!
[参考文献]
コメント