「来週の監査のために、契約書の管理台帳を作っておいて」
「共有フォルダが汚すぎるから、一旦全部リストアップして整理しよう」
上司は簡単に言いますが、フォルダの中には数百個のファイル。
一つ一つ「名前の変更」を押して、ファイル名をコピーし、エクセルに貼り付ける。
さらに「共有リンク」を取得して、また貼り付ける。
これを100回繰り返す?
正気の沙汰ではありません。そんなことをしていたら、日が暮れるどころか年が明けてしまいます。
今回は、Googleドライブの指定したフォルダに入っている全ファイルの「名前」「URL」「更新日」「更新者」を、ボタン一発でスプレッドシートに書き出すツールを作ります。
数百個のファイルがあろうと、処理時間は数秒。
人間がやるべきなのは、出来上がったリストを見て「どれを捨てるか」判断することだけです。
1. 何を作るの?(完成イメージ)
- スプレッドシートに、リスト化したい「GoogleドライブのフォルダID」を入力する。
- 実行ボタンを押す。
- シートに、ファイルの情報(名前・URL・更新日など)がズラッと書き出される。
これだけです。シンプルですが、破壊力は抜群です。
Step 1:台所(スプレッドシート)を準備する
新規のスプレッドシートを作成し、シート名を「ファイル一覧」に変更してください。(ここ重要!)
そして、1行目に見出しを作ります。
- A1セル: フォルダID(※ここに入力します)
- A3セル: ファイル名
- B3セル: URL
- C3セル: 最終更新日
- D3セル: サイズ(KB)
※2行目は空けておいてください。3行目からデータが書き込まれます。
Step 2:リスト化したい「フォルダID」を見つける
ここが今回の最大のポイントです。
Googleドライブを開き、中身をリストアップしたいフォルダの中に入ってください。
ブラウザのURLバーを見てみましょう。
“https://drive.google.com/drive/folders/1aBcDeFgHiJkLmNoPqRsTuVwXyZ”
こんな感じになっているはずです。
この末尾の 「folders/」より後ろのぐちゃぐちゃした英数字。
これが「フォルダID」です。これをコピーして、スプレッドシートの A1セル に貼り付けてください。
Step 3:魔法の書(スクリプトエディタ)を開く
いつもの手順です。
- スプレッドシートのメニュー「拡張機能」>「Apps Script」。
- 開いた画面の文字を全部消して真っ白にする。
Step 4:魔法の呪文(コード)をコピペする
以下のコードをコピーして貼り付けてください。
今回は書き換える必要はありません。そのまま使えます。
function listFilesFromDrive() {
// ■設定:書き出すシートの名前
const sheetName = "ファイル一覧";
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
Browser.msgBox("シート「" + sheetName + "」が見つかりません。作成してください。");
return;
}
// A1セルに入力された「フォルダID」を読み取る
const folderId = sheet.getRange("A1").getValue();
if (!folderId) {
Browser.msgBox("A1セルにフォルダIDを入力してください。");
return;
}
try {
// フォルダを取得
const folder = DriveApp.getFolderById(folderId);
// フォルダ内のすべてのファイルを取得
const files = folder.getFiles();
// 書き出すデータを貯める箱
let output = [];
while (files.hasNext()) {
const file = files.next();
output.push([
file.getName(), // ファイル名
file.getUrl(), // URL
file.getLastUpdated(), // 最終更新日
Math.round(file.getSize() / 1024) // サイズをKBに変換
]);
}
// 既に書かれている古いデータをクリア(3行目以降)
const lastRow = sheet.getLastRow();
if (lastRow >= 3) {
sheet.getRange(3, 1, lastRow - 2, 4).clearContent();
}
// データがあれば一気に書き出す
if (output.length > 0) {
sheet.getRange(3, 1, output.length, output[0].length).setValues(output);
Browser.msgBox("完了!" + output.length + "個のファイルを書き出しました。");
} else {
Browser.msgBox("フォルダの中にファイルが見つかりませんでした。");
}
} catch (e) {
Browser.msgBox("エラーが発生しました。フォルダIDが正しいか確認してください。\n" + e.message);
}
}
貼り付けたら、フロッピーアイコン(💾)で保存します。
Step 5:実行ボタンを作る(オプション)
毎回スクリプト画面を開くのは面倒なので、スプレッドシート上にボタンを作りましょう。
- スプレッドシートに戻る。
- メニュー「挿入」>「図形描画」
- 図形ツール(丸や四角)でボタンっぽい絵を描き、テキストボックスで「リスト更新」と書く。
- 「保存して終了」を押すと、シート上に図形が現れます。
- その図形をクリックし、右上の「︙」>「スクリプトを割り当て」
- listFilesFromDrive と入力してOK。
これで、このボタンを押すだけで魔法が発動します!
(※初回のみ「承認」画面が出ます。前回同様に突破してください)
⚠️ 注意点:この魔法の限界
このツールは非常に便利ですが、一つだけ弱点があります。
それは「指定したフォルダの直下にあるファイルしか見ない」ということです。
フォルダの中にさらにフォルダ(サブフォルダ)がある場合、その中身までは見に行きません。
「マトリョーシカ」のように何重にもなったフォルダを、奥底まですべてさらってリスト化するには、「再帰処理(さいきしょり)」という少し高度な魔法が必要です。
もし「フォルダの中のフォルダ」まで全部リスト化したいなら…
「ウチの共有ドライブ、フォルダ階層が深すぎて迷宮になってるんだけど……」
「サブフォルダの中身も含めて、数千ファイルを一気に棚卸ししたい」
そんな時は「うしろぽっけ」にお任せください。
今回紹介したコードを改造して「フォルダ構造を維持したまま全ファイルを洗い出す強力なツール」をご提供します。
手入力で徹夜する前に、まずはご相談を。
あなたの貴重な時間は、コピペのためではなく、もっとクリエイティブな仕事のためにあるのですから。
作成を依頼する