【GAS】ファイルのサイズを取得

以下が、タイトルのサンプルです。

/**
 * 指定したフォルダ階層とファイル名からファイルサイズを取得する関数
 * @param {string[]} folderPathArray - ルートから順に並んだフォルダ名の配列
 * @param {string} fileName - 取得したいファイル名(拡張子も含む)
 * @returns {number|null} - ファイルサイズ(バイト単位)。見つからなければ null。
 */
function getFileSizeFromPath(folderPathArray, fileName) {
  // Google ドライブのルートフォルダを取得する
  // Apps Script では DriveApp.getRootFolder() で自分のマイドライブ直下を指す
  let currentFolder = DriveApp.getRootFolder();

  // --- フォルダ階層を順番にたどる処理 ---
  for (let folderName of folderPathArray) {
    // 現在のフォルダ直下から、指定された名前のフォルダを探す
    const folders = currentFolder.getFoldersByName(folderName);

    // 該当フォルダが見つからない場合は、エラーとして処理を中断
    if (!folders.hasNext()) {
      Logger.log(`フォルダが見つかりません: ${folderName}`);
      return null;  // 期待するパスにフォルダが存在しない
    }

    // 見つかったフォルダに移動し、次の階層へ
    currentFolder = folders.next();
  }

  // --- 最終的にたどり着いたフォルダから、指定されたファイルを探す ---
  const files = currentFolder.getFilesByName(fileName);

  // 該当するファイルが見つからない場合
  if (!files.hasNext()) {
    Logger.log(`ファイルが見つかりません: ${fileName}`);
    return null;
  }

  // 見つかった最初のファイルを取得
  const file = files.next();

  // ファイルのサイズを取得(単位はバイト)
  return file.getSize();
}


/**
 * 動作確認用のテスト関数
 * フォルダ構成例: Works > 仕入管理
 * ファイル名例: test.csv
 */
function testGetFileSize() {
  // フォルダ階層を配列で指定(ルートから順に)
  const path = ["Works", "仕入管理"];

  // 調べたいファイル名(拡張子を含む)
  const name = "test.csv";

  // ファイルサイズ(バイト単位)を取得
  const sizeBytes = getFileSizeFromPath(path, name);

  // 結果をログに出力(KBとMB単位に換算)
  if (sizeBytes !== null) {
    const sizeKB = (sizeBytes / 1024).toFixed(2);           // KB単位(小数点2桁)
    const sizeMB = (sizeBytes / (1024 * 1024)).toFixed(2);  // MB単位(小数点2桁)
    Logger.log(`ファイルサイズ: ${sizeKB} KB(${sizeMB} MB)`);
  } else {
    Logger.log("指定されたファイルが見つかりませんでした。");
  }
}

🟩 説明文章

1. このスクリプトの目的

このスクリプトは、Google ドライブ内の特定のフォルダ階層にあるファイルのサイズを取得するためのものです。
たとえば、マイドライブ直下の「Works」というフォルダの中に「仕入管理」というサブフォルダがあり、その中の test.csv のサイズを調べたい、といったケースで使用します。


2. 主な関数

(1) getFileSizeFromPath(folderPathArray, fileName)

  • 役割
    指定されたフォルダ階層とファイル名をもとに、対象ファイルのサイズを取得します。
  • 戻り値
    • ファイルが見つかれば、そのサイズをバイト単位で返します。
    • 見つからない場合は null を返します。
  • 内部処理の流れ
    1. ルートフォルダ(マイドライブ直下)を取得
      DriveApp.getRootFolder()
    2. フォルダ名の配列をループでたどり、順番に該当フォルダを探す
    3. 指定したフォルダ階層に到達後、ファイル名を検索
    4. 見つかったファイルのサイズを返す

(2) testGetFileSize()

  • 役割
    テスト用のサンプル関数です。
  • 処理内容
    1. フォルダ階層とファイル名を指定
      例: ["Works", "仕入管理"], "test.csv"
    2. getFileSizeFromPath を呼び出してファイルサイズを取得
    3. 結果をログに出力
      (バイト単位を KB / MB に換算してわかりやすく表示)

3. 補足事項

  • フォルダ階層の指定
    配列 ["フォルダA", "フォルダB"]
    マイドライブ直下 → フォルダA → フォルダB
    の順にたどる意味です。
  • 同名フォルダやファイルが複数ある場合
    getFoldersByNamegetFilesByName最初に見つかったものを返します。
  • 単位変換
    Google Drive のファイルサイズはバイト(B)で取得されるため、
    • 1KB = 1024B
    • 1MB = 1024KB
      を用いて換算しています。
  • ログ出力の確認
    スクリプト実行後に 表示 > ログ または Ctrl + EnterLogger.log の結果を確認できます。

🟩 使用例(イメージ)

フォルダ構成:

マイドライブ
 └─ Works
     └─ 仕入管理
         └─ test.csv

テスト関数を実行するとログに次のように表示されます:

ファイルサイズ: 15.23 KB(0.01 MB)

✅ ポイント

  • getFileSizeFromPath 関数は、汎用的に使えるように作られているため、他のフォルダ・ファイルでも流用可能です。
  • エラー処理(見つからない場合 null を返す)を入れておくことで、実運用でも安心して使えます。
  • デバッグには Logger.log が有効です。実行ログで処理状況を確認できます。

Follow me!