TL;DR
Google Driveのファイル一覧をスプレッドシートに作成する、Google App Scriptを作成しました。
スプレッドシートを自分のフォルダにコピーするだけで使えます。
(画像はテンプレートを表示しています。スクリプトを実行すると自分のファイル一覧が取得できます。)
背景
ファイルの保存先として、Google Driveを使っている企業はかなり存在すると思います。
一方でWikiなどのツールが社内で使われていない場合、Google Driveがドキュメントをまとめる役割を持ちます。Googleの素晴らしい技術により、検索は高速なため困ることはほとんどありませんが、フォルダの階層が多い場合などの一覧性という点では問題があります。
つまり今回のテーマは、**「Google Driveにファイルの一覧性を付加する」**です。
(ちなみに弊社ではConfluenceを活用しているので、上記の状態には当たりません。しかし所属しているチームでは、Google Driveを多用しているので、今回のツールを作成することとなりました。)
ポイント
- 使いやすさを考え、ユーザーやフォルダ固有の設定が不要な実装としました
- 簡単に、すぐに動くため、GASの理解にも役立つと考えました
利用方法
- ファイル一覧のスプレッドシートを自分のドライブに保存する。(ファイル > コピーを作成)
- スクリプトを実行 or トリガーを設定する
2.の詳細
一度だけ実行する場合は「スクリプトを実行」を、継続的にフォルダ内のファイルを確認したい場合は「トリガーを設定する」を確認してください。
まずは、スクリプトを開きます。
Spreadsheetを開いて、以下の手順で進めます。 (Spreadsheetのアップデートにより、多少方法が異なることもあります)
- 新しいバージョン:拡張機能 > Apps Script
- 古いバージョン:ツール > スクリプトエディタ
スクリプトを実行
myFunctionが選択されていることを確認して、実行を押してください!
トリガーを設定する
左メニューの目覚まし時計アイコン > トリガー > 右下のトリガーを追加
から、起動時や特定の時間に実行するトリガーを設定。
以上です!
実装詳細
利用するだけなら、上記の手順だけです。
せっかくなので、実装の詳細を説明します。
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を使うきっかけになれば、幸いです。