競合と確定タイミングの設計|予約枠・在庫・料金を“同時操作”で破綻させない

予約枠、在庫、料金――これらは「同時に触られる」ことが前提のデータです。
にもかかわらず、確定タイミングを曖昧にすると、二重予約、在庫マイナス、料金ズレが起きます。
本記事では、競合が起きるデータを破綻させないために、仮確保と確定、キャンセル復元、ログまで含めた実務設計を整理します。

この記事で扱う論点
・確定タイミング(フォーム送信/決済/管理承認)の整理
・仮確保(ホールド)と期限切れ(自動解放)
・二重予約/二重処理を防ぐガード(冪等性)
・キャンセル/差し戻し/復元と監査ログ

1. 最初に決める:確定はいつか(ここが曖昧だと全部壊れる)

確定タイミングは、業務によって違います。よくあるパターンは次の3つです。

予約の導線が絡む場合は、予約カレンダーと申込フォーム連携の設計と確定タイミングを一致させてください。ここがズレると「空きに見えるのに取れない」「取れたのに空き扱い」が発生します。

2. 仮確保(ホールド)の設計:やるなら期限と解放を必ず持つ

フォーム入力中に枠を押さえたい(先着で取りたい)場合は仮確保が必要です。
ただし、仮確保は「放置される」ので、期限切れの自動解放が必須です。

期限と通知の整合は、エスカレーション設計(SLA・期限・通知)の考え方を“予約枠”にも適用できます。通知しすぎは逆効果なので、ユーザー向けは「期限が近い」程度に絞るのが現実的です。

3. 二重予約を潰す:UIではなく“最終確定処理”で守る

二重予約は、UIで頑張ってもゼロになりません。最終的にはサーバ側の確定処理で防ぐ必要があります。
ここで重要なのが、冪等性と再試行の設計と同じ発想です。確定処理が二回走っても結果が同じになるようにします。

最終確定処理で守るべきこと
・同じ枠に対して同時に確定が走ったとき、片方だけ成功する
・失敗した側は分かりやすいメッセージで再選択へ戻す
・確定/取消/変更の処理は冪等キーで二重実行を吸収する

4. キャンセルと変更:復元できない設計は運用で詰まる

予約枠・在庫・料金は、変更とキャンセルが必ず発生します。ここを設計しないと、運用開始後に“例外対応”が増えて壊れます。

誤操作や取消の復元は、バックアップと復旧の考え方(ソフトデリート/履歴)を前提にすると現場が救われます。操作ログも 監査ログ と整合しておくと、トラブル時に説明しやすいです。

5. “現場都合の確定”を吸収する:承認・担当割当・受付の連携

予約が確定しても、現場は担当割当や受付で詰まることがあります。確定だけ強くしても運用は回りません。
そこで、次の連携をセットで考えると安定します。

担当割当は 自動・手動・混在 の前提で作り、受付の詰まりは 受付・チェックイン設計 のように現場オペから逆算すると、全体が壊れにくくなります。

業種別に“競合設計”が重要な場面(例)

物流(納品予約・受付枠)

枠が埋まると現場に待機が発生し、コストに直結します。業務像は 物流向け を前提に、仮確保より「確定条件を明確にして、現場が見える状態にする」方が効くケースも多いです。

医療・クリニック(予約枠)

当日変更が多く、例外運用が必ず混ざります。業務像は クリニック向け を前提に、キャンセル/変更の復元と通知(持ち物/注意事項)まで含めて設計すると詰まりにくくなります。

自動車販売・整備・タイヤショップ(入庫枠・ピット)

枠は「時間」ではなく「作業時間+設備(ピット)」で競合します。業務像は 自動車販売・整備・タイヤショップ向け を前提に、確定タイミングと受付〜割当の連携を最初から要件に入れると、当日の崩れを防げます。

まとめ

競合が起きるデータは、確定タイミングと仮確保・解放、二重処理を吸収する冪等性、キャンセル/変更の復元までをセットで設計すると破綻しにくくなります。
UIで頑張るのではなく、最終確定処理で守る。ログと復旧を前提にする。
この設計があるだけで、運用開始後の「予約が二重になった」「枠が戻らない」が大幅に減ります。インテンスでも、予約や在庫が絡む案件は、この論点を早めに固めるほど手戻りが減ります。

本記事は、Webシステム開発・スマホ自動変換「movo」・業務システム構築・フォームUX改善・EC支援を提供する 株式会社インテンスが、実際の開発プロジェクトで蓄積した知見をもとにまとめています。 株式会社インテンス(公式サイト)