US-003:カート管理と注文確定
基本情報
| 項目 | 内容 |
|---|---|
| ID | US-003 |
| タイトル | カート管理と注文確定機能の実装 |
ユーザーストーリー
As a ECサイトのユーザー
I want 商品をカートに追加し、まとめて注文を確定できる
So that 複数の商品を一度に購入し、効率的に買い物ができる
日本語記述
ECサイトのユーザーとして、効率的に買い物をするために、商品をカートに追加し、まとめて注文確定できる機能が必要である。
背景・目的
ビジネス背景
ファッションECでは、顧客が複数の商品を比較検討しながら購入を決定するため、カート機能は必須である。また、注文確定時に在庫を即座にロックすることで、セールやタイムセール時のオーバーセルを防ぐ必要がある。プロジェクト概要では、ピーク時(秒間数千リクエスト)でも在庫整合性を保つことが求められている。
ユーザーニーズ
- 商品を選択しながらカートに追加し、後でまとめて購入したい
- カート内の商品数量を変更したり、削除したりしたい
- 複数の配送先を指定して注文したい(ギフト送付など)
- 注文確定時に在庫切れがないか確認したい
- 支払い方法を選択して安全に決済したい
現状の課題
- ピーク時の在庫競合によるオーバーセルリスク
- 複数ユーザーが同時に同じSKUを注文する際の整合性確保
- カート保持期限の管理(長期間放置されたカートの扱い)
受入基準(Acceptance Criteria)
機能要件
AC-1: カートへ商品追加
Given ユーザーが商品詳細ページを閲覧している
When サイズ・カラーを選択して「カートに追加」ボタンを押下する
Then 選択したSKUがカートに追加され、カート件数が更新される
詳細説明:
- ログインユーザーの場合、カートはサーバー側で永続化される
- 未ログインユーザーの場合、カートはローカルストレージ/セッションで管理される
- 同じSKUを追加した場合は数量が加算される
- 在庫数を超える数量は追加できない(即座にバリデーション)
- カート追加時に軽量な在庫チェックを実施(確定時に再度チェック)
AC-2: カート内容の表示と編集
Given ユーザーがカートページにアクセスする
When カート内容が表示される
Then 商品画像、商品名、SKU情報、単価、数量、小計が表示される
詳細説明:
- 数量変更(+/-ボタンまたは直接入力)が可能
- 削除ボタンで個別に商品を削除可能
- 在庫不足の商品は警告表示される
- プロモーション適用後の価格が表示される
- 送料計算のプレビューが表示される
AC-3: 配送先情報の設定
Given ユーザーがカートから「購入手続きへ進む」を選択する
When 配送先情報入力画面が表示される
Then 登録済み住所の選択、または新規住所入力が可能
詳細説明:
- 新規住所は次回以降のために保存するか選択できる
AC-4: 注文確定と在庫ロック
Given ユーザーが配送先と支払い方法を設定済み
When 「注文を確定する」ボタンを押下する
Then 在庫が即座にロックされ、注文が確定する
詳細説明:
- 在庫引当は原子操作で実施(楽観ロック)
- 在庫不足の場合はエラーメッセージとともに注文が失敗
- 在庫ロック成功後、決済処理を実施
- 決済失敗時は在庫ロックを自動的に解放(ロールバック)
- 注文確定時にユニークな注文IDが発行される
- 注文確定完了メールが送信される
AC-5: 注文確定のパフォーマンス要件
Given ピーク時に複数ユーザーが同時に注文確定を実施
When 秒間1000リクエストの負荷がかかる
Then P99レスポンスタイム2秒以内で注文が確定する
詳細説明:
- データベーストランザクションは最小限に抑える
- 在庫数の更新はアトミックに実施
- 楽観ロックによるリトライロジックを実装
AC-6: カート保持期限管理
Given ユーザーがカートに商品を追加したまま放置
When 最終アクセスから7日間経過する
Then カートは自動的にクリアされる
詳細説明:
- ログインユーザーのカートは7日間保持
- 未ログインユーザーのカートはセッション終了まで保持
非機能要件
パフォーマンス
- カート追加APIのP95レスポンスタイム: 100ms以内
- 注文確定APIのP99レスポンスタイム: 2秒以内
- ピーク時処理能力: 秒間1000注文確定リクエスト
セキュリティ
- 認証必須(JWT/セッショントークン検証)
- CSRF対策実装
- 価格改ざん防止(サーバー側で価格再計算)
- SQLインジェクション対策
可用性
- 注文確定処理のSLA: 99.9%
- データベース障害時のグレースフルデグレード
保守性
- 注文確定の全プロセスを監査ログに記録
- 在庫ロック失敗時のアラート
- カート放棄率のメトリクス取得
UI/UX要件
画面遷移
[商品詳細] → [カートに追加] → [カート画面] → [配送先入力] → [支払い方法選択] → [注文確認] → [注文完了]
↓ ↓
[カート更新] [カートに戻る]
インタラクション
- カート追加時にトーストまたはモーダルで確認メッセージ表示
- 数量変更時は即座にAPIを呼び出し、小計を更新
- 在庫不足時は該当商品をハイライト表示
- 注文確定時はローディングスピナー表示(二重送信防止)
- 注文完了後は確認画面を表示し、注文IDとステータスを表示
依存関係
前提条件
- ユーザー認証機能が実装済み(US-002)
- 商品・SKUマスタが登録済み
- 在庫管理システムが実装済み
- 決済プロバイダーとの連携が完了
依存するストーリー
- US-002: ユーザー登録とログイン
- US-004: 在庫管理と在庫ロック機能
- US-005: 簡易クーポン管理機能
ブロッカー
- 決済プロバイダーAPIのサンドボックス環境セットアップ
- 在庫ロック戦略の技術選定(楽観ロック)
備考・コメント
設計上の決定事項
- 在庫ロックは注文確定時のみ実施(カート追加時はソフトチェックのみ)
- 注文確定はべき等性を保証(同一リクエストの重複実行を防止)
- 価格はスナップショット方式(注文時点の価格を記録)
将来の拡張性
- 複数決済手段の追加(コンビニ決済、キャリア決済、後払い等)
- Apple Pay、Google Pay対応
- カート共有機能(友人と一緒に購入)
- 予約購入(発売前商品の事前注文)