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.");
}