US-002:ユーザー登録とログイン
基本情報
| 項目 | 内容 |
|---|---|
| ID | US-002 |
| タイトル | ユーザー登録とログイン機能の実装 |
ユーザーストーリー
As a 新規ユーザー
I want メールアドレスとパスワードで簡単にアカウントを作成しログインできる
So that 商品を購入し、注文履歴を管理できる
日本語記述
新規ユーザーとして、ECサイトで安全に買い物をするために、メールアドレスとパスワードによるアカウント登録とログイン機能が必要である。
背景・目的
ビジネス背景
ファッションECプラットフォームにおいて、ユーザー識別と認証は全ての取引の基盤となる。ユーザーが自身のアカウントを持つことで、注文履歴の追跡、返品・交換の申請、配送先住所の管理などが可能になり、リピート購入率の向上につながる。
ユーザーニーズ
- 簡単かつ安全にアカウントを作成したい
- 一度登録した情報を再利用して、次回以降スムーズに購入したい
- 自分の注文履歴や配送状況を確認したい
- パスワードを忘れた場合でも簡単に再設定したい
現状の課題
- 新規システムのため、ユーザー認証基盤が未構築
- セキュリティ要件(Pマーク準拠、パスワードハッシュ化)を満たす必要がある
- 将来的なOAuth対応やMFA導入を見据えた拡張可能な設計が必要
受入基準(Acceptance Criteria)
機能要件
AC-1: ユーザー新規登録
Given 未登録のユーザーが新規登録画面にアクセスする
When メールアドレス、パスワード、名前を入力して登録ボタンを押下する
Then アカウントが作成され、確認メールが送信される
詳細説明:
- メールアドレスは一意性チェックが行われる
- パスワードは最低8文字、英大文字・小文字・数字を含む必要がある
- パスワードはArgon2またはPBKDF2でハッシュ化して保存される
- 確認メールにはトークン付きの確認URLが含まれる
- 確認完了までアカウントはアクティブにならない
AC-2: メールアドレス確認
Given ユーザーが登録後に確認メールを受信する
When メール内の確認リンクをクリックする
Then アカウントがアクティブ化され、ログイン可能になる
詳細説明:
- 確認トークンは24時間で期限切れとなる
- 期限切れの場合は再送信が可能
- 確認完了後、自動的にログイン状態になる(オプション)
AC-3: ログイン
Given 登録済みユーザーがログイン画面にアクセスする
When メールアドレスとパスワードを入力してログインボタンを押下する
Then 認証が成功し、セッションまたはJWTトークンが発行される
詳細説明:
- 認証成功時はアクセストークン(有効期限15分)とリフレッシュトークン(有効期限7日)を発行
- ログイン失敗は5回まで。それ以上はアカウントロックアウト(15分間)
- ログイン試行はレート制限される(同一IPから1分間に10回まで)
- ログイン成功/失敗は監査ログに記録される
AC-4: パスワードリセット
Given ユーザーがパスワードを忘れた
When パスワードリセット画面でメールアドレスを入力する
Then パスワードリセット用のリンクがメールで送信される
詳細説明:
- リセットトークンは1時間で期限切れ
- リセットリンクから新しいパスワードを設定できる
- パスワード変更後、既存のセッション/トークンは全て無効化される
- 不正な試行を防ぐため、存在しないメールアドレスでも同じメッセージを返す
AC-5: ログアウト
Given ログイン中のユーザー
When ログアウトボタンを押下する
Then セッション/トークンが無効化され、ログアウトする
詳細説明:
- サーバー側でトークンをブラックリストに追加
- クライアント側でトークンを削除
- ログアウト後はログイン画面にリダイレクト
非機能要件
パフォーマンス
- ログインAPIのP95レスポンスタイムは150ms以内
- トークン検証のP99レスポンスタイムは50ms以内
- 同時ログイン処理:秒間1000リクエストを処理可能
セキュリティ
- パスワードはArgon2またはPBKDF2でハッシュ化
- 全ての認証エンドポイントはTLS 1.2+で暗号化
- JWTトークンはHS256またはRS256で署名
- CSRF対策(SameSite Cookie、CSRFトークン)
- レート制限によるブルートフォース攻撃対策
- 個人情報保護法・Pマーク要件に準拠
可用性
- 認証サービスのSLA: 99.9%
- 認証ダウン時の影響を最小化(既存トークンは継続利用可能)
保守性
- 認証イベント(成功/失敗、パスワード変更)の詳細ログ
- 異常なログイン試行のアラート(同一IPから短時間に多数の失敗)
- メトリクス:ログイン成功率、失敗率、レイテンシ
UI/UX要件
画面遷移
[新規登録画面] → [メール確認待ち画面] → [メール確認完了] → [ログイン画面] → [ホーム画面]
↓
[パスワードリセット画面]
インタラクション
- パスワード強度インジケーターをリアルタイム表示
- バリデーションエラーは即座にフィールド下に表示
- ログイン失敗時は「メールアドレスまたはパスワードが正しくありません」と表示(セキュリティのため具体的にどちらが間違っているかは示さない)
- ローディング中はボタンを無効化し、スピナーを表示
依存関係
前提条件
- データベース(PostgreSQL)環境が構築されている
- メール送信サービス(SMTP or SES)が設定されている
- Redis/Memcached(トークンブラックリスト用)が利用可能
- KMS(Key Management Service)が鍵管理に利用可能
依存するストーリー
- なし(最初の基盤ストーリー)
ブロッカー
- メール送信サービスの選定とセットアップが必要
- JWT署名鍵の生成と安全な保管方法の決定
備考・コメント
設計上の決定事項
- JWT方式を採用(ステートレス認証でスケーラビリティ向上)
- リフレッシュトークンはDBで管理(失効制御のため)
- メール確認は必須とする(スパム登録防止)
将来の拡張性
- OAuth 2.0プロバイダー連携(Google、Apple、LINE等)
- SMS認証の追加
- 生体認証(WebAuthn/FIDO2)対応
- シングルサインオン(SSO)対応