HTTPステータスコード423 Lockedとは? デジタル「使用中」サイン

INEZA Felin-Michel

INEZA Felin-Michel

17 10月 2025

HTTPステータスコード423 Lockedとは? デジタル「使用中」サイン

重要なドキュメントでチームメイトと共同作業をしています。重要な編集をするためにドキュメントを開き、保存しようとしたまさにその時、「このドキュメントは現在、他のユーザーによってロックされています。後でもう一度お試しください。」というメッセージが表示されます。しかし、イライラする代わりに、賢いシステムが競合を防いでくれたおかげで、同僚の作業を上書きするのを避けることができたことに安堵感を覚えます。

この共同作業のセーフティネットは、HTTPのより専門的なステータスコードの一つである423 Lockedによって支えられています。このコードは、従来の意味でのセキュリティや権限に関するものではなく、共同作業環境における競合の防止を目的としています。

423ステータスコードは、サーバーが「他の誰かがすでにこのリソースで作業しているため、今は変更できません。順番をお待ちください。」と伝える方法です。これは、ホテルの部屋のドアにある「起こさないでください」のサインや、共有Googleドキュメントで他の誰かのカーソルが活発にタイピングしているのを見るのとデジタル的に同じです。

しかし、ご心配なく。この記事の終わりには、その意味を理解するだけでなく、なぜそれが起こるのかどうすれば修正できるのか、そして将来どうすればそれを避けられるのかもわかるでしょう。

API開発者またはテスターの方には、Apidogのようなツールが423エラーの検出と解決をいかに簡単にするかをお見せします。

共同編集ツール、バージョン管理システム、または複数のユーザーが互いに競合する可能性のあるアプリケーションを扱っている場合、423を理解することは非常に価値があります。

💡
同時アクセスを処理するAPIを構築またはテストしている場合、複数のユーザーをシミュレートできるツールが必要です。Apidogを無料でダウンロードしてください。これは、ロックメカニズムと同時リクエストをテストし、アプリケーションが共同作業をスムーズに処理できるようにするオールインワンのAPIプラットフォームです。

それでは、リソースロックの世界とHTTP 423ステータスコードについて探っていきましょう。

問題:同時編集の危険性

423が存在する理由を理解するには、同時変更の問題を理解する必要があります。アリスとボブという2人のユーザーが、同じ顧客レコードを同時に編集していると想像してください。

  1. 午後3時00分00秒: アリスとボブは両方とも顧客レコードを取得します。表示されているのは:{"name": "John", "email": "john@old.com"}
  2. 午後3時00分01秒: アリスはメールアドレスをjohn@new.comに変更して保存します。
  3. 午後3時00分02秒: ボブは名前を「Jonathan」に変更して保存します。
  4. 結果: ボブの保存は、彼が古いバージョンで作業していたため、アリスのメールアドレスの変更を上書きしてしまいます。最終的なレコードは{"name": "Jonathan", "email": "john@old.com"}と表示され、アリスの作業は失われます!

これは「失われた更新」問題と呼ばれ、共同作業システムにおける古典的な問題です。423 Lockedステータスコードはその解決策の一部です。

HTTP 423 Locked は実際に何を意味するのか?

423 Lockedステータスコードは、HTTPへのWebDAV(Web Distributed Authoring and Versioning)プロトコル拡張の一部です。これは、リソースがロックされているため、メソッド(PUT、DELETE、PROPPATCHなど)がそのリソースに対して実行できなかったことを示します。

レスポンスには、通常XMLを使用して、ロックに関する情報がレスポンスボディに含まれるべきです。

典型的な423レスポンスは次のようになります。

HTTP/1.1 423 LockedContent-Type: application/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8"?>
<D:error xmlns:D="DAV:">
  <D:lock-token-submitted>
    <D:href>/workspace/doc.txt</D:href>
  </D:lock-token-submitted>
</D:error>

または、より役立つバージョンは次のようになります。

HTTP/1.1 423 LockedContent-Type: application/json
{
  "error": "ResourceLocked",
  "message": "This document is currently being edited by alice@example.com",
  "locked_until": "2024-01-15T14:30:00Z",
  "locked_by": "alice@example.com"
}

このコードは、リモートサーバー上のファイルを共同で編集および管理することを可能にするHTTPの拡張プロトコルであるWebDAV(Web Distributed Authoring and Versioning)に由来します。

より簡単に言えば:

423 Lockedエラーは、リソース(ファイル、オブジェクト、レコードなど)が現在他の誰かまたは何かに「ロック」されており、あなたのリクエストがそれを変更しようとしたときに発生します。

公式定義(RFC 4918)

RFC 4918(WebDAVを定義している)によると:

「423(Locked)ステータスコードは、メソッドのソースまたはターゲットリソースがロックされていることを意味します。」

これは次のことを意味します:

要するに:今は変更できません

423 Locked が表示される一般的なシナリオ

Web開発API設計の両方でこのステータスコードが現れる、いくつかの実世界の例を見ていきましょう。

1. ファイルの同時編集

Webアプリケーションがファイルのアップロード、更新、または共同編集を許可している場合、競合を防ぐためにロックメカニズムを使用することがあります。

ファイルがロックされている場合(他のユーザーが同時に編集するのを防ぐため)、それを上書きしようとすると423がトリガーされます。

例:

2. データベースレコードのロック

機密データ(在庫、銀行、スケジュールなど)を扱うAPIでは、競合状態を防ぐために更新中にレコードがロックされることがよくあります。

あるトランザクションが変更のためにレコードをロックし、別のリクエストがそれを更新しようとすると、後者のリクエストは423 Lockedを受け取る可能性があります。

3. バージョン管理システム

Gitベースのプラットフォームやファイルバージョン管理をサポートするCMSソフトウェアのようなシステムでは、マージまたは承認プロセスが完了するまでファイルやエンティティがロックされることがあります。

その期間中にプッシュまたは削除しようとすると、423レスポンスがトリガーされる可能性があります。

4. APIレート制限またはワークフローロック

一部のAPIは、ワークフローの順序を維持するために一時的なロックを実装しています。

例えば、リソースが処理中または検証中である間はロックされ、それが完了するまで新しい変更はブロックされます。

5. WebDAVファイル操作

423はWebDAVに由来するため、ロックされたリソースに対するCOPYMOVEDELETEPUTなどの操作は、このステータスを返します。

ロックメカニズム:実際の動作

リソースロックは通常、WebDAV準拠のシステムで特定のワークフローに従います。

ステップ1:ロックの取得

編集する前に、クライアントはLOCKメソッドを使用してリソースのロックを要求します。

LOCK /documents/report.txt HTTP/1.1
Host: example.comTimeout: Second-3600Content-Type: application/xmlContent-Length: 150
<?xml version="1.0" encoding="utf-8"?>
<D:lockinfo xmlns:D="DAV:"><D:lockscope><D:exclusive/></D:lockscope><D:locktype><D:write/></D:locktype><D:owner>Alice</D:owner></D:lockinfo>

ステップ2:サーバーがロックを許可

サーバーは成功を返し、ロックトークンを提供します。

HTTP/1.1 200 OKContent-Type: application/xmlLock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4>
<?xml version="1.0" encoding="utf-8"?>
<D:prop xmlns:D="DAV:"><D:lockdiscovery><D:activelock><D:locktype><D:write/></D:locktype><D:lockscope><D:exclusive/></D:lockscope><D:depth>0</D:depth><D:owner>Alice</D:owner><D:timeout>Second-3600</D:timeout><D:locktoken><D:href>urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4</D:href></D:locktoken></D:activelock></D:prop>

ステップ3:ボブが編集を試みる

アリスがロックを保持している間に、ボブは同じドキュメントを変更しようとします。

PUT /documents/report.txt HTTP/1.1Host: example.comContent-Type: text/plain
This is Bob's attempted change.

ステップ4:サーバーが423 Lockedを返す

サーバーはチェックし、アリスがリソースに対して排他的ロックを保持していることを確認します。

HTTP/1.1 423 LockedContent-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<D:error xmlns:D="DAV:"><D:lock-token-submitted><D:href>/documents/report.txt</D:href></D:lock-token-submitted></D:error>

ステップ5:アリスがロックを解除

アリスは編集が完了すると、明示的にリソースのロックを解除します。

UNLOCK /documents/report.txt HTTP/1.1
Host: example.comLock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4>

WebDAVにおけるロックの種類

WebDAVは異なるロック戦略をサポートしています。

排他的ロック

一度に1人のユーザーのみが排他的ロックを保持できます。これは最も一般的なタイプであり、最も強力な競合防止策を提供します。

共有ロック

複数のユーザーが同時に共有ロックを保持できますが、共有ロックが存在する間は誰も排他的ロックを取得できません。これは、変更を防ぎながら読み取りを行うのに役立ちます。

423と409 Conflict:違いを理解する

これは同時アクセスの世界において重要な区別です。

例え:

WebDAVを超えた現代のアプリケーション

423はWebDAVに由来しますが、リソースロックの概念は現代のアプリケーションで広く使用されています。

1. 共同ドキュメントエディタ

Google Docs、Notion、Confluenceなどのツールは、他の誰かがドキュメントを活発に編集しているときにそれを示すために、同様のロックメカニズムを使用しています。

2. データベースとレコードのロック

多くのアプリケーションは、同じレコードへの同時更新を防ぐために、データベースレベルで悲観的ロックを実装しています。

3. Eコマース在庫システム

商品をカートに追加すると、購入を完了するまでの間、システムはその在庫を一時的に「ロック」して、売り越しを防ぐことがあります。

4. ファイルのアップロードと処理

システムは、ファイルが処理中(例:ウイルススキャン、画像最適化)である間、他の操作が干渉するのを防ぐためにファイルをロックすることがあります。

RESTful APIにおける423 Locked:使用すべきか?

もちろんですが、注意が必要です。

REST API設計において、423を使用することは次の場合に有益です。

ただし、より広範な用途(WebDAVのコンテキスト外)向けにAPIを設計している場合は、423がより特定的であるため、一般的な状態の競合には代わりに409 Conflictを返すことを検討してもよいでしょう。

Apidogを使ったAPIテスト

同時アクセスシナリオのテストは困難ですが、非常に重要です。Apidogは、これらの複雑なワークフローをテストするための優れた機能を提供します。

Apidogを使用すると、次のことができます。

  1. 複数のユーザーをシミュレート: 異なる認証トークンを持つ異なるリクエストを作成し、アリスとボブが同じリソースで作業している状況をシミュレートします。
  2. ロック取得のテスト: LOCKリクエスト(WebDAVサーバーをテストしている場合)またはカスタムのロックエンドポイントを送信し、ロックトークンを含む正しいレスポンスが得られることを確認します。
  3. ロック強制のテスト: 「アリス」にロックを取得させ、その後「ボブ」がリソースを変更しようとし、彼が423 Lockedレスポンスを受け取ることを確認します。
  4. ロック解除のテスト: 「アリス」がロックを解除した後、「ボブ」がリソースを正常に変更できることを確認します。
  5. ロックシナリオの自動化: 完全なロックワークフローを自動的に実行するテストシナリオを作成し、ロックロジックが正しく機能することを確認します。
button

これは、機密データを扱うアプリケーションや、強力な一貫性保証を必要とするアプリケーションにとって特に価値があります。

ロック実装のベストプラクティス

サーバー開発者向け:

クライアント開発者向け:

HTTP 423に関する一般的な誤解

いくつかの誤解を解き明かしましょう。

❌ 「これは権限エラーだ。」

いいえ、それは403 Forbiddenです。423は一時的でリソースに特化したものです。

❌ 「私のサーバーがダウンしているということだ。」

いいえ。サーバーは正常です。単にリソースを同時編集から保護しているだけです。

❌ 「WebDAVにのみ適用される。」

WebDAVで定義されていますが、現代のREST APIも文脈に合致する場合は423を使用します。

潜在的な落とし穴と考慮事項

ロックは強力ですが、いくつかの課題があります。

  1. デッドロック: 2つのプロセスがそれぞれリソースをロックし、その後、もう一方が持っているものをロックしようとすると、デッドロックが発生する可能性があります。
  2. パフォーマンスオーバーヘッド: ロックの管理は複雑さを増し、パフォーマンスに影響を与える可能性があります。
  3. ユーザーエクスペリエンス: 不適切に実装されたロックは、ユーザーが長期間ブロックされると不満を引き起こす可能性があります。
  4. 古いロック: クライアントがロックを解除せずにクラッシュした場合、リソースはタイムアウトが期限切れになるまでロックされたままになる可能性があります。

結論:共同作業のセーフティネット

HTTP 423 Lockedステータスコードは、同時アクセスという複雑な問題に対する洗練された解決策を表しています。WebDAVプロトコルに由来しますが、リソースロックの概念は、信頼性の高い共同作業アプリケーションを構築するための基本です。

ロックをいつどのように使用するか、そして楽観的並行性制御のような代替戦略をいつ使用するかを理解することは、マルチユーザーシステムを構築する開発者にとって重要なスキルです。423コードは恐れるべきエラーではなく、安全な共同作業を可能にする機能です。

適切なロックメカニズムを実装し、423レスポンスを適切に処理することで、データ破損を防ぎ、スムーズな共同作業エクスペリエンスを提供するアプリケーションを構築できます。そして、これらの複雑な同時シナリオをテストする必要がある場合、Apidogのような強力なツールは、実際の条件下でロックロジックが完璧に機能することを保証するための制御と可視性を提供します。

button

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる