【ウェブロックスエーピーアイ】

Web Locks API とは?

最終更新:
💡 同じ名前のロックで、処理の順番をそろえる

Web Locks APIは、ブラウザのタブやワーカーが名前付きロックを使って処理の順番を調整するAPI。同じ名前で協調するコードが対象で、データへのアクセスを強制的に禁止するセキュリティ機能ではありません。

📌 このページのポイント
Web Locks API:同じ作業を協調同じ名前「sync」の排他ロックの例タブA:保持中処理が終わるまでロックを保持タブB:待機中Aの解放を待つ取得後に処理開始解放後同じ保存領域で協調するコードが対象ロックを使わないコードは止められない別端末の同期やアクセス権は別の仕組み
通常のexclusive要求の例です。矢印はAの解放後にBが進める関係で、タブ間の通信ではありません。ロック取得をブラウザーが調整し、コールバックの処理が終わると解放します。
ひよこ ひよこ
Web Locks APIって何をするの?
ペンギン先生 ペンギン先生
同じWebアプリを複数のタブで開いたとき、例えばサーバーへの同期を一つのタブだけに任せるために使えるよ。アプリが決めた名前のロックをブラウザへ要求して、処理の順番を調整するんだ。タブだけでなくワーカーでも使えるね。
ひよこ ひよこ
タブBの処理は必ず待ってくれる?
ペンギン先生 ペンギン先生
両方が同じ名前の排他ロックを要求するように書けば、Aが保持している間、通常Bの要求は待機するよ。ロックを要求せず直接データを触るコードは止められない。APIがIndexedDBやファイルを自動で施錠するわけではないんだ。
ひよこ ひよこ
ロックはいつ返すの?
ペンギン先生 ペンギン先生
navigator.locks.request()に渡したコールバックの処理が終わると解放されるよ。非同期処理なら、その完了を示すPromiseを返すかawaitする。通信を始めただけでコールバックが終わると、通信の完了前にロックが解放されてしまうので注意しよう。
ひよこ ひよこ
sharedなら読み取り専用になる?
ペンギン先生 ペンギン先生
読み取り専用にはならないよ。同じ名前のsharedロックを複数が持てるという意味で、実際に何をするかはコード次第。書込みはexclusive、読取りはsharedという約束を設計できるけれど、データベースのトランザクションの代わりになるわけではないんだ。
ひよこ ひよこ
どのサイトや端末からでも使える?
ペンギン先生 ペンギン先生
APIは安全なコンテキストで使い、navigator.locksが利用可能か確認しよう。対象は同じ保存領域を共有するブラウザ内のコードで、通常は同じオリジンのタブやワーカーだよ。別端末や別のブラウザとの分散ロックではない。query()では保持中と待機中の状態を調べられるね。
もっと詳しく知りたい人へ

同じドメインなら、いつでも同じロックを共有する?

オリジンはドメイン名だけでなくスキームとポートも含みます。さらに仕様では保存領域(storage bucket)を共有するコードが協調対象です。保存領域の分離やブラウザのプロファイルが異なる場合まで同じロックになるとは限りません。APIの有無だけで、すべての画面が同じロックを共有すると判断しないようにしましょう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Web Locks API」って出てきたら「協調するブラウザー内のコードで、同じ作業の順番を調整するAPI」と思えばだいたいOK!
📖 おまけ:英語の意味
「Web Locks API」 = ウェブロックAPI
💬 Lockは処理の順番を調整するためのロック。鍵のようにデータを守るアクセス制御とは異なり、同じ名前でロックを取得するコード同士が協調する仕組みだよ。

参考資料

← 用語集にもどる