Googleドライブの散らかった資料をGASで自動整理する方法 | GASおじさんのブログ
GASの基本

Googleドライブの散らかった資料をGASで自動整理する方法

ドライブ整理 GASの基本

この記事はGASおじさんのYoutube動画をChatGPTにブログ記事化させたものです。

大量の資料ファイルが1つのフォルダに溜まってくると、必要な資料を探すだけでも時間がかかります。今回の動画では、Google Apps Script(GAS)を使って「クライアントID_クライアント名_書類名」という命名規則のファイルを自動的に整理する方法を紹介しました。本記事ではその内容をブログ形式で整理し、スクリプトのポイントを解説します。

想定シナリオとゴール

  • Googleドライブの1つのフォルダに、複数クライアントの資料がまとめて置かれている。
  • ファイル名には 書類タイトル_C001_企業名 のようにクライアントIDと企業名が含まれている。
  • クライアントごとのフォルダを自動生成し、該当する資料をそれぞれのフォルダに移動したい。

最終的には、クライアントIDごとにフォルダが作成され、対応する書類がすべて適切なフォルダにまとまった状態を目指します。

処理の全体像

  1. 整理対象となる親フォルダ(今回の例では「動画」フォルダ)のIDを取得する。
  2. 親フォルダ配下のファイルをGASで取得する。
  3. 各ファイル名からクライアントIDと企業名を抜き出し、新しいフォルダ名を組み立てる。
  4. 既に同名フォルダがあるかを確認し、なければ作成する。
  5. 対応するフォルダにファイルを移動する。

イテレーターでファイルを扱う理由

GASの DriveApp#getFiles() や getFoldersByName() は配列ではなく「イテレーター」という特殊なオブジェクトを返します。配列のように for...of で回そうとするとエラーになるので、以下のように while (iterator.hasNext()) { iterator.next(); } という書き方が必須です。

この仕様になっているのは、大量のファイル・フォルダを一度にメモリへ読み込まず、1件ずつ安全に処理するためです。動画では実際にログを確認し、イテレーターであることを確かめる手順も紹介しました。

フォルダ作成と重複対策

各ファイルに対して次の処理を行います。

  1. split("_") でファイル名を分割し、クライアントIDと企業名を取り出す。
  2. IDが存在しないファイル(例: 制作中のスクリプト本体など)はスキップする。
  3. folder.getFoldersByName(newFolderName) で目的のフォルダが既にあるか確認する。
  4. なければ folder.createFolder(newFolderName) で新規作成する。
  5. file.moveTo(newFolder) で該当フォルダへ移動する。

この分岐を入れておくことで、「未定義フォルダができてしまう」「同名フォルダが量産される」といったトラブルを防げます。

完成したスクリプト

動画で解説した最終的なスクリプトは以下の通りです。フォルダIDの部分だけ、自分の環境に合わせて置き換えてください。

function myFunction() {
  const folderId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();
  while (files.hasNext()) {
    const file = files.next();
    const fileName = file.getName();
    const id = fileName.split("_")[1];
    const name = fileName.split("_")[2];
    const newFolderName = id + "_" + name;
    if (id) {
      const folders = folder.getFoldersByName(newFolderName);
      if (folders.hasNext()) {
        const newFolder = folders.next();
        file.moveTo(newFolder);
      } else {
        const newFolder = folder.createFolder(newFolderName);
        file.moveTo(newFolder);
      }
    }
  }
}

まとめと次の一歩

今回のポイントは「DriveAppが返すのは配列ではなくイテレーターである」という点に気づき、hasNext() と next() を活用することでした。ファイル名に含まれるメタ情報を活かせば、フォルダ作成から振り分け、移動までを一気に自動化できます。

応用例としては、業務日報の月別仕分けや、請求書の年度別アーカイブなどにも応用できます。まずは自分のドライブで同じ命名規則のファイルを用意し、このスクリプトを動かしてみてください。動きがわかれば、より複雑な整理業務にも挑戦できるようになります。

コメント

スポンサーリンク
タイトルとURLをコピーしました