Amazonで商品を見るセール会場へ

Googleドライブ│フォルダ内ファイルを一覧取得するツール

Googleドライブ内のファイルを一括で一覧化する方法です。

リモートワークや共有ドライブでの作業が増えると、フォルダ構成やサブフォルダを含む全ファイルを一度に把握したい場面があります。

手作業での確認は手間がかかります。

本記事ではGoogle Apps Script(GAS)を使って、フォルダのURLを入力するだけで、全ファイル情報をスプレッドシートに一覧出力するツールの実装手順を解説します。

処理の流れ

スプレッドシートに追加されたカスタムメニューから実行し、入力フォームにGoogleドライブのフォルダURLを入力すると、新規シートに対象ファイルの一覧が出力されます。

Googleドライブのフォルダ内ファイル一覧を取得したスプレッドシートの出力例。

スプレッドシートに出力される項目は以下の通りです。

  • フォルダ名
  • ファイル名
  • 作成日
  • オーナー
  • ファイルURL
目次

導入・使用手順

  1. 新規または利用対象のGoogleスプレッドシートを開きます。
  2. 上部メニューの「拡張機能」から「Apps Script」を選択します。
  3. 表示されたエディタにスクリプトコードを貼り付けて保存します(ファイル名は Code.gs)。
  4. 「ファイルを追加」からHTMLファイルとして FolderInputForm.html を作成し、対応するHTMLコードを貼り付けて保存します。
  5. スプレッドシートを再読み込みするとメニューバーに専用メニューが表示され、そこから実行できます。

初回実行時には、Googleアカウントへのアクセス権限を承認するダイアログが表示されます。

以下が実装コードです。

初回実行時に表示されるGoogleアカウントへのアクセス権限承認ダイアログ。

スプレッドシートに関するほかの自動化手順は、関連記事にまとめています。

スクリプトコード(Code.gs)

まずはスクリプトファイル(Code.gs)に記述するコードです。

// メニュー追加
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu("ツール")
    .addItem("ファイル一覧を出力", "showFolderInputModal")
    .addToUi();
}

// モーダルを表示
function showFolderInputModal() {
  const html = HtmlService.createHtmlOutputFromFile('FolderInputForm')
    .setWidth(400)
    .setHeight(200);
  SpreadsheetApp.getUi().showModalDialog(html, 'フォルダURLを入力');
}

// フォルダURLを受け取り処理を開始
function processFolderUrl(folderUrl) {
  const folderId = extractFolderId(folderUrl);
  if (!folderId) {
    throw new Error("フォルダURLが無効です");
  }

  const folder = DriveApp.getFolderById(folderId);
  const folderData = getAllSubFolders(folderId);
  const sheet = createSheetWithFolderName(folder.getName());
  writeFilesToSheet(sheet, folderData);
}

// フォルダID抽出
function extractFolderId(url) {
  const match = url.match(/[-\w]{25,}/);
  return match ? match[0] : null;
}

// フォルダ名+日付+時刻で新シート作成
function createSheetWithFolderName(folderName) {
  const now = new Date();
  const timestamp = Utilities.formatDate(now, Session.getScriptTimeZone(), "yyyyMMdd_HHmm");
  const sheetName = `${folderName}_${timestamp}`.slice(0, 99); // シート名は最大100文字
  const sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName, 0);
  sheet.activate();
  return sheet;
}

// サブフォルダを再帰的に取得
function getAllSubFolders(rootId) {
  const folderQueue = [[DriveApp.getFolderById(rootId).getName(), rootId]];
  const result = [];

  for (let i = 0; i < folderQueue.length; i++) {
    const [path, id] = folderQueue[i];
    result.push([path, id]);

    const subFolders = DriveApp.searchFolders(`'${id}' in parents`);
    while (subFolders.hasNext()) {
      const subFolder = subFolders.next();
      const subPath = `${path} > ${subFolder.getName()}`;
      folderQueue.push([subPath, subFolder.getId()]);
    }
  }

  return result;
}

// ファイル情報をシートに出力
function writeFilesToSheet(sheet, folderData) {
  sheet.clear();
  const headers = ["フォルダ", "ファイル名", "作成日", "オーナー", "URL"];
  sheet.getRange(1, 1, 1, headers.length).setValues([headers]);

  let row = 2;
  folderData.forEach(([folderPath, folderId]) => {
    const files = DriveApp.searchFiles(`'${folderId}' in parents`);
    while (files.hasNext()) {
      const file = files.next();
      const values = [
        folderPath,
        file.getName(),
        file.getDateCreated(),
        file.getOwner().getName(),
        file.getUrl()
      ];
      sheet.getRange(row, 1, 1, values.length).setValues([values]);
      row++;
    }
  });
}

続いて、URL入力画面となるモーダル用のHTMLコード(FolderInputForm.html)です。

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <style>
      body { font-family: sans-serif; }
      input { width: 100%; padding: 8px; margin-top: 10px; }
      button { margin-top: 15px; padding: 8px 12px; }
    </style>
  </head>
  <body>
    <label>フォルダのURLを入力してください:</label>
    <input type="text" id="folderUrl" placeholder="https://drive.google.com/drive/folders/xxxxx">
    <button onclick="submit()">実行</button>

    <script>
      function submit() {
        const url = document.getElementById('folderUrl').value;
        google.script.run.withSuccessHandler(() => {
          google.script.host.close();
        }).withFailureHandler((e) => {
          alert('エラー:' + e.message);
        }).processFolderUrl(url);
      }
    </script>
  </body>
</html>

コードの設定は以上です。

実際に実行して動作を確認します。

出力結果のイメージ

実行が完了すると、シートに次のような形式で一覧が出力されます。

フォルダファイル名作成日オーナー名ファイルURL
メインフォルダ企画書.docx2024/12/01 10:32鈴木 太郎https://drive.google.com/…
メイン > 子1デザイン案.pptx2024/12/01 11:05鈴木 太郎https://drive.google.com/…
フォルダ名やファイル名などの取得結果が出力されたスプレッドシートの表示画面。

注意点

  • 対象フォルダに対する閲覧権限がない場合、ファイル一覧を取得できません。
  • 生成されるシート名は最大100文字に自動調整されます。
  • ブック内のシート数が上限に近い場合、新しいシートを作成できないことがあります。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

Googleドライブのファイルやフォルダを扱う記事は、ほかにもあります。

まとめ

GASを活用することで、手作業で行っていたGoogleドライブ内のファイル確認や棚卸しを自動化できます。

フォルダ構成の把握や定期的なファイル整理に活用できます。

紹介したスクリプトをスプレッドシートに設定し、

日々のファイル管理業務の効率化に役立ててください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次