# HTML生成システム要件定義書 ## 1. 概要 本システムは、マーケティング改善提案を自動生成し、HTML形式でプレビュー表示するシステムである。 各改善案(A案〜I案)に対して、FV(ファーストビュー)画像とコンテンツHTMLを生成し、タブ形式で表示する。 ## 2. ユーザーストーリー ### 2.1 改善案の生成と表示 **As a** マーケティング担当者 **I want to** 複数の改善案を自動生成して比較検討したい **So that** 最適な施策を選択できる #### 受け入れ条件 - [ ] 9つの改善案(A案〜I案)が生成される - [ ] 各案のFV画像とコンテンツHTMLが表示される - [ ] タブで各案を切り替えて閲覧できる - [ ] 予測値の高い順に案が並んでいる ### 2.2 パフォーマンスの最適化 **As a** システム利用者 **I want to** 快適な操作レスポンスでシステムを利用したい **So that** 効率的に作業を進められる #### 受け入れ条件 - [ ] タブ切り替え時に画像が再生成されない - [ ] ウィンドウフォーカス時に不要なAPI呼び出しが発生しない - [ ] 一度生成された画像はキャッシュから表示される - [ ] ページリロードしても24時間はキャッシュが有効 ### 2.3 改善案の再生成 **As a** マーケティング担当者 **I want to** 選択条件を変更して新しい改善案を生成したい **So that** 異なる観点から施策を検討できる #### 受け入れ条件 - [ ] /refresh-moments画面で選択を変更できる - [ ] 選択変更後は新しい改善案が生成される - [ ] 前回と異なるデータで正しく再生成される ## 3. ビジネス要件 ### 3.1 改善案の優先順位管理 #### 3.1.1 予測値による並び替え - **要件ID**: BR-001 - **優先度**: 高 - **説明**: 改善案は機械学習モデルによる予測値(prediction)の降順で並び替えられる - **詳細**: - 予測値は0〜1の範囲の数値 - 値が高いほど改善効果が期待できる - 同一予測値の場合は戦略順(積極化→改善→差別化)で決定 #### 3.1.2 タブラベルの維持 - **要件ID**: BR-002 - **優先度**: 中 - **説明**: 予測値順に並び替えても、表示ラベルはA案〜I案を維持 - **詳細**: - 最も予測値の高い案がA案として表示 - 9番目に高い案がI案として表示 - ユーザーは予測値の高い順であることを認識できる ### 3.2 パフォーマンス要件 #### 3.2.1 API呼び出しの最適化 - **要件ID**: BR-003 - **優先度**: 高 - **説明**: 不要なAPI呼び出しを削減し、システム負荷を軽減 - **詳細**: - ウィンドウフォーカス時の再フェッチを無効化 - コンポーネント再マウント時の再フェッチを無効化 - 同一データでの重複実行を防止 #### 3.2.2 キャッシュ管理 - **要件ID**: BR-004 - **優先度**: 中 - **説明**: 生成済みデータを効率的にキャッシュ - **詳細**: - staleTime: Infinity(データは古くならない) - gcTime: 24時間(ガベージコレクション) - queryKeyベースのキャッシュ管理 ### 3.3 データ生成要件 #### 3.3.1 FV画像生成 - **要件ID**: BR-005 - **優先度**: 高 - **説明**: 各改善案のファーストビュー画像を生成 - **詳細**: - OpenAI/Gemini APIを使用 - スクリーンショットを基に画像を編集 - タブごとに1回だけ生成(同一セッション内) #### 3.3.2 コンテンツHTML生成 - **要件ID**: BR-006 - **優先度**: 高 - **説明**: 各改善案のコンテンツセクションHTMLを生成 - **詳細**: - セクションごとにHTMLを構築 - Adobe Fireflyで画像生成(オプション) - プレースホルダー画像の自動置換 ## 4. 技術仕様 ### 4.1 アーキテクチャ #### 4.1.1 フロントエンド - **フレームワーク**: Next.js (App Router) - **状態管理**: Zustand - **データフェッチング**: React Query (TanStack Query) - **スタイリング**: Tailwind CSS #### 4.1.2 API層 - **内部API**: Next.js API Routes - **外部API**: - Gradio API(提案データ取得) - OpenAI API(画像生成) - Gemini API(画像生成) - Adobe Firefly API(コンテンツ画像) ### 4.2 データフロー ```mermaid graph TD A[ユーザー選択] --> B[Gradio API] B --> C[提案データ取得] C --> D[ProposalTranslator] D --> E[予測値でソート] E --> F[タブデータ生成] F --> G[TabContentRenderer] G --> H[FV HTML生成] G --> I[Contents HTML生成] H --> J[画像表示] I --> J ``` ### 4.3 キー・コンポーネント #### 4.3.1 React Query設定 - **ファイル**: `api-client/query-config.ts` - **責務**: 全APIフックの共通設定を提供 - **主要設定**: ```typescript { refetchOnWindowFocus: false, refetchOnMount: false, staleTime: Infinity, gcTime: 24 * 60 * 60 * 1000 } ``` #### 4.3.2 タブコンテンツレンダラー - **ファイル**: `components/improvement-result/tab-content-renderer.tsx` - **責務**: 各タブのコンテンツ生成と表示制御 - **主要機能**: - 初回生成フラグ管理(useRef) - 条件付きレンダリング - キャッシュ制御 #### 4.3.3 提案データ変換 - **ファイル**: `api-client/proposal/proposal/translator.ts` - **責務**: APIレスポンスを表示用データに変換 - **主要機能**: - 予測値によるソート - タブラベル割り当て - データ正規化 ## 5. 制約事項 ### 5.1 技術的制約 - React Query v5を使用 - Node.js 18以上が必要 - ブラウザはChrome/Firefox/Safari/Edgeの最新版をサポート ### 5.2 ビジネス制約 - 改善案は必ず9案生成される - 予測値は0〜1の範囲に正規化される - ダミーモードでも正常動作が必要 ## 6. 非機能要件 ### 6.1 パフォーマンス - タブ切り替え: 100ms以内でレスポンス - 画像生成: 各タブ30秒以内で完了 - キャッシュヒット率: 90%以上 ### 6.2 可用性 - システム稼働率: 99.5%以上 - エラー発生時のフォールバック機能 - ダミーモードでの継続動作 ### 6.3 保守性 - TypeScriptによる型安全性 - ESLint/Prettierによるコード品質維持 - 包括的なログ出力 ## 7. リスクと対策 ### 7.1 API制限 - **リスク**: 外部APIのレート制限 - **対策**: - ローカル環境では画像生成をスキップ - キャッシュを積極的に活用 - リトライ処理の実装 ### 7.2 パフォーマンス劣化 - **リスク**: 大量データによる処理遅延 - **対策**: - 非同期バッチ処理 - プログレッシブレンダリング - 遅延ローディング ## 8. 今後の拡張性 ### 8.1 短期的拡張 - 改善案数の動的変更(9案→12案など) - 新しいAIプロバイダーの追加 - カスタムソート条件の追加 ### 8.2 長期的拡張 - リアルタイム協業機能 - A/Bテスト結果の自動反映 - 機械学習モデルの継続的改善