<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>要件定義 on 設計書</title><link>https://Hitamuki.github.io/image-upload/requirements/</link><description>Recent content in 要件定義 on 設計書</description><generator>Hugo</generator><language>ja</language><atom:link href="https://Hitamuki.github.io/image-upload/requirements/index.xml" rel="self" type="application/rss+xml"/><item><title>画像アップロード機能</title><link>https://Hitamuki.github.io/image-upload/requirements/req001-upload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://Hitamuki.github.io/image-upload/requirements/req001-upload/</guid><description>&lt;h1 id="画像アップロード機能"&gt;画像アップロード機能&lt;a class="anchor" href="#%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%a9%9f%e8%83%bd"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="id"&gt;ID&lt;a class="anchor" href="#id"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;req001-upload&lt;/p&gt;
&lt;h2 id="概要"&gt;概要&lt;a class="anchor" href="#%e6%a6%82%e8%a6%81"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ユーザーがアプリケーションを介して画像ファイルをアップロードし、永続化・閲覧できる機能を提供する。&lt;/p&gt;
&lt;h2 id="ビジネス要件"&gt;ビジネス要件&lt;a class="anchor" href="#%e3%83%93%e3%82%b8%e3%83%8d%e3%82%b9%e8%a6%81%e4%bb%b6"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ユーザーは画像を送信し、表示できる必要がある。&lt;/li&gt;
&lt;li&gt;不適切なファイルのアップロードを防止し、システムの安定性を担保する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="as-is"&gt;As-Is&lt;a class="anchor" href="#as-is"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;なし&lt;/p&gt;
&lt;h3 id="to-be"&gt;To-Be&lt;a class="anchor" href="#to-be"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ユーザーがローカル端末から画像を選択し、クラウドストレージへアップロード・閲覧できる。&lt;/li&gt;
&lt;li&gt;不正ファイルの混入を防ぎ、安全かつ安定したファイル管理基盤を持つ。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="スコープ"&gt;スコープ&lt;a class="anchor" href="#%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;画像の選択・プレビュー・アップロード・閲覧&lt;/li&gt;
&lt;li&gt;クライアント／サーバー双方でのバリデーション&lt;/li&gt;
&lt;li&gt;S3 Presigned URL を用いた直接アップロード方式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ステークホルダー--ペルソナ"&gt;ステークホルダー / ペルソナ&lt;a class="anchor" href="#%e3%82%b9%e3%83%86%e3%83%bc%e3%82%af%e3%83%9b%e3%83%ab%e3%83%80%e3%83%bc--%e3%83%9a%e3%83%ab%e3%82%bd%e3%83%8a"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;発注者&lt;/strong&gt;: システム開発の依頼者であり、最初の利用者&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;エンドユーザー&lt;/strong&gt;: MVP段階では発注者のみを想定。将来的に一般ユーザーへの展開を想定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="機能要件"&gt;機能要件&lt;a class="anchor" href="#%e6%a9%9f%e8%83%bd%e8%a6%81%e4%bb%b6"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="画像の選択とプレビュー"&gt;画像の選択とプレビュー&lt;a class="anchor" href="#%e7%94%bb%e5%83%8f%e3%81%ae%e9%81%b8%e6%8a%9e%e3%81%a8%e3%83%97%e3%83%ac%e3%83%93%e3%83%a5%e3%83%bc"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ユーザーはローカル端末から画像ファイルを選択できる。&lt;/li&gt;
&lt;li&gt;アップロード前に選択したファイルのプレビューを表示する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="画像のアップロード"&gt;画像のアップロード&lt;a class="anchor" href="#%e7%94%bb%e5%83%8f%e3%81%ae%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;選択された画像をサーバー（S3）にアップロードする。&lt;/li&gt;
&lt;li&gt;アップロード成功後、メタデータ（ファイル名、URL、サイズ等）をDBに保存する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="バリデーション"&gt;バリデーション&lt;a class="anchor" href="#%e3%83%90%e3%83%aa%e3%83%87%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ファイルサイズ制限: 最大 5MB。&lt;/li&gt;
&lt;li&gt;対応フォーマット: JPEG, PNG, GIF, WebP。&lt;/li&gt;
&lt;li&gt;MIMEタイプはバイナリヘッダ（マジックナンバー）で検証する。&lt;/li&gt;
&lt;li&gt;クライアントサイドとサーバーサイドの両方で検証を行う。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="アップロード済み画像の閲覧"&gt;アップロード済み画像の閲覧&lt;a class="anchor" href="#%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%b8%88%e3%81%bf%e7%94%bb%e5%83%8f%e3%81%ae%e9%96%b2%e8%a6%a7"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;アップロード済みの画像はファイル名のリストとして表示される。&lt;/li&gt;
&lt;li&gt;リストからファイル名を選択することで、その画像のプレビューを表示する。&lt;/li&gt;
&lt;li&gt;通信量削減のため、初期表示時にすべての画像の実体を取得しない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="非機能要件"&gt;非機能要件&lt;a class="anchor" href="#%e9%9d%9e%e6%a9%9f%e8%83%bd%e8%a6%81%e4%bb%b6"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="可用性スケーラビリティ"&gt;可用性・スケーラビリティ&lt;a class="anchor" href="#%e5%8f%af%e7%94%a8%e6%80%a7%e3%82%b9%e3%82%b1%e3%83%bc%e3%83%a9%e3%83%93%e3%83%aa%e3%83%86%e3%82%a3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;大容量ファイルの転送によるバックエンドサーバーの負荷を避けるため、&lt;strong&gt;S3 Presigned URL（署名付きURL）&lt;/strong&gt; を使用した直接アップロード方式を採用する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="セキュリティ"&gt;セキュリティ&lt;a class="anchor" href="#%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;マジックナンバーによる検証&lt;/strong&gt;: 拡張子だけでなく、バイナリヘッダによるMIMEタイプ検証を行う。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;署名付きURLの有効期限&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;アップロード用: 5分以内に制限する&lt;/li&gt;
&lt;li&gt;閲覧用: 1時間以内に制限する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;公開設定&lt;/strong&gt;: アップロードされたファイルは適切なACL（またはPublic Access Block）を設定し、不要な公開を避ける。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="トレーサビリティ"&gt;トレーサビリティ&lt;a class="anchor" href="#%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b5%e3%83%93%e3%83%aa%e3%83%86%e3%82%a3"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;アップロード処理全体に &lt;code&gt;trace_id&lt;/code&gt; を付与し、フロントエンドからS3、バックエンド、DBまでのログを紐づけ可能とする。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="前提条件制約"&gt;前提条件・制約&lt;a class="anchor" href="#%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6%e5%88%b6%e7%b4%84"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;アップロード可能な画像数は最大 5枚 とする。&lt;/li&gt;
&lt;li&gt;1度の処理でアップロードできる画像数は 1枚 とする。&lt;/li&gt;
&lt;li&gt;ファイルストレージとして AWS S3 または互換ストレージを使用する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mvp開発方針"&gt;MVP開発方針&lt;a class="anchor" href="#mvp%e9%96%8b%e7%99%ba%e6%96%b9%e9%87%9d"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="スコープ外"&gt;スコープ外&lt;a class="anchor" href="#%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97%e5%a4%96"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ユーザー管理機能&lt;/strong&gt;: ユーザー登録、認証、認可は実装しない&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;アクセス制御&lt;/strong&gt;: 画像の所有者制限や権限管理は実装しない&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プライバシー設定&lt;/strong&gt;: 画像の公開・非公開設定は実装しない&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="理由"&gt;理由&lt;a class="anchor" href="#%e7%90%86%e7%94%b1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MVP（Minimum Viable Product）として、まずは画像アップロード・表示の基本機能に集中し、ユーザー管理のような機能は後のバージョンで実装する。これにより早期に価値を提供しつつ、開発期間を短縮する。&lt;/p&gt;</description></item></channel></rss>