Google Apps Script とロック
恐ろしいことに Google Apps Script(以降 GAS)は並列で実行される。普段 JS を書いていると意識しないが、並列実行ほどプログラムにおいて恐ろしいものはない。
ロックは、以下のような関数で取得できる。
var documentLock = LockService.getDocumentLock();
最大で10秒間待って、ロックを取得するには以下のようなコードを書く。
if (documentLock.tryLock(10000)) { // ロックを取得したときの処理 }
取得したロックを解除するには次の関数を呼ぶ。
documentLock.releaseLock();
シートを編集するような処理を書く場合、そもそもロックしなくて良いケースなどレアなので、次のようなコードを脳死で書いておけばいいと思いました。
var documentLock = LockService.getDocumentLock(); if (documentLock.tryLock(10000)) { try { main(); } finally { documentLock.releaseLock(); } } else { console.log("failed to aquire lock."); }