Googleドライブのフォルダ名とファイル名、URLをスプレッドシートに出力する

Googleドライブの特定のフォルダ配下のフォルダ名とファイル名、URLをGoogleスプレッドシートに出力するサンプルです。
フォルダ配下にさらにフォルダがある場合は、全てのフォルダを再帰処理します。

こんな感じ。フォルダーごとフォルダ名とURL、その配下のファイル名とURLを全部取得します。
![スクリーンショット 2020-08-17 16.24.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/9d353615-4e53-ef8a-ab5d-fcd221207fe8.png)


# 前提

* Googleアカウントの取得

# 注意点

複数のGoogleアカウントでログインされている場合は、一度全てログアウトして、実行対象のGoogleドライブのアカウントにて再度ログインしてください。:bow_tone1:


# サンプルコード

```javascript
function fetchImage() {

  // 環境変数のセット
  const scriptProperties = PropertiesService.getScriptProperties();
  const SHEET_ID = scriptProperties.getProperty('SHEET_ID'); // SpreadSheet ID
  const SpreadSheetObj = SpreadsheetApp.openById(SHEET_ID);
  const FOLDER_ID = scriptProperties.getProperty('FOLDER_ID'); // Googleドライブフォルダー ID
  const folder = DriveApp.getFolderById(FOLDER_ID);
  // const folder = DriveApp.getRootFolder(); // ルートフォルダ配下を取得する場合はこちら
  console.log(folder.getName()); // 開始フォルダー

  // 特定のフォルダー配下のフォルダ名とURL、サイズを表示する
  function getAllFolder(f) {
    const folders = f.getFolders();
    while (folders.hasNext()) {
      const subFolder = folders.next();
      console.log(subFolder.getName());
      console.log(subFolder.getName(), subFolder.getUrl(), subFolder.getSize());
      appendLogToSpreadsheet(['Folder' ,subFolder.getName(), subFolder.getUrl(), subFolder.getSize()], SHEET_ID, 'シート1');
      getAllFile(subFolder);
      getAllFolder(subFolder);
    }
  }
  getAllFolder(folder);
  
  // フォルダー配下のファイル名とURL、サイズを表示する
  function getAllFile(f) {
    const files = f.getFiles();
    const listOfFiles = [];
    while (files.hasNext()) {
      const file = files.next();
      console.log(file.getName(), file.getUrl(), file.getSize());
      appendLogToSpreadsheet(['---file', file.getName(), file.getUrl(), file.getSize()], SHEET_ID, 'シート1');
    }
  }

}

// スプレッドシートにログを書き出す
function appendLogToSpreadsheet(log, sheetId, sheetName) {
    if (sheetName === void 0) { sheetName = 'sheet1'; }
    var spreadSheet = SpreadsheetApp.openById(sheetId);
    spreadSheet.getSheetByName(sheetName).appendRow([new Date(), log[0], log[1], log[2], log[3]]);
    SpreadsheetApp.flush();
}
```

# 利用方法

1. Googleドライブの探索対象の先頭フォルダのIDをメモします。
2. フォルダ名、ファイル名、URLをリスト出力するスプレッドシートを作成します。
3. 新規 Google Apps Scriptプロジェクトを作成します。
4. ファイルにサンプルコードをコピーします。
5. プロジェクトのスクリプトプロパティにプログラム内で利用する環境変数を設定します。
6. プログラムを実行します。
7. スプレッドシートを確認します。

# 説明

## 1. Googleドライブの探索対象の先頭フォルダのIDをメモします。

後ほど環境変数にセットする為に、GoogleドライブのフォルダのIDをメモしておきます。
フォルダIDは、対象フォルダに移動した際のURLの下記の部分です。

`https://drive.google.com/drive/folders/{フォルダーID}`

※{フォルダーID}の{}の部分は除いてください。


## 2. フォルダ名、ファイル名、URLをリスト出力するスプレッドシートを作成します。

Googleドライブにて、新規にGoogleスプレッドシートを作成します。
![スクリーンショット 2020-08-17 15.03.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/9c85b6d8-f408-40a5-b7be-d99c935c0280.png)

ヘッダー列を下記の様に設定します。
![スクリーンショット 2020-08-17 15.05.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/19a58dde-8732-8c90-d8e4-8b9097e3de79.png)


| 1 | 2 | 3 | 4 | 5 |
|:-:|:-:|:-:|:-:|:-:|
| 日付  | 区分  | 名称  | URL  | サイズ  |


区分にはフォルダーorファイルの区分、名称にはフォルダorファイルの名称がセットされます。

