【簡単GAS】Googleドライブ上のフォルダの中のファイルの一覧を取得する方法

アフィリエイト広告を利用しています。
運営者・ポテ

いつもありがとうございます!

ノンプログラマー向け「GAS(Google Apps Script)解説シリーズ」へようこそ。

本稿では「Googleドライブ上のフォルダの中のファイルの一覧を取得する方法」を解説いたします。

Information
  • Google Apps Script(GAS)
    Googleが提供するスクリプト言語で、GoogleスプレッドシートやGoogleドキュメントなどの操作を自動化できます。JavaScriptをベースにしています。
  • GASとVBAの違い
    GASはWebベースで動作し、クラウド上のファイルを操作します。一方、VBAはローカル環境のExcelに組み込まれた言語です。どちらも「自動化」のために使いますが、GASはGoogleの各種サービスと連携しやすいのが強みです。

フォルダの中身の一覧を取得する操作は、GASを使った自動化において何かと出番の多い、基本的な処理のひとつです。

たとえば、ファイル名のチェックや、共有状況の確認、定期的なレポート作成など、さまざまな場面で応用が効きます。

初心者の方でも理解できるように、わかりやすく、丁寧に解説していきます。ぜひご覧ください。

Googleドライブ上のフォルダの中のファイルの一覧を取得する方法

アプリーションの仕様

ここでは、以下のようなシステム構成を例にとります。

your_folder/
  ├── フォルダ
  │   ├── ファイルA
  │   ├── ファイルB
  │   └── ファイルC
  └── フォルダの中のファイルの一覧を取得する
Google ドライブ上の画面。「フォルダ」と「フォルダの中のファイルの一覧を取得する」という2つの項目が表示されている。
システム構成
「フォルダ」を開いた状態のGoogle ドライブ画面。「ファイルA」「ファイルB」「ファイルC」の3つのファイルが表示されている。
フォルダの中身

Google ドライブ内の任意のフォルダ(ここでは your_folder)の直下に、「フォルダ」という名前のサブフォルダと、「フォルダの中のファイルの一覧を取得する」というスプレッドシートが格納されています。

このスプレッドシートにGAS(Google Apps Script)コードを記述し、「フォルダ」内に含まれるファイルの情報を自動的に取得する仕組みです。

運営者・ポテ

次のセクションにて、この処理を実現するスクリプトの具体的な内容を解説していきます!

コードの実装

まず、コード全文を示します。

Information
  • 本稿での構文のハイライトについて
    本稿で掲載しているコードは Google Apps Script(GAS)ですが、JavaScript の構文としてハイライト表示しています。
  • コードとスクリプトの違い
    コードはプログラムを構成する記述全般を指し、広い意味を持つ言葉です。スクリプトはその中でも、特定の処理を自動で実行するために書かれた比較的軽量なコードのことを指します。
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("スクリプトの実行") // メニューのタイトル
    .addItem("フォルダ内のファイル一覧を取得", "listFilesInFolder")
    .addToUi();
}


function listFilesInFolder() {

  // 対象フォルダとスプレッドシート情報
  const FOLDER_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // フォルダID
  const SPREADSHEET_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // スプレッドシートのID
  const SHEET_NAME = 'ファイル一覧'; // 対象のシート名

  // スプレッドシートとシートを取得
  const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
  const sheet = ss.getSheetByName(SHEET_NAME);

  if (!sheet) {
    throw new Error(`シート "${SHEET_NAME}" が見つかりません`);
  }

  // シート初期化
  sheet.clear();
  sheet.appendRow(['ファイル名', 'ファイルID', 'URL', 'ファイル形式', '更新日時']);

  // フォルダ内のファイルを取得して出力
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const files = folder.getFiles();

  while (files.hasNext()) {
    const file = files.next();
    sheet.appendRow([
      file.getName(),
      file.getId(),
      file.getUrl(),
      file.getMimeType(),
      file.getLastUpdated()
    ]);
  }
}

次に、基本的な動作の流れを説明します。

このコードは、スプレッドシートに追加されたカスタムメニューから実行します。メニュー「スクリプトの実行」から「フォルダ内のファイル一覧を取得」をクリックすると、処理が開始されます。

Google スプレッドシートの画面。メニュー「スクリプトの実行」から「フォルダ内のファイル一覧を取得」というカスタムメニューが表示されている。空のシートが表示されており、処理はまだ実行されていない状態。
スクリプトの実行

処理が始まると、指定したフォルダ内のファイルの情報が順に取得され、スプレッドシート内に書き込まれます。

Google スプレッドシートにファイル一覧が表示されている。列には「ファイル名」「ファイルID」「URL」「ファイル形式」「更新日時」があり、フォルダ内の3つのファイルが一覧化されている。
スクリプト実行結果

以上が、基本的な処理の流れです。


運営者・ポテ

ここからは、コードの詳細な解説をしていきます。

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("スクリプトの実行") // メニューのタイトル
    .addItem("フォルダ内ファイル一覧を取得", "listFilesInFolder")
    .addToUi();
}

ここでは、スプレッドシートを開いたときに表示されるカスタムメニューを追加しています。

onOpen() は、スプレッドシートを開いたタイミングで自動的に実行される関数です。

この中で、SpreadsheetApp.getUi() を使ってユーザーインターフェースを取得し、「スクリプトの実行」という名前のメニューを作成しています。

