Inventory自動化システムで、チェーン実行が正しく動作しないバグを発見した。5つのサブフォルダを順番に処理するはずが、最初のフォルダを繰り返し処理していた。
問題は、100ファイル以上あるフォルダの処理が完了しても、次のフォルダに進まず、同じフォルダを最初から処理し直すことだった。
調査の結果、Phase 2(フォルダ処理完了)のコードに問題があることがわかった:
// 問題のあったコード
if (completedCount >= totalFiles) {
PropertiesService.getScriptProperties().deleteProperty(stateKey);
Logger.log('Phase 2 complete for folder: ' + currentFolder);
// inventoryChainIndexをインクリメントするコードが欠けていた!
}
フォルダ処理が完了すると、stateKey(進捗状況を保存するキー)は削除されるが、inventoryChainIndex(現在処理中のフォルダインデックス)はインクリメントされなかった。そのため、次回実行時に同じフォルダが再度処理された。
修正版:
if (completedCount >= totalFiles) {
PropertiesService.getScriptProperties().deleteProperty(stateKey);
// 自動化モードの場合、次のフォルダに進む
if (isAutomatedRun) {
const currentIndex = parseInt(
PropertiesService.getScriptProperties()
.getProperty('inventoryChainIndex') || '0'
);
const nextIndex = currentIndex + 1;
PropertiesService.getScriptProperties()
.setProperty('inventoryChainIndex', nextIndex.toString());
Logger.log('Chain advanced to index: ' + nextIndex);
}
Logger.log('Phase 2 complete for folder: ' + currentFolder);
}
この修正により、フォルダ処理が完了すると、システムは自動的に次のフォルダに進むようになった。
テスト時には、Logシートに「Chain advanced to index X」というメッセージが表示されることを確認した。これにより、チェーンが正しく前進していることが視覚的に確認できる。
現在、完全なInventoryチェーンは5つのサブフォルダすべてを順番に処理できる。日次トリガーでtriggerFullInventoryを実行すると、システムは自動的に次のフォルダに移動し、すべてのフォルダが処理されるまで継続する。