お前のGoogleドライブを見せろ！といわれたら差し出すリストを作るためのGAS

#　みんな！!GOOGLEドライブの容量圧迫してない?(15GB)と思ったら読んでね。

てなわけで、パンッパンになったGoogleドライブの中身を最下層まで探してスプレッドシートにリスト化するステキなGASを共有するよ！

もう、これ！！

```javascript

function getFileListInFolder() {
  // スプレッドシートとシートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const folder = DriveApp.getRootFolder();
  const folderList = [];

  // フォルダとサブフォルダのリストを再帰的に取得
  const folders = folder.getFolders();
  while (folders.hasNext()) {
    const c_folder = folders.next();
    console.log(c_folder.getName(), c_folder.getId(), c_folder.getUrl())
    folderList.push([c_folder.getName(), c_folder.getId(), c_folder.getUrl()]);
    getSubFolders(c_folder, folderList);
  }

  // ファイルリストを取得
  const allFileList = getChildFiles(folderList);

  // スプレッドシートの指定シートにハイパーリンク付きのリストを出力
  const shHyperLink = ss.getSheetByName('リスト');
  shHyperLink.getRange(2, 1, allFileList.length, 4).setValues(allFileList);
}

// サブフォルダを再帰的に取得する関数
function getSubFolders(parentFolder, folderList) {
  const folders = parentFolder.getFolders();
  while (folders.hasNext()) {
    const subFolder = folders.next();
    console.log([subFolder.getName(), subFolder.getId(), subFolder.getUrl()])
    folderList.push([subFolder.getName(), subFolder.getId(), subFolder.getUrl()]);
    getSubFolders(subFolder, folderList);
  }
}

// フォルダ内のファイルリストを取得する関数
function getChildFiles(folderList) {
  const list = [];
  for (let i = 0; i < folderList.length; i++) {
    const folderId = folderList[i][1];
    const folder = DriveApp.getFolderById(folderId);
    const files = folder.getFiles();
    while (files.hasNext()) {
      const buff = files.next();
      // ファイル情報とハイパーリンクをリストに追加
      console.log([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()])
      list.push([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()]);
    }
  }
  return list;
}
```


ただ、これだとマイドライブ全体で実行時間を大きく超えちゃう!って場合は、
ここを変えてね。

1. スプレッドシートのsearchFolderシートのA1セルに任意のフォルダーのidを入力。
1. const folders = DriveApp.getRootFolder();　→　const folders = folder.getFolders();


```javascript

function getFileListInFolder() {
  // スプレッドシートとシートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const shId = ss.getSheetByName("searchFolder");
  const folderId = shId.getRange(1, 1).getValue();
  const folder = DriveApp.getFolderById(folderId);
  const folders = folder.getFolders()
  const folderList = [];

  // フォルダとサブフォルダのリストを再帰的に取得
  while (folders.hasNext()) {
    const c_folder = folders.next();
    console.log(c_folder.getName(), c_folder.getId(), c_folder.getUrl())
    folderList.push([c_folder.getName(), c_folder.getId(), c_folder.getUrl()]);
    getSubFolders(c_folder, folderList);
  }

  // ファイルリストを取得
  const allFileList = getChildFiles(folderList);

  // スプレッドシートの指定シートにハイパーリンク付きのリストを出力
  const shHyperLink = ss.getSheetByName('リスト');
  shHyperLink.getRange(2, 1, allFileList.length, 4).setValues(allFileList);
}

// サブフォルダを再帰的に取得する関数
function getSubFolders(parentFolder, folderList) {
  const folders = parentFolder.getFolders();
  while (folders.hasNext()) {
    const subFolder = folders.next();
    console.log([subFolder.getName(), subFolder.getId(), subFolder.getUrl()])
    folderList.push([subFolder.getName(), subFolder.getId(), subFolder.getUrl()]);
    getSubFolders(subFolder, folderList);
  }
}

// フォルダ内のファイルリストを取得する関数
function getChildFiles(folderList) {
  const list = [];
  for (let i = 0; i < folderList.length; i++) {
    const folderId = folderList[i][1];
    const folder = DriveApp.getFolderById(folderId);
    const files = folder.getFiles();
    while (files.hasNext()) {
      const buff = files.next();
      // ファイル情報とハイパーリンクをリストに追加
      console.log([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()])
      list.push([
        folder.getName(),
        folder.getUrl(),buff.getName(),buff.getUrl()]);
    }
  }
  return list;
}
```

基本情報だけ取り出してリンクも自動的に機能するし便利！

また今度、ファイル名とリンク以外の情報をリスト化する方法も書こうと思います！