【Googleスプレッドシート】Google Driveのファイル一覧を取得!フォルダ内データの抽出

【Googleスプレッドシート】Google Driveのファイル一覧を取得!フォルダ内データの抽出
🛡️ 超解決

Google Driveに保存しているファイルを、スプレッドシートで一覧として管理したいと思ったことはありませんか。特に、特定のフォルダ内にあるファイル名や更新日時をリスト化したい場合、手動でコピーするのは手間がかかり、更新漏れも心配です。この記事では、Apps Scriptを使ってフォルダ内のファイル一覧を自動的に取得し、スプレッドシートに出力する方法を詳しく解説します。スクリプトを一度作ってしまえば、あとはボタン一つまたは自動実行で最新の一覧を取得できます。

【要点】Google Driveのファイル一覧をスプレッドシートに自動出力する方法

  • Apps Scriptのスクリプトエディタ: スプレッドシートの拡張機能から開き、カスタム関数を作成します。
  • DriveAppクラスとgetFiles()メソッド: フォルダIDを指定してファイル情報を取得し、シートに書き込みます。
  • トリガーによる自動実行: 日次や時間指定でスクリプトを動かし、常に最新の一覧を保ちます。

ADVERTISEMENT

Driveファイル一覧取得にApps Scriptが必要な理由

Googleスプレッドシートの標準関数だけでは、Google Drive内のファイルを検索したり一覧を取得することはできません。例えば、IMPORTRANGE関数は他のファイルのセル範囲を参照するもので、ファイルそのもののメタデータは扱えません。そこで、Googleが提供するスクリプト環境であるApps Scriptを使います。Apps ScriptはJavaScriptベースで、スプレッドシートやDriveなどGoogleサービスを操作するAPIを呼び出せます。DriveAppという組み込みクラスを使うと、フォルダ内のファイルやサブフォルダを取得し、その名前やURL、更新日時などをシートに書き込むことが可能です。また、トリガーを設定すれば定期的に自動実行もでき、管理の手間を大幅に削減できます。

フォルダ内のファイル一覧を取得する手順

基本スクリプトの作成

  1. スプレッドシートを開き、拡張機能からApps Scriptを開く
    まず、ファイル一覧を出力したいスプレッドシートを開きます。メニューバーの「拡張機能」→「Apps Script」をクリックすると、新しいタブでスクリプトエディタが開きます。
  2. プロジェクト名を設定
    左上の「無題のプロジェクト」をクリックし、分かりやすい名前(例:「ファイル一覧取得」)に変更します。これは管理しやすくするためです。
  3. スクリプトコードを記述
    デフォルトで表示されているfunction myFunction() { }の中に、以下のコードを貼り付けます。
    function listFiles() {
      var folderId = 'YOUR_FOLDER_ID'; // ここに対象フォルダのIDを入力
      var folder = DriveApp.getFolderById(folderId);
      var files = folder.getFiles();
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      sheet.clear(); // 既存のデータをクリア
      sheet.appendRow(['ファイル名', 'URL', '更新日時']);
      while (files.hasNext()) {
        var file = files.next();
        sheet.appendRow([file.getName(), file.getUrl(), file.getLastUpdated()]);
      }
    }

    このコードでは、指定したフォルダ内のすべてのファイルを取得し、シートの先頭に見出し行を追加した後、各ファイルの名前・URL・最終更新日を一行ずつ書き込みます。

  4. フォルダIDを取得する
    対象のフォルダをGoogle Driveで開き、アドレスバーのURLを確認します。URLはhttps://drive.google.com/drive/folders/1A2B3C4D5E6F7G8H9I0J?usp=sharingのような形式です。/folders/の後ろにある英数字の文字列(上記例では1A2B3C4D5E6F7G8H9I0J)がフォルダIDです。このIDをコード内の'YOUR_FOLDER_ID'と置き換えます。余計なクエリパラメータ(?usp=sharingなど)は含めないように注意します。
  5. スクリプトを保存し実行する
    フロッピーディスクのアイコンをクリックして保存します。次に、上部ツールバーの「実行」ボタン(▶)をクリックし、関数としてlistFilesを選択して実行します。初回実行時には、Google Driveへのアクセス許可を求められます。自分のアカウントを選び、「許可」をクリックします。権限承認が完了すると、スクリプトが実行され、スプレッドシートに結果が出力されます。
  6. 結果を確認する
    スプレッドシートのタブに戻ると、アクティブなシートにファイル名・URL・更新日時が一覧で表示されています。URLはクリック可能なリンク形式ではありませんが、別途ハイパーリンク関数などで加工すればクリック可能にできます。

