Skip to main content

US-002:ユーザー登録とログイン

基本情報

項目内容
IDUS-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)対応