earthpg:GAS専門のプログラミングスクール

Google Apps Scriptでドキュメントをロックする方法と活用術

GASでドキュメントをロックできるって聞いたんだけど、どうやるのかな…?何か特別な設定がいるのかなぁ…
猫男
猫男
catman
catman
心配はいらない。catmanがGoogle Apps ScriptでGASドキュメントをロックする方法を教えてやろう!君も安心して使えるようになれるさ。

GASでドキュメントをロックする方法

GASでは、ドキュメントの操作中に排他制御(ロック)をかけることができる。これにより、データの整合性を保つことができるんだ。

ロックの基本:LockServiceを使う

LockServiceを使えば、簡単にロックをかけられる。それでは基本的な使い方を見てみよう。

 function lockDocument() {
 var lock = LockService.getDocumentLock();
 lock.waitLock(30000); // 最大30秒間ロックを試みる
 
 // ここに処理を書く
 Logger.log("ドキュメントがロックされました");
 lock.releaseLock();
 } 

このスクリプトでは、LockService.getDocumentLock()によりドキュメント単位でロックを取得することができる。

スクリプト実行中の安全性を確保する

ロックを取得すると、他の処理が影響を受けずに安全に進められる。待機時間を指定できるのも便利だ。

 function safeOperation() {
 var lock = LockService.getDocumentLock();
 lock.tryLock(30000);
 
 if (lock.hasLock()) {
 try {
 // ロック中の安全な処理
 Logger.log("ロック中に処理を実行中");
 } finally {
 lock.releaseLock();
 }
 } else {
 Logger.log("ロックを取得できませんでした");
 }
 } 

ロックが取得できたら、処理を行い、完了後にlock.releaseLock()でロックを解除しよう。

ロックがかかっている時って、他の人が間違って編集するのを防げるってことだよね。
猫男
猫男

GASドキュメントロックの活用術

ロック機能はドキュメントの整合性だけでなく、複数のユーザーが同時にアクセスする場合にも非常に有効だ。

複数ユーザーの利用時に役立つ

例えば、社内のチームが同じスプレッドシートを操作している場合、ロックがなければデータの競合が起きる可能性がある。

  • スプレッドシートのデータ編集
  • Googleドキュメントテンプレートの自動更新

このようなシーンで、ロックを活用すれば競合を防ぎ、互いの作業を滑らかに進めることができる。

catman
catman
君が慣れてくれば、社内の自動化ツールを効率的に管理できるだろう。大事なのはデータの整合性とセキュリティだ。

練習問題:GASドキュメントロックを使った処理を考えてみよう

スプレッドシートを使って、10秒おきにデータを更新するスクリプトを作成し、その更新処理中はロックをかけるようにしよう。

 

解答例と解説

以下は、10秒ごとにセルを更新し、処理中にロックをかけるサンプルだ。

 function updateSpreadsheet() {
 var lock = LockService.getDocumentLock();
 if (lock.tryLock(10000)) {
 try {
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var currentValue = sheet.getRange("A1").getValue();
 sheet.getRange("A1").setValue(currentValue + 1);
 }
 finally {
 lock.releaseLock();
 }
 } else {
 Logger.log("ロックを取得できませんでした");
 }
 } 

LockService.getDocumentLock()でロックを取得し、他の処理が干渉しないようtryLock()メソッドで非同期の試行を行う。

成功した場合、セルの値を更新し、完了後にロックを解除する流れになっている。

こういう活用を覚えれば、もっと便利にGASを使いこなせる気がしてきたよ!ありがとう、catmanさん!
猫男
猫男
catman
catman
その意気だ。どんな時でも、データ整合性を念頭において操作を進めることが大事さ。