そのメニューの中に「フォルダ内ファイル一覧を追加」という項目を追加し、クリックすると exportSheetAsExcel() 関数が実行されるように設定しています。

このようにすることで、ユーザーがスプレッドシートのメニューから、スクリプトを直接呼び出せるようになります。

function listFilesInFolder() {

  // 対象フォルダとスプレッドシート情報
  const FOLDER_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // フォルダID
  const SPREADSHEET_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // スプレッドシートのID
  const SHEET_NAME = 'ファイル一覧'; // 対象のシート名

ここでは、処理対象となるGoogleドライブのフォルダと、結果を書き込むGoogleスプレッドシートの情報を定数として指定しています。

  • FOLDER_ID は、一覧を取得したいGoogleドライブフォルダのIDです。
  • SPREADSHEET_ID は、結果を書き込むスプレッドシートのIDです。
  • SHEET_NAME は、スプレッドシート内の書き込み先シートの名前です。
  // スプレッドシートとシートを取得
  const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
  const sheet = ss.getSheetByName(SHEET_NAME);

ここでは、指定したスプレッドシートと、対象となるシートを取得しています。

  • SpreadsheetApp.openById(SPREADSHEET_ID) は、スプレッドシートのIDからそのファイルを開く関数です。Google スプレッドシートのURL中に含まれるIDを指定することで、任意のシートにアクセスできます。
  • getSheetByName(SHEET_NAME) は、スプレッドシート内のシート名を指定して、そのシートを取得します。

この処理によって、後続のファイル情報を書き込むための準備が整います。

  if (!sheet) {
    throw new Error(`シート "${SHEET_NAME}" が見つかりません`);
  }

ここでは、指定したシートが存在するかどうかを確認し、存在していない場合にはエラーを返して処理を中断します。

  • !sheet は、「sheet が存在しない場合」を意味する条件式です。
  • throw new Error(...) によって、エラーメッセージを投げると同時に、スクリプトの実行をそこで中断します。

このように明示的にエラーを発生させることで、問題がある状態のまま処理を続けることを防ぎます。

  // シート初期化
  sheet.clear();
  sheet.appendRow(['ファイル名', 'ファイルID', 'URL', 'ファイル形式', '更新日時']);

ここでは、スプレッドシートの初期化(内容の消去)と見出し行の追加を行っています。

  • sheet.clear() は、対象のシートに書かれているすべてのセルの内容と書式を削除します。これにより、前回の実行結果が残っている場合でも、常に最新の状態にリセットされます。
  • appendRow([...]) は、1行分のデータを末尾に追加する関数です。ここでは、列ごとの見出し(カラム名)として、ファイルの基本情報を表す項目を設定しています。
  // フォルダ内のファイルを取得して出力
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const files = folder.getFiles();

ここでは、Google ドライブ上の指定フォルダに含まれるファイル一覧を取得しています。

  • DriveApp.getFolderById(FOLDER_ID) は、指定したフォルダIDをもとに、該当のフォルダを取得する関数です。なお、FOLDER_ID は、コードの冒頭で定義された定数であり、対象フォルダを特定するために使用されています。
  • getFiles() は、そのフォルダ内のすべてのファイルを取得し、FileIterator オブジェクトとして返します。このオブジェクトは、あとで while ループで順に処理されます。

この処理によって、ファイル一覧の出力に必要なデータの準備が整います。

Information

FileIterator
複数のファイルを1件ずつ順番に取り出すための特別なデータ構造です。「Iterate」は英語で「繰り返す」「反復する」、という意味を持ちます。

  while (files.hasNext()) {
    const file = files.next();
    sheet.appendRow([
      file.getName(),
      file.getId(),
      file.getUrl(),
      file.getMimeType(),
      file.getLastUpdated()
    ]);
  }
}

ここでは、FileIterator オブジェクトからファイルを1件ずつ取り出して、スプレッドシートに出力しています。

  • files.hasNext() は、まだ処理していないファイルが残っているかどうかを判定する関数です。
  • files.next() で、次のファイルを取得します。
  • sheet.appendRow([...]) によって、ファイルの情報を1行としてシートに追加しています。

出力される情報は、以下の5項目です。

項目説明
file.getName()ファイル名
file.getId()ファイルID(Drive上の一意のID)
file.getUrl()ファイルのURL
file.getMimeType()ファイルの形式(例:PDF、Excelなど)
file.getLastUpdated()ファイルの最終更新日時
運営者・ポテ

以上で解説は終了です。ありがとうございました!

【初心者歓迎】【無料相談受付中】業務支援アプリケーション作成のご相談を承ります

運営者・ポテ

いつもありがとうございます!

限られた時間をより良く使い、日本の生産性を高めたい──
この取り組みが、社会全体の課題を解決する一歩になると信じています。

みんなの実用学を運営するソフトデザイン工房では、業務設計と業務支援アプリケーション作成のご相談を承っております。

初心者歓迎。無料相談受付中。気になる方は、お気軽にご相談ください。


こちらの記事でも紹介しておりますので、もしよろしければ、ご覧ください。

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

今回の記事では、「Drive APIを使用して GoogleスプレッドシートをプレーンテキストのExcelファイルでローカルにダウンロードする方法」を解説いたしました。

お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。

皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。

なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。

この記事を書いた人

運営者・ポテソフトデザイン工房|現場の自動化パートナー
■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房代表(個人事業者) - 業務設計&業務支援アプリケーション作成サービスを展開 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です