GASを使ってGoogleドライブの特定フォルダ内にあるファイル一覧を取得しようとしたとき、普段の配列処理と同じように書けず戸惑うことがあるかもしれません。ここでは、GASのGoogleドライブのフォルダの中身を一覧する手順と、その際につまずきやすいポイントについて整理します。
配列が返ってこない?getFiles()の落とし穴
特定のフォルダからファイル一覧を取得する際、DriveApp.getFolderById() でフォルダを指定し、そこに対して getFiles() を呼び出します。ここで注意したいのは、このメソッドの戻り値が普通の配列(Array)ではないではす。
GASのDriveAppは、hasNext() と next() を使ってデータを順番に取り出す「Iterator(イテレータ)パターン」という形式を採用しています。そのため、forEach や map といったJavaScriptでおなじみの配列メソッドを直接つなげることができず、専用のループ処理を組む必要があります。
フォルダの中身を一覧するスクリプト
イテレータ形式のデータを処理する場合、while 文を使って「次のファイルが存在する間は処理を繰り返す」という書き方をします。ファイル名とURLを順番にログ出力するコードは以下のようになります。
const folder = DriveApp.getFolderById("FOLDER_ID");
const files = folder.getFiles();
while (files.hasNext()) {
const file = files.next();
Logger.log(file.getName() + ": " + file.getUrl());
}
FOLDER_ID の部分は、対象となるGoogleドライブのフォルダURLに含まれるID文字列に置き換えて実行してください。
スプレッドシートに台帳として出力するための回避策
ログに出力するだけでなく、取得したファイル情報をスプレッドシートに書き出したいケースが多いはずです。しかし、イテレータのままではシートのセルに対して一括書き込みができません。
この仕様を回避するには、while ループの前に空の配列を用意しておき、ループの中でファイル名やURLを二次元配列として push() していく構成が一般的です。すべてのファイルを配列に詰め終わった後、その配列を setValues() でスプレッドシートに渡すことで、フォルダ内のファイル一覧を台帳として出力できます。

