画像アップロード機能#
ID#
req001-upload
概要#
ユーザーがアプリケーションを介して画像ファイルをアップロードし、永続化・閲覧できる機能を提供する。
ビジネス要件#
- ユーザーは画像を送信し、表示できる必要がある。
- 不適切なファイルのアップロードを防止し、システムの安定性を担保する。
As-Is#
なし
To-Be#
- ユーザーがローカル端末から画像を選択し、クラウドストレージへアップロード・閲覧できる。
- 不正ファイルの混入を防ぎ、安全かつ安定したファイル管理基盤を持つ。
スコープ#
- 画像の選択・プレビュー・アップロード・閲覧
- クライアント/サーバー双方でのバリデーション
- S3 Presigned URL を用いた直接アップロード方式
ステークホルダー / ペルソナ#
- 発注者: システム開発の依頼者であり、最初の利用者
- エンドユーザー: MVP段階では発注者のみを想定。将来的に一般ユーザーへの展開を想定
機能要件#
画像の選択とプレビュー#
- ユーザーはローカル端末から画像ファイルを選択できる。
- アップロード前に選択したファイルのプレビューを表示する。
画像のアップロード#
- 選択された画像をサーバー(S3)にアップロードする。
- アップロード成功後、メタデータ(ファイル名、URL、サイズ等)をDBに保存する。
バリデーション#
- ファイルサイズ制限: 最大 5MB。
- 対応フォーマット: JPEG, PNG, GIF, WebP。
- MIMEタイプはバイナリヘッダ(マジックナンバー)で検証する。
- クライアントサイドとサーバーサイドの両方で検証を行う。
アップロード済み画像の閲覧#
- アップロード済みの画像はファイル名のリストとして表示される。
- リストからファイル名を選択することで、その画像のプレビューを表示する。
- 通信量削減のため、初期表示時にすべての画像の実体を取得しない。
非機能要件#
可用性・スケーラビリティ#
- 大容量ファイルの転送によるバックエンドサーバーの負荷を避けるため、S3 Presigned URL(署名付きURL) を使用した直接アップロード方式を採用する。
セキュリティ#
- マジックナンバーによる検証: 拡張子だけでなく、バイナリヘッダによるMIMEタイプ検証を行う。
- 署名付きURLの有効期限:
- アップロード用: 5分以内に制限する
- 閲覧用: 1時間以内に制限する
- 公開設定: アップロードされたファイルは適切なACL(またはPublic Access Block)を設定し、不要な公開を避ける。
トレーサビリティ#
- アップロード処理全体に
trace_idを付与し、フロントエンドからS3、バックエンド、DBまでのログを紐づけ可能とする。
前提条件・制約#
- アップロード可能な画像数は最大 5枚 とする。
- 1度の処理でアップロードできる画像数は 1枚 とする。
- ファイルストレージとして AWS S3 または互換ストレージを使用する。
MVP開発方針#
スコープ外#
- ユーザー管理機能: ユーザー登録、認証、認可は実装しない
- アクセス制御: 画像の所有者制限や権限管理は実装しない
- プライバシー設定: 画像の公開・非公開設定は実装しない
理由#
MVP(Minimum Viable Product)として、まずは画像アップロード・表示の基本機能に集中し、ユーザー管理のような機能は後のバージョンで実装する。これにより早期に価値を提供しつつ、開発期間を短縮する。
KPI / 成功指標#
- アップロード成功率 99% 以上。
- バリデーションエラーによる不正ファイルの排除率 100%。
- アップロード処理の trace_id によるログ追跡が全リクエストで可能であること。