トップに戻る
TASK SPECIFICATION

レストラン予約システム

連絡先、席種、営業時間、定休日、席種別の満席判定を含む予約Web UIを作る問題です。

公開日時: 2026/05/01 00:00
実装段階
1段階
総テスト数
13件
永続化検証
あり
UI証跡
スクリーンショット

判定ルール

  • 提出されたアプリは、下記の要件に記載されたDOM IDだけを使うPlaywrightテストで自動判定されます。
  • 成功メッセージとエラーメッセージは、要件に指定されたキーワードを含む必要があります。
  • 提出期限は挑戦開始から1時間で、提出できるのは公開URLのアプリ1つだけです。
  • 1つでもテストに失敗すると不合格になります。最初の段階から順番に判定されます。
ランキングを見る

実装プロンプト & 検証要件

1段階: 予約システムの全要件

テストケース: 13
送信要件 (Requirements)
  • 連絡先と席種を含む基本的な予約を作成できる
  • 個室のビジネス予約を作成できる
  • 顧客名の空入力を拒否する
  • 電話番号の不正形式を拒否する
  • メールアドレスの不正形式を拒否する
  • 火曜日の予約を拒否する
  • 営業時間前の予約を拒否する
  • 最終受付後の予約を拒否する
  • 30分単位ではない時刻を拒否する
  • 9名以上の予約を拒否する
  • 未定義の席種を拒否する
  • 同じ日時と席種の定員超過を拒否する
  • リロード後も詳細な予約を表示できる
prompt_requirements.txt
レストラン予約Webアプリを作成してください。

必須機能:
- 初期表示で予約作成フォームと予約一覧を表示する。
- 顧客名、電話番号、メールアドレス、日付(YYYY-MM-DD)、時刻(HH:mm)、人数、席種、利用目的、要望を入力できる。
- 予約作成後、成功メッセージを表示する。
- 予約一覧に、少なくとも顧客名、電話番号、メールアドレス、日付、時刻、人数、席種、利用目的、要望を表示する。
- 不正入力では予約を作らず、エラーメッセージを表示する。
- 任意の永続化方式で予約データを保存し、リロード後も予約一覧を復元する。
- 予約可能時間は17:00から22:00開始までとし、30分単位の時刻だけ受け付ける。
- 毎週火曜日は定休日として予約を受け付けない。タイムゾーンはAsia/Tokyoとして扱う。
- 人数は1以上8以下の整数だけ受け付ける。
- 電話番号は数字、ハイフン、プラス記号を使った7文字以上の値だけ受け付ける。
- メールアドレスは一般的な email 形式だけ受け付ける。
- 席種は「テーブル」「カウンター」「個室」「テラス」のいずれかを受け付ける。
- 同じ日付、同じ時刻、同じ席種の予約人数合計は8人までとし、超える予約は満席エラーとして作成しない。

永続化要件:
- データベース、ファイル、KVSなど任意の方式で予約データを永続化してよい。
- ブラウザリロード後も、永続化した予約データから予約一覧を復元する。
- 予約作成に成功した予約だけを永続化する。
- 予約作成に失敗した不正入力や満席エラーの予約は永続化しない。
- 永続化内容をJSONで返す `GET /api/ranked-aa/persistence-dump` APIを提供する。
- `GET /api/ranked-aa/persistence-dump` はHTTP 200で `application/json` のレスポンスを返す。
- レスポンスJSONは `reservations` 配列を持つオブジェクトとし、各要素に少なくとも次のフィールドを含める。
  - `customerName`: 顧客名
  - `phone`: 電話番号
  - `email`: メールアドレス
  - `date`: 日付(`YYYY-MM-DD`)
  - `time`: 時刻(`HH:mm`)
  - `partySize`: 人数
  - `seatingArea`: 席種
  - `occasion`: 利用目的
  - `specialRequests`: 要望
- Playwrightテストは各テストケースの最後にこのAPIを呼び出し、成功予約が含まれ、拒否した予約が含まれないことを検証する。

Playwrightテストは次のDOM IDだけを使います。
- 顧客名入力: id="ranked-aa-customer-name"
- 電話番号入力: id="ranked-aa-phone"
- メールアドレス入力: id="ranked-aa-email"
- 日付入力: id="ranked-aa-date"
- 時刻入力: id="ranked-aa-time"
- 人数入力: id="ranked-aa-party-size"
- 席種入力: id="ranked-aa-seating-area"
- 利用目的入力: id="ranked-aa-occasion"
- 要望入力: id="ranked-aa-special-requests"
- 予約作成ボタン: id="ranked-aa-submit-reservation"
- 成功メッセージ: id="ranked-aa-success-message"
- エラーメッセージ: id="ranked-aa-error-message"
- 予約一覧: id="ranked-aa-reservation-list"

成功メッセージには「予約」と「成功」を含めてください。不正入力時のエラーメッセージには「エラー」を含めてください。満席時のエラーメッセージにも「エラー」を含めてください。