トリガーによる自動実行の設定

  1. トリガー画面を開く
    スクリプトエディタの左側メニューから「トリガー」アイコン(時計マーク)をクリックします。
  2. 新しいトリガーを追加
    右下の「トリガーを追加」をクリックし、設定画面を開きます。
  3. トリガーの条件を指定する
    「実行する関数」でlistFilesを選択します。「時間ベースのトリガー」を選び、間隔を「日タイマー」や「時間タイマー」など好みに設定します。例えば毎朝9時に更新したい場合は「日タイマー」→「午前9時〜10時」を選択します。
  4. 保存して完了
    「保存」をクリックすると、設定した時間に自動でスクリプトが実行されるようになります。これで手動で実行しなくても、定期的にファイル一覧が更新されます。

ファイル一覧取得でよくあるトラブルと対処法

権限承認エラーが出る

スクリプトを初めて実行するときは、Google Driveへのアクセス許可が必要です。画面の指示に従って承認してください。承認後もエラーが出る場合は、トリガー画面で「承認が必要」と表示されていないか確認します。必要ならもう一度承認手続きを行います。

フォルダIDの指定ミス

フォルダIDを間違えると、スクリプトはエラーになります。URLからコピーする際に、スラッシュやクエリを含めないよう注意します。また、共有フォルダの場合、そのフォルダが自分のDriveに追加されている必要があります。マイドライブ内のフォルダであれば問題ありません。

サブフォルダ内のファイルも取得したい

上記のコードは指定フォルダ直下のファイルのみ取得します。サブフォルダ内も再帰的に取得するには、関数を修正してフォルダのイテレーションを追加する必要があります。以下の例では、サブフォルダも含めてすべてのファイルを取得します。

function listFilesRecursive(folder) {
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    sheet.appendRow([file.getName(), file.getUrl(), file.getLastUpdated()]);
  }
  var subfolders = folder.getFolders();
  while (subfolders.hasNext()) {
    listFilesRecursive(subfolders.next());
  }
}

メイン関数内で最初のフォルダを引数としてこの再帰関数を呼び出します。

実行時間が長い・最大実行時間を超える

大量のファイルがある場合、スクリプトの実行時間が6分を超えるとタイムアウトします。その場合は、ファイル数が多いフォルダを分割して処理するか、一度に処理するファイル数を制限するなどの工夫が必要です。また、トリガーの実行間隔を短くして複数回に分けて実行する方法もあります。

取得するファイル属性を追加したい

ファイル名やURL以外にも、ファイルサイズ(getSize())、説明(getDescription())、MIMEタイプ(getMimeType())などを取得できます。appendRowの配列に追加したい属性を追記するだけで簡単にカスタマイズできます。

ADVERTISEMENT

ファイル一覧取得方法の比較

方法 手間 自動化可否 更新頻度 費用
手動でコピー 大変 不可 都度手作業 無料
Apps Script(本記事の方法) 一度設定 トリガーで自動更新可能 定期的(時間指定) 無料(実行回数制限あり)
サードパーティツール(例:Zapier) 中程度 リアルタイム 有料プランあり
Google Drive API直接呼び出し 上級者向け 柔軟 無料(割り当て制限あり)

特に予算をかけずに定期的な更新をしたい場合、Apps Scriptが最も適した方法です。初期設定に少し時間はかかりますが、その後はトリガーで自動化でき、カスタマイズも容易です。サードパーティツールは設定が簡単ですが、有料になることが多く、データの外部送信に注意が必要です。

まとめ

この記事では、Apps Scriptを使ってGoogle Driveのフォルダ内ファイル一覧をスプレッドシートに出力する方法をご紹介しました。スクリプトを一度作成すれば、トリガーを設定することで毎日自動更新も可能です。さらに、サブフォルダの再帰取得や、ファイルサイズ・説明など必要な属性を追加するなど、自由にカスタマイズできます。また、ファイルの種類でフィルタリングしたい場合は、if文でgetMimeType()をチェックするとよいでしょう。ぜひ、ご自身のフォルダで実際に試して、ファイル管理の自動化を体験してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。