Skip to main content

US-003:カート管理と注文確定

基本情報

項目内容
IDUS-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対応
  • カート共有機能(友人と一緒に購入)
  • 予約購入(発売前商品の事前注文)