予約システムは「空き表示」ができても、二重予約が起きると現場が壊れます。
原因は、ユーザーが入力中の“仮押さえ”や、決済待ち、承認待ちなどで枠が揺れるためです。
この記事では、枠・在庫(部屋、車両、ピット、スタッフ、備品など)を安全に扱うために、引当(予約)をどう設計するかを整理します。
空き状況表示(空き表示パターン)は、あくまで「見せ方」です。
実際に枠を確保する仕組みが無いと、同時操作で二重予約が起きます。
そのため、設計上は次の3段階を分けます。
仮押さえは長くすると他ユーザーの機会損失になり、短すぎると入力が間に合いません。
現実解は「◯分(例:10〜20分)で自動解放+延長は条件付き」です。
引当対象は「時間」だけではありません。業種により資源が違います。
時間枠設計(枠の実務)と資源設計を合わせないと、枠はあっても運用が回りません。
キャンセルや変更(キャンセル設計)が入ると、枠の解放が複雑になります。
ポイントは「いつ解放するか」を仕様として決めることです。
状態遷移は 遷移図 で整理し、例外処理を減らします。
空き表示は、アクセスが多いと重くなりがちです。
ただし、確定処理は“正しさ”が最優先です。
そのため、よくある方針は次の分離です。
確定が二重実行される事故(連打、戻るボタン等)への耐性は、冪等性(二重実行防止)の考え方が効きます。
部屋タイプやプランが絡むと「在庫」が複雑になります。
業務像は ホテル向け を前提に、
宿泊予約(部屋タイプ設計)や団体見積(MICE条件)は、仮押さえ→確定の段階を分けないと混乱しやすいです。
バース予約は“枠”を扱う典型です。
業務像は 物流向け を前提に、
バース予約(待機料を増やさない)では、仮押さえが長いと現場が詰まります。解放と確定のタイミングが重要です。
ピットや代車は“資源”であり、時間枠だけでは管理できません。
業務像は 自動車販売・整備・タイヤショップ向け を前提に、
入庫(前提回収)やピット割当(詰まらせない)と引当の粒度を揃えると、二重予約や現場の段取りミスが減ります。
インテンスでも、予約系は“空き表示”より“引当と解放”を先に固め、二重予約が起きない設計を優先します。
枠・在庫の設計は、仮押さえ(Hold)と確定を分けるところから始まります。
タイムアウト解放、キャンセル/変更との連動、確定処理の競合対策(冪等性)を揃えると、二重予約の事故が現実的に減ります。
表示は速く、確定は正しく。この分離が運用の安定に効きます。