EP.5

AIで美容室の予約サイトを作った。二重予約は防げるのか

AIで作った予約フォームに同じ時間の予約を2件送り、片方だけを受け付ける仕組みが動くか確かめました。

美容室の予約フォームは、見た目を作るだけならAIでかなり早くできます。ただし、入力できることと、予約を安全に管理できることは別です。

今回の問いは一つです。

別の画面から同じ日時・同じ担当へ予約が届いたとき、二重予約を防げるか。

架空の美容室「NICO HAIR」を作り、実際に予約データを保存する小さな仕組みまで用意しました。

予約サイトの実動デモを見る

先に結論

画面だけでは防げません。予約を共有する保存先と、「確認してから保存する」間を他の処理に割り込ませない仕組みが必要でした。

今回のデモでは、予約データのファイルをサーバー側でロックします。先に来た1件を保存し、その後に同じ枠へ来た予約には 409 Conflict を返します。

これは「レンタルサーバーなら何でも自動的に安全」という意味ではありません。サーバーを借りても、予約処理の設計が間違っていれば二重予約は起きます。

作ったもの

  • 架空の美容室サイト
  • メニュー・担当・日付・時間を選ぶ予約フォーム
  • 予約済み枠を共有するサーバー側の保存処理
  • 同じ担当・日付・時間の重複を止める排他処理
  • テストデータを30分後に自動削除する処理
  • CSRFトークンと入力値の検証

実在する店舗の予約ではないため、氏名・電話番号・メールアドレスは集めません。入力するのはニックネームだけです。

なぜ、画面だけでは足りないのか

ブラウザの入力チェックが知っているのは、その画面の中だけです。別のスマホや別タブで誰かが同じ枠を選んでいても分かりません。

危ないのは次の順番です。

  1. Aさんが「空き」を確認する
  2. Bさんも同じ枠を「空き」と確認する
  3. Aさんが保存する
  4. Bさんも保存する

確認と保存が別々なら、2人とも通ってしまいます。そこで今回は、予約データを読むところから保存するところまで、同じロックの中で実行しました。

検証方法

同じ担当・同じ日・同じ時間を指定した2件を、別々の画面から続けて送ります。

期待する結果は次の通りです。

送信期待する応答意味
1件目201 Created予約を保存
2件目409 Conflict同じ枠なので拒否

2026年9月5日、公開環境のXServerへ別セッションから同じ枠を2件同時送信しました。結果は片方が 201 Created、もう片方が 409 Conflict。保存された予約は1件だけでした。

なお、これは同じ担当・同じ日時という最小条件での確認です。負荷試験や長期間の運用検証まで終えたものではありません。

無料で済む範囲

デザインを作る、文章を整える、画面上だけで入力チェックをする。ここまでは、無料の静的ホスティングでもできます。

予約内容をメールや外部フォームへ送るだけなら、無料サービスを組み合わせる方法もあります。小さなお店で予約確定を人が行うなら、それで十分な場合もあります。

一方、複数の利用者が同じ予約状況を共有するなら、予約データをいつでも確認・更新できる仕組みがあると便利です。今回のデモでは、その仕組みをレンタルサーバー上で動かしました。無料サービスを組み合わせる方法も含め、必要な機能と管理のしやすさから選ぶのが妥当です。

今回あえて作らなかったもの

  • 本物の顧客情報の保存
  • 予約変更・キャンセル
  • 店舗側の管理画面
  • メールやLINEへの通知
  • メニューの所要時間をまたぐ枠管理
  • 複数店舗への対応

実店舗で使うには、これらに加えてバックアップ、アクセス権限、個人情報の保護、障害時の運用が必要です。このデモは予約システムの完成品ではなく、二重予約を防ぐ最小構成の検証です。

まとめ

AIは見た目の良い予約フォームを作れます。しかし、本当に価値が出るのは「送信ボタンの後」を作り、失敗条件まで検証したときでした。

今回役立ったのは、予約状況を利用者同士で共有し、同じ枠に2件入らない状態を保てることでした。サーバーはその便利さを実現する方法の一つであって、契約そのものが目的ではありません。

次は、予約変更やキャンセルなど、実店舗の運用に足りない機能を確認します。

← 記事一覧へ