後ほど環境変数にセットする為に、スプレッドシートのIDをメモしておきます。
スプレッドシートIDは、スプレッドシートのURLの下記の部分です。

`https://docs.google.com/spreadsheets/d/{スプレッドシートID}/edit#gid=0`

※{スプレッドシートID}の{}の部分は除いてください。


## 3. 新規 Google Apps Scriptプロジェクトを作成します。

Googleドライブにて、新規にGoogle Apps Scriptプロジェクトを作成します。
※その他→Google Apps Scriptを選択
![スクリーンショット 2020-08-17 15.08.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/d3a5c70f-8b23-62e3-a2ef-696adac7d036.png)

新規プロジェクト画面が表示されます。
![スクリーンショット 2020-08-17 15.12.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/4d283e7f-b78c-711a-d887-3ae4f16256f6.png)

プロジェクト名を変更します。
ファイル→名前を変更
![スクリーンショット 2020-08-17 15.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/18b9f98a-a17e-aa70-07b8-789e1764cc6d.png)

名前変更ダイアログ
![スクリーンショット 2020-08-17 15.13.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/9d0bfff7-83a1-92ae-0438-f1a9d12fda32.png)

名前を変更してOK押下します。
gas-sample-01

![スクリーンショット 2020-08-17 15.13.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/670de9c2-56f3-d94f-d09e-42698756f614.png)

プロジェクト名が変更されました。
![スクリーンショット 2020-08-17 15.14.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/305b8cb6-672b-5ac5-30c5-df440ce411be.png)


## 4. ファイルにサンプルコードをコピーします。

function myFunction() {
}
部分を前段のサンプルコードで置き換えます。

置き換えたら保存してください。
※ファイル→保存を選択


## 5. プロジェクトのスクリプトプロパティにプログラム内で利用する環境変数を設定します。

前段の1.と2.でメモした、フォルダーIDとスプレッドシートIDを下記の様に設定します。
※{}の記号は入れないでください。

| プロパティ | 値 |
|:-:|:-:|
| FOLDER_ID  | {フォルダーID}  |
| SHEET_ID  | {スプレッドシートID}  |

スクリプトプロパティを表示します。
ファイル→プロジェクトのプロパティを選択
![スクリーンショット 2020-08-17 15.36.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/9bc146a1-74b2-c197-8e6c-9d16e2df8051.png)

スクリプトのプロパティタブを選択
![スクリーンショット 2020-08-17 15.36.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/76eddde6-67f9-7f56-4d24-f74bf5c0bf0d.png)

行を追加を押下して、プロパティと値をセットします。
![スクリーンショット 2020-08-17 15.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/b7b8f364-9e97-5e90-a01e-4e6eab630c7a.png)

最後に保存ボタンを押下します。

## 6. プログラムを実行します。

関数を選択します
※関数名→fetchImageをプルダウンから選択します。
![スクリーンショット 2020-08-18 10.16.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/cd156961-3f8a-5bb3-14f9-9c6170521fb5.png)


実行ボタン(赤囲み部分)を押下
![スクリーンショット 2020-08-18 10.20.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/b3e284e4-9c05-d5e0-17af-f71ec4ca0859.png)


### Google認証

初回は認証が必要になります

許可を確認を押下
![スクリーンショット 2020-08-17 02 15.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/4326d37d-e04d-1f87-6890-8291379546f9.png)

Googleアカウントを選択
![スクリーンショット 2020-08-17 03 15.58.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/27fed75b-78a9-3787-fb57-164e3925d489.png)


詳細を押下
![スクリーンショット 2020-08-17 04 15.59.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/d7fe2385-1d76-04d2-c315-3c51cf6f5b86.png)


gas-sample-01(安全ではないページ)に移動を選択
![スクリーンショット 2020-08-17 05 15.59.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/dc060157-c36c-e2e3-fb10-45afb5d1f39e.png)


許可を押下
![スクリーンショット 2020-08-17 07 15.59.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/e84e7c59-3160-4db1-89f2-74c476aca70d.png)


実行が終了するまでしばらく待ちます。


## 7. スプレッドシートを確認します。

スプレッドシートに出力されます。
![スクリーンショット 2020-08-17 16.24.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/9d353615-4e53-ef8a-ab5d-fcd221207fe8.png)


# 参考

* [Class DriveApp](https://developers.google.com/apps-script/reference/drive/drive-app)
* [Class Folder](https://developers.google.com/apps-script/reference/drive/folder)
* [Class File](https://developers.google.com/apps-script/reference/drive/file)
* [Class FolderIterator](https://developers.google.com/apps-script/reference/drive/folder-iterator)
* [Class FileIterator](https://developers.google.com/apps-script/reference/drive/file-iterator)