8
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GAS入門】Google Driveのファイル一覧を作成する

Last updated at Posted at 2021-05-10

TL;DR

Google Driveのファイル一覧をスプレッドシートに作成する、Google App Scriptを作成しました。
スプレッドシートを自分のフォルダにコピーするだけで使えます。

(画像はテンプレートを表示しています。スクリプトを実行すると自分のファイル一覧が取得できます。)
スクリーンショット 2021-05-08 0.39.53.png

背景

ファイルの保存先として、Google Driveを使っている企業はかなり存在すると思います。
一方でWikiなどのツールが社内で使われていない場合、Google Driveがドキュメントをまとめる役割を持ちます。Googleの素晴らしい技術により、検索は高速なため困ることはほとんどありませんが、フォルダの階層が多い場合などの一覧性という点では問題があります。
つまり今回のテーマは、**「Google Driveにファイルの一覧性を付加する」**です。

(ちなみに弊社ではConfluenceを活用しているので、上記の状態には当たりません。しかし所属しているチームでは、Google Driveを多用しているので、今回のツールを作成することとなりました。)

ポイント

  • 使いやすさを考え、ユーザーやフォルダ固有の設定が不要な実装としました
  • 簡単に、すぐに動くため、GASの理解にも役立つと考えました

利用方法

  1. ファイル一覧のスプレッドシートを自分のドライブに保存する。(ファイル > コピーを作成)
  2. スクリプトを実行 or トリガーを設定する

2.の詳細

一度だけ実行する場合は「スクリプトを実行」を、継続的にフォルダ内のファイルを確認したい場合は「トリガーを設定する」を確認してください。

まずは、スクリプトを開きます。
Spreadsheetを開いて、以下の手順で進めます。 (Spreadsheetのアップデートにより、多少方法が異なることもあります)

  • 新しいバージョン:拡張機能 > Apps Script
  • 古いバージョン:ツール > スクリプトエディタ

スクリプトを実行

myFunctionが選択されていることを確認して、実行を押してください!

トリガーを設定する

左メニューの目覚まし時計アイコン > トリガー > 右下のトリガーを追加
から、起動時や特定の時間に実行するトリガーを設定。

以上です!

実装詳細

利用するだけなら、上記の手順だけです。
せっかくなので、実装の詳細を説明します。

コード.gs
function myFunction() {
  // 一覧にしたいフォルダの階層を指定してください。
  // 0の場合、スプレッドシートが存在するフォルダのみのファイル一覧が表示されます。
  const depth = 1;

  // getActive()で結びついているスプレッドシートを取得
  const spreadSheet = SpreadsheetApp.getActive();
  const id = spreadSheet.getId();
  folderRoot = DriveApp.getFileById(id).getParents().next();
  // デフォルトの'シート1'をそのまま利用
  const sheet = spreadSheet.getSheetByName('シート1');

  // 1行目は見出しなので、2行目以降にファイル一覧を表示
  const rowInit = 2;
  const rowLast = sheet.getLastRow();
  // すでにデータがある場合、一旦クリア
  if (rowLast > 1) {
    sheet.getRange(rowInit, 1, rowLast - rowInit + 1, 100).clear();
  }

  // depthに合わせてフォルダを探索
  digFolders(folderRoot, sheet, depth)
}

function digFolders(rootFolder, sheet, depth) {
  // 現在のフォルダのファイル一覧を取得
  listFiles(rootFolder, sheet);

  // depthが0になるまで探索
  if (depth > 0) {
    const folders = rootFolder.getFolders();
    while (folders.hasNext()) {
      const folder = folders.next();
      // depthを1減らして、再帰実行
      digFolders(folder, sheet, depth - 1)
    }
  }
}

function listFiles(folder, sheet) {
  const files = folder.getFiles();
  let row = sheet.getLastRow() + 1;

  // 次のファイルが存在する場合、処理を継続
  // 1ファイルごとに1行ずつスプレッドシートに書き込み
  while (files.hasNext()) {
    const file = files.next();
    // ハイパーリンクをそのまま書き込み
    const folderValue = '=HYPERLINK("' + folder.getUrl() + '","' + folder.getName() + '")';
    sheet.getRange(row, 1).setValue(folderValue);
    const fileValue = '=HYPERLINK("' + file.getUrl() + '","' + file.getName() + '")';
    sheet.getRange(row, 2).setValue(fileValue);
    const fileValueEn = '=HYPERLINK("' + file.getUrl() + '",' + 'GOOGLETRANSLATE("' + file.getName() + '", "ja", "en")' + ')';
    sheet.getRange(row, 3).setValue(fileValueEn);
    sheet.getRange(row, 4).setValue(file.getLastUpdated());

    row = row + 1;
  }
}

まとめ

コピーしてスクリプトを実行するだけなので、ぜひ試してみてください!
便利なGASを使うきっかけになれば、幸いです。

8
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?