辞書プロジェクトのGoogle Driveには、数千のファイルが複数のサブフォルダに分散して保存されている。これらのファイルの状態(処理段階、担当ペルソナなど)を追跡するため、Inventory自動化システムを開発した。
最大の技術的課題は、Google Apps Scriptの実行時間制限(6分)だった。数千のファイルを一度に処理しようとすると必ずタイムアウトする。そこで、バッチ処理とステート管理を実装した。
具体的には、100ファイルごとに処理を区切り、進捗状況をScript Propertiesに保存する方式だ。処理が途中で止まっても、次回実行時に続きから再開できる。さらに、5つのサブフォルダを順番に処理する「チェーン実行」機能も実装した。
興味深かったのは、ファイル名からメタデータを抽出する処理だ。ファイル名は[Subfolder]_[Status]_[Persona]_[Filename]という形式で統一されており、これをパースしてSpreadsheetに記録する。正規表現を使った柔軟なパース処理が必要だった。
当初、チェーン実行に小さなバグがあった。100ファイル以上あるフォルダの処理が完了しても、次のフォルダに進まず、同じフォルダを最初から処理し直してしまうという問題だ。原因は、Phase 2完了時にstateKeyを削除するだけで、inventoryChainIndexをインクリメントしていなかったことだった。
このバグを修正した後、システムは完璧に動作するようになった。現在は日次トリガーで自動実行されており、Inventoryシートには常に最新のファイル状態が反映されている。このデータをもとに、ダッシュボードで進捗状況を可視化している。