GASとClaudeでGoogleドライブの素材フォルダをインデックス化した

GASとClaudeでGoogleドライブの素材フォルダをインデックス化した

Googleドライブのファイル管理をGASで自動化。フォルダを掘り続ける手間をなくしたくて、スプレッドシートへの自動インデックス化を実装しました。ファイルの種類ごとの色分けと画像のサムネイル表示も対応。コードはすべてClaudeが生成。IDを2箇所書き換えるだけで同じ仕組みが作れます。
2026.04.10

課題

デザイナーという職業上、日々Googleドライブのフォルダに、素材や成果物が蓄積されていきます。しかし、長い時間溜め続けることで、何がどこにあるか把握しづらくなっていました。

そこで、ファイルを探すたびにフォルダを掘っていく状態を解消したく、GASで自動インデックス化の仕組みを作りました。コードの生成はClaudeに依頼し、自分ではコードを書いていません。

やったこと

Googleドライブの指定フォルダをサブフォルダまで再帰的にスキャンし、ファイル名・種類・追加日・フォルダパス・リンクをスプレッドシートに記録します。10分ごとに自動実行するトリガーを設定しているので、ファイルが追加されると次の実行タイミングで自動的に反映されます。

あわせて、ファイルの種類ごとの色分けと、画像ファイルのサムネイル表示も実装しました。
gas1

仕組み

ClaudeにGASのコードを生成してもらい、Google Apps Scriptに貼り付けて動かしています。

フォルダごとにシートが分かれる構成にしました。
gas2

色分けのルールはサービスのブランドカラーを参考に
● PNG→水色
● JPG→赤
● PDF→濃いオレンジ
● Illustrator→オレンジ
● Photoshop→青
● テキスト系→グレー
…などとしてみました。
gas3

手順

準備

監視したいフォルダとスプレッドシートのIDをURLから取得しておきます。

https://drive.google.com/drive/folders/【フォルダID】
https://docs.google.com/spreadsheets/d/【スプレッドシートID】/

GASにコードを貼り付ける

スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、以下のコードを貼り付けます。冒頭2行のIDを書き換えてください。

const FOLDER_ID = '【フォルダID】';

const SHEET_ID = '【スプレッドシートID】';

const TYPE_COLORS = {
'jpeg': '#ffcccc', 'jpg': '#ffcccc',
'png': '#cce5ff',
'eps': '#ccffcc',
'illustrator': '#ffe0b2',
'x-photoshop': '#bdd7ee',
'pdf': '#f4a460',
'plain': '#e0e0e0', 'markdown': '#e0e0e0', 'text': '#e0e0e0',
'gif': '#d9ead3', 'webp': '#d9ead3',
'zip': '#ead1dc', 'x-rar': '#ead1dc',
};

function resetAndSync() {
const ss = SpreadsheetApp.openById(SHEET_ID);
const rootFolder = DriveApp.getFolderById(FOLDER_ID);

const subFolders = [];
const folderIter = rootFolder.getFolders();
while (folderIter.hasNext()) {
subFolders.push(folderIter.next());
}

processSheet(ss, 'ルート', rootFolder, false);

subFolders.forEach(folder => {
processSheet(ss, folder.getName(), folder, true);
});
}

function processSheet(ss, sheetName, folder, includeSubFolders) {
let sheet = ss.getSheetByName(sheetName);
if (sheet) {
sheet.clearContents();
sheet.clearFormats();
} else {
sheet = ss.insertSheet(sheetName);
}

const header = sheet.getRange(1, 1, 1, 6);
header.setValues([['サムネ', 'ファイル名', '種類', '追加日', 'フォルダ', 'リンク']]);
header.setBackground('#434343');
header.setFontColor('#ffffff');
header.setFontWeight('bold');
sheet.setRowHeight(1, 30);

const rows = [];
scanFolder(folder, rows, sheetName, includeSubFolders);

if (rows.length === 0) return;

sheet.getRange(2, 2, rows.length, 5).setValues(rows.map(r => [r[0], r[1], r[2], r[3], r[4]]));

rows.forEach((row, i) => {
const rowNum = i + 2;
sheet.setRowHeight(rowNum, 60);

const type = row[1];
const color = TYPE_COLORS[type] || '#f3f3f3';

sheet.getRange(rowNum, 1, 1, 6).setBackground(color);
sheet.getRange(rowNum, 1).setBackground('#ffffff');

if (['jpeg', 'jpg', 'png', 'gif', 'webp'].includes(type)) {
  const fileUrl = row[4];
  const fileId = fileUrl.replace('https://drive.google.com/file/d/', '').replace('/view?usp=drivesdk', '').replace('/view', '').trim();
  if (fileId) {
    const thumbUrl = `https://lh3.googleusercontent.com/d/${fileId}=w100`;
    sheet.getRange(rowNum, 1).setFormula(`=IMAGE("${thumbUrl}")`);
  }
}

});
}

function scanFolder(folder, rows, folderPath, includeSubFolders) {
const files = folder.getFiles();
while (files.hasNext()) {
const file = files.next();
rows.push([
file.getName(),
file.getMimeType().split('/').pop(),
Utilities.formatDate(file.getDateCreated(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm'),
folderPath,
file.getUrl()
]);
}
if (includeSubFolders) {
const subFolders = folder.getFolders();
while (subFolders.hasNext()) {
const sub = subFolders.next();
scanFolder(sub, rows, folderPath + ' > ' + sub.getName(), true);
}
}
}

function setTrigger() {
ScriptApp.getProjectTriggers().forEach(t => ScriptApp.deleteTrigger(t));
ScriptApp.newTrigger('resetAndSync')
.timeBased()
.everyMinutes(10)
.create();
}

実行する

保存後、setTriggerを実行して自動実行の設定を行います。次にresetAndSyncを実行すると、スプレッドシートにファイル一覧が反映されます。初回実行時は権限の確認ダイアログが表示されるので許可します。
gas4

結果

gas5
フォルダごとにシートが分かれ、画像ファイルはサムネイル表示されます。これでファイルを開かなくても中身が確認できるようになりました。

おわりに

インデックスを作ってから、ファイル探しにかける時間がかなり減りました。

コードの生成はすべてClaudeに依頼し、エラーが出るたびにログを貼って修正を繰り返す形で進めました。GASのコードを自分で書く必要はなく、フォルダIDとスプレッドシートIDを差し替えるだけで動くので、同じ課題を持っている方は試してみてください。

この記事をシェアする

関連記事