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を実行すると、システムは自動的に次のフォルダに移動し、すべてのフォルダが処理されるまで継続する。