はじめに
Googleドライブに容量制限があることはみなさんご存知と思いますが、実は(?)ファイル数制限も存在します。
ファイル数上限は2024/12/06時点で50万個であり(参考:GoogleWorkspaceラーニングセンター)、これはそうそう超えることがなさそうに思われるかもしれませんが、定期実行スクリプトでログファイルを出力していたり、何らかの巨大なプロジェクトをそのままアップロードしたりすると、意外と超えてしまう場合もあります。
今回はこのような場合について、その対処を説明します。
ケース1:原因のフォルダがわかっている場合
たとえば、ローカルに保存していた巨大なプロジェクトをそのままGoogleドライブにアップしてバックアップを試みたりした場合や、大量のログデータをそのままアップロードしてしまった場合など、一撃でこの上限を突破することもあり得ます。
このような場合には原因が明らかなので、対処しやすいです。ただその巨大なファイルを消してしまえば問題ありません。アップロードが不完全なまま停止していることもあり得ますが、ファイル上限に達してしまっている以上アップロードが正常に終了することはないので、一思いに削除してしまいましょう。
ケース2:原因のフォルダがわからない場合
一方で、原因のフォルダがわからずに上限に達してしまった場合、対処が困難になります。「知らない場所でファイルが急増して上限に達してしまうことなんてあるの?」と思われるかもしれませんが、
たとえば簡単に、毎分実行するスクリプトが毎回エラーログファイルを出力すると、1日で1440ファイル、一年足らずで50万ファイルの上限に達する可能性がありあます。これが、たとえばそれまで正常に動いていたスクリプトが急にエラーになるようになったり、ユーザが気まぐれで作って放置して忘れてしまったりなど、意外と簡単に上限に達することがあり得ます。
このような場合、まず原因のディレクトリを探すことから始める必要があります。
Linuxサーバ等の場合、コマンドによってファイル数の多いディレクトリを探すこともできますが、(参考リンク)残念ながら現時点(2024/12/06)でGoogleドライブにファイル数の配置に関する統計を見る方法は存在しません。
そこで、GASを用いてファイル数を算出します。
ファイル数算出スクリプト
下記のスクリプトにフォルダーIDを記載して実行してください。
フォルダーIDは、GoogleドライブのフォルダURLの~/folders/以下の部分(下のアスタリスク部分)です。
https://drive.google.com/drive/u/0/folders/********ThisIsFolderID*********
function main() {
var parentFolderId = 'ここにIDを記入する'; // 確認したい親フォルダのIDをここに入力
var parentFolder = DriveApp.getFolderById(parentFolderId);
// 親フォルダ直下のファイル数をカウント
var parentFiles = parentFolder.getFiles();
var parentFileCount = 0;
while (parentFiles.hasNext()) {
parentFiles.next();
parentFileCount++;
}
var subfolders = parentFolder.getFolders();
// 親フォルダ直下のすべてのサブフォルダについて処理
while (subfolders.hasNext()) {
var subfolder = subfolders.next();
console.log("-----------------------------File Opened: "+subfolder.getName()+"-----------------------------");
var fileCount = countFilesInFolder(subfolder);
parentFileCount += fileCount;
Logger.log('-----------------------------Folder: ' + subfolder.getName() + ' - Total number of files: ' + fileCount+"-----------------------------");
}
Logger.log('Total number of files in parent folder: ' + parentFileCount);
}
function countFilesInFolder(folder) {
var files = folder.getFiles();
var subfolders = folder.getFolders();
var fileCount = 0;
// フォルダ内のすべてのファイルをカウント
while (files.hasNext()) {
files.next();
fileCount++;
}
// フォルダ内のすべてのサブフォルダを再帰的に処理
while (subfolders.hasNext()) {
var subfolder = subfolders.next();
fileCount += countFilesInFolder(subfolder);
}
console.log(folder.getName() + ": " +String(fileCount));
return fileCount;
}
注意点
実行には非常に時間がかかります。GoogleWorkspaceユーザの上限実行時間は30分ですが、30分で数万~十数万ファイル程度の計測が関の山です。一般アカウントの6分では~3万ファイル程度が関の山かと思われ、かなり絞った範囲での実行が必要になりそうです。
原因のフォルダの削除
原因のフォルダを特定したら、フォルダを削除/退避しましょう。特定のファイルのみを削除したい場合にもGASは便利です。
また、場合によっては自動実行スクリプトが原因となっている可能性もあるので、そのような場合は実行停止やバグ修正など、根本原因を行っていきましょう。
おわりに
Googleドライブでは、ファイル数上限が意外と厳しい割に、チェックする方法がほとんどありません。自力でスクリプトを作成する等して、地道に原因を探っていきましょう。