earthpg:GAS専門のプログラミングスクール

徹底解説!GASでのフォルダ操作と「for」文の使い方

GASでフォルダ内のファイルを操作したいんだけど、どう使えばいいかわからなくて…特に「for」文をうまく使える気がしないんだ。
猫男
猫男
catman
catman
GASでのフォルダ操作と「for」文の活用方法について、catmanが教えてやろう。フォルダ内のファイル取得と繰り返し処理をマスターすれば、スクリプトの可能性が広がるぞ。

GASでフォルダ内のファイルを取得する基本

まずは、GASでフォルダ内のファイルを取得することから始めようか。

フォルダIDを使ってフォルダを取得する

フォルダを扱うにはフォルダIDが必要だ。フォルダIDを使って、Googleドライブ上の特定のフォルダを取得する。

 // フォルダIDでフォルダを取得
function getFolderById() {
  const folderId = 'YOUR_FOLDER_ID';
  const folder = DriveApp.getFolderById(folderId);
  Logger.log(folder.getName());
}

DriveApp.getFolderById(id): フォルダIDを指定してフォルダオブジェクトを取得する。
folder.getName(): フォルダの名前を取得するためのメソッドだ。

フォルダ内のファイルを取得する方法

取得したフォルダ内のファイルをリスト化するにはこうするんだ。

 // フォルダ内のファイルを取得
function listFilesInFolder() {
  const folderId = 'YOUR_FOLDER_ID';
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();
  
  while (files.hasNext()) {
    const file = files.next();
    Logger.log('File Name: ' + file.getName());
  }
}

folder.getFiles(): フォルダ内のファイルをIterators(反復子)として取得する。
files.hasNext(): 次のファイルが存在すればtrueを返す。
files.next(): 現在のファイルオブジェクトを取得し、次に移動する。

GASで「for」文を活用する

複数のファイルを効率よく処理するために、「for」文を活用しよう。

for-inループを使用する

配列やオブジェクトを処理する際に役立つのがfor-inループだ。

const fileNames = ['file1', 'file2', 'file3'];

// for-inループで配列のインデックスを取得
for (let index in fileNames) {
  Logger.log('Processing: ' + fileNames[index]);
}

for (let index in array): 配列の各インデックスを反復処理する。

非推奨のforeachを避ける

実は、GASでは“foreach”は非推奨だ。かわりに「for」文を使用することをお勧めする。

なるほど…。GASで4つの“for”文の使い分けが少しずつわかってきたかも。でもフォルダ階層を作成するにはどうするの?
猫男
猫男

GASでフォルダを作成する方法

フォルダを作成して階層をつくるのも簡単だ。

フォルダを作成する

GASでフォルダを作成するには以下の方法がある。

 // 新しいフォルダを作成
function createFolder() {
  const folderName = 'NewFolder';
  const folder = DriveApp.createFolder(folderName);
  Logger.log('Created folder: ' + folder.getName());
}

DriveApp.createFolder(name): 指定した名前でフォルダを作成する。

フォルダの階層を作成する

さらに、階層構造を作りたいとき。

 // サブフォルダを作成
function createFolderHierarchy() {
  const parentFolder = DriveApp.createFolder('ParentFolder');
  const childFolder = parentFolder.createFolder('ChildFolder');
  Logger.log('Created hierarchy: ' + parentFolder.getName() + ' -> ' + childFolder.getName());
}

folder.createFolder(name): 特定のフォルダ内にサブフォルダを作成する。

catman
catman
こうすれば、GASでフォルダの管理が一段と楽になるはずだ。次に進もうか。

練習問題

次の練習問題で知識を確認してみよう。

  1. GASで、フォルダID “YOUR_FOLDER_ID” のフォルダ内にあるすべてのファイル名を取得し、ログに出力するスクリプトを書いてください。
  2. フォルダ “MainFolder” を作成し、その中に “SubFolder1” および “SubFolder2” を作成する階層を作るスクリプトを書いてください。

解答・解説

まずは、ファイル名を取得するスクリプト。

function logAllFileNames() {
  const folderId = 'YOUR_FOLDER_ID';
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();
  
  while (files.hasNext()) {
    const file = files.next();
    Logger.log('File Name: ' + file.getName());
  }
}

DriveApp.getFolderById(id): フォルダIDでフォルダを取得、フォルダ内のファイルを反復して取得し、各ファイル名をログに出力する。

次に、フォルダ階層を作成するスクリプト。

function createFolderWithSubfolders() {
  const mainFolder = DriveApp.createFolder('MainFolder');
  const subfolder1 = mainFolder.createFolder('SubFolder1');
  const subfolder2 = mainFolder.createFolder('SubFolder2');
  Logger.log('Folder hierarchy created: ' + mainFolder.getName());
}

DriveApp.createFolder(name): フォルダを作成し、そのフォルダ内に別のフォルダを作り階層構造を構成する。