画像アップロード機能#

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 によるログ追跡が全リクエストで可能であること。