Spaces:
Sleeping
Sleeping
| # テーマカスタマイズ機能実装計画 | |
| ## 概要 | |
| commonCSSをテーマでカスタマイズ可能にし、既存のテーマ抽出機能と統合してHTML生成時に動的にスタイルを適用する機能を実装する。 | |
| ## 現状分析 | |
| ### 現在のHTML生成機能 | |
| - `ContentsHtmlService` がHTMLの生成を担当 | |
| - `commonCSS`(固定CSS)を利用してスタイリング | |
| - 画像生成機能(Adobe Firefly)が組み込み済み | |
| - ファイル場所:`server/services/html-preview/contents/contents-html.service.ts` | |
| ### 既存のテーマ抽出機能 | |
| - `ThemeExtractionService` が既に実装済み | |
| - スクリーンショットからカラー・デザイン特性・ブランド印象を抽出 | |
| - 15色のカラーパレット対応 | |
| - メインカラー:primary_color, secondary_color, accent_color | |
| - セマンティックカラー:success, warning, error, info | |
| - 背景色:primary, secondary, tertiary, overlay | |
| - テキスト色:primary, secondary, disabled, inverse | |
| - フォントファミリー情報(heading、main、special) | |
| - ファイル場所:`server/services/theme-extraction.service.ts` | |
| ## 批判的分析 | |
| ### 方針の評価 | |
| **強み:** | |
| - 既存のテーマ抽出機能が充実している | |
| - カラー抽出機能が15色対応で包括的 | |
| - 段階的な実装アプローチが適切 | |
| - 既存のHTML生成フローとの親和性が高い | |
| **課題と懸念:** | |
| 1. **CSS構造の複雑性** | |
| - 現在の `commonCSS` は1600行以上の巨大ファイル | |
| - セクション別・レスポンシブ対応など複雑な構造 | |
| - nth-of-type セレクターによる詳細な背景色制御 | |
| 2. **動的CSS生成の性能問題** | |
| - テーマ適用のたびにCSS全体を動的生成すると処理時間が増大 | |
| - ブラウザでの CSS パース時間への影響 | |
| 3. **CSS優先順位の問題** | |
| - 既存の詳細なセレクター(.section-base:nth-of-type(3n) など)とカスタムテーマの競合 | |
| - 特異性の管理が複雑化 | |
| 4. **保守性の課題** | |
| - CSSカスタマイズ機能追加により、既存コードの可読性・保守性が低下する可能性 | |
| - デバッグ難易度の増加 | |
| ## 第1段階:commonCSSのテーマ対応拡張 | |
| ### 1. CSS構造の分析と設計 | |
| #### CSS変数システムの導入 | |
| ```css | |
| :root { | |
| /* カラーパレット */ | |
| --primary-color: #5a6c7d; | |
| --secondary-color: #f8f9fa; | |
| --accent-color: #f59e0b; | |
| /* セマンティックカラー */ | |
| --success-color: #10b981; | |
| --warning-color: #f59e0b; | |
| --error-color: #ef4444; | |
| --info-color: #3b82f6; | |
| /* 背景色 */ | |
| --bg-primary: #ffffff; | |
| --bg-secondary: #f8f9fa; | |
| --bg-tertiary: #222222; | |
| --bg-overlay: rgba(0, 0, 0, 0.5); | |
| /* テキスト色 */ | |
| --text-primary: #222222; | |
| --text-secondary: #555555; | |
| --text-disabled: #999999; | |
| --text-inverse: #ffffff; | |
| /* フォントファミリー */ | |
| --font-heading: "YuGothic", "Yu Gothic Medium", sans-serif; | |
| --font-main: "YuGothic", "Yu Gothic Medium", sans-serif; | |
| --font-special: "YuGothic", "Yu Gothic Medium", sans-serif; | |
| } | |
| ``` | |
| #### CSSテンプレート化 | |
| - **ベースCSS**: 構造・レイアウト・アニメーション | |
| - **テーマCSS**: 色・フォント・装飾要素 | |
| - テーマ適用時にCSS変数のみを動的に変更 | |
| ### 2. テーマカスタマイズエンジンの実装 | |
| #### 新規クラス:ThemeCustomizer | |
| ```typescript | |
| export class ThemeCustomizer { | |
| /** | |
| * テーマ抽出結果からCSS変数を生成 | |
| */ | |
| generateCSSVariables(theme: ThemeExtractionResult): string; | |
| /** | |
| * カラーコードの妥当性検証 | |
| */ | |
| validateColors(colors: ColorTheme): boolean; | |
| /** | |
| * フォントファミリーのWeb安全フォント変換 | |
| */ | |
| sanitizeFontFamily(fontFamily: string): string; | |
| /** | |
| * アクセシビリティチェック(コントラスト比) | |
| */ | |
| checkAccessibility(theme: ThemeExtractionResult): AccessibilityReport; | |
| } | |
| ``` | |
| #### CSS生成の最適化 | |
| - 事前コンパイル済みベースCSS + 動的CSS変数 | |
| - メモリキャッシュでパフォーマンス向上 | |
| - 差分更新による最適化 | |
| ### 3. ContentsHtmlServiceの拡張 | |
| #### 既存メソッドの拡張 | |
| ```typescript | |
| generateTemplateBasedHtml( | |
| tabName: string, | |
| sections?: ContentSection[], | |
| isDummyMode?: boolean, | |
| theme?: ThemeExtractionResult // 新規追加 | |
| ): { html: string; css: string } | |
| ``` | |
| #### 実装内容 | |
| - テーマが指定された場合はカスタムCSSを生成 | |
| - 既存機能との後方互換性を維持 | |
| - エラー時のフォールバック機能 | |
| ## 第2段階:テーマ抽出機能の統合 | |
| ### 1. HTML生成フローへの組み込み | |
| #### 自動テーマ抽出モードの追加 | |
| ```typescript | |
| async generateContentsHtmlWithTheme( | |
| tabName: string, | |
| sections?: ContentSection[], | |
| options?: { | |
| isDummyMode?: boolean; | |
| autoExtractTheme?: boolean; | |
| referenceUrl?: string; | |
| customTheme?: ThemeExtractionResult; | |
| } | |
| ): Promise<{ html: string; css: string; batchId?: string; theme?: ThemeExtractionResult }> | |
| ``` | |
| #### フロー | |
| 1. 参照URLが指定されている場合、テーマを自動抽出 | |
| 2. カスタムテーマが指定されている場合はそれを使用 | |
| 3. どちらもない場合はデフォルトテーマを使用 | |
| 4. 抽出/指定されたテーマをHTMLスタイルに反映 | |
| ### 2. API拡張 | |
| #### エンドポイント修正 | |
| - 既存:`POST /api/contents-html` | |
| - 追加パラメータ: | |
| ```typescript | |
| { | |
| theme?: ThemeExtractionResult; | |
| autoExtractTheme?: boolean; | |
| referenceUrl?: string; | |
| } | |
| ``` | |
| ### 3. エラーハンドリングと品質保証 | |
| #### フォールバック機能 | |
| - テーマ抽出失敗時はデフォルトテーマを使用 | |
| - 無効なカラーコードの自動修正 | |
| - CSS生成エラー時の安全な代替処理 | |
| #### 品質チェック | |
| - カラーアクセシビリティ(WCAG基準) | |
| - ブランド適合性の基本チェック | |
| - CSS妥当性検証 | |
| ## 実装計画詳細 | |
| ### 新規作成ファイル | |
| #### 1. `server/lib/theme/theme-customizer.ts` (Phase 1.2 実装対象) | |
| ```typescript | |
| export class ThemeCustomizer { | |
| // テーマカスタマイズ機能の中核 | |
| } | |
| export interface AccessibilityReport { | |
| contrastIssues: string[]; | |
| recommendations: string[]; | |
| score: number; | |
| } | |
| ``` | |
| #### 2. `server/lib/styles/theme-variables.ts` (Phase 1.2 実装対象) | |
| ```typescript | |
| export const CSS_VARIABLES = { | |
| colors: { | |
| primary: '--primary-color', | |
| secondary: '--secondary-color', | |
| // ... 15色すべて | |
| }, | |
| fonts: { | |
| heading: '--font-heading', | |
| main: '--font-main', | |
| special: '--font-special', | |
| } | |
| }; | |
| export function generateCSSVariables(theme: ThemeExtractionResult): string; | |
| ``` | |
| #### 3. `server/lib/styles/base-css.ts` (Phase 1.2 実装対象) | |
| ```typescript | |
| // CSS変数を使用した構造用ベースCSS | |
| export const BASE_CSS = ` | |
| /* レイアウト・構造・アニメーション */ | |
| .container { ... } | |
| .section-base { ... } | |
| /* 色・フォントはCSS変数を使用 */ | |
| `; | |
| ``` | |
| ### 修正対象ファイル | |
| #### 1. `server/lib/styles/common-css.ts` (Phase 1.2 実装対象) | |
| - 現在のハードコードされた色をCSS変数に変換 | |
| - セクション背景色ルールの変数化 | |
| - レスポンシブ対応の維持 | |
| #### 2. `server/services/html-preview/contents/contents-html.service.ts` (Phase 1.3 実装対象) | |
| - `generateTemplateBasedHtml`メソッドにテーマパラメータ追加 | |
| - `generateContentsHtmlWithImages`にテーマ統合 | |
| - ThemeCustomizerの組み込み | |
| ### 実装優先度と順序 | |
| #### Phase 1: 基盤構築(優先度:高) | |
| 1. **CSS構造分析とベース設計** ✅ | |
| - CSS詳細分析(1714行)完了 | |
| - 70個以上のハードコード色特定 | |
| - セレクター特異性マップ作成 | |
| - CSS変数設計仕様書完成 | |
| 2. ThemeCustomizerクラスの実装 | |
| 3. CSS変数システムの基本構造 | |
| 4. 色のみのテーマ適用(限定実装) | |
| 5. 基本的な動作確認 | |
| #### Phase 2: 機能拡張(優先度:中) | |
| 1. フォントファミリー対応 | |
| 2. 完全なCSS変数化 | |
| 3. エラーハンドリング強化 | |
| 4. パフォーマンス最適化 | |
| #### Phase 3: 統合機能(優先度:中) | |
| 1. 自動テーマ抽出機能 | |
| 2. API拡張とフロントエンド連携 | |
| 3. アクセシビリティチェック | |
| 4. 包括的テスト | |
| ### リスク管理 | |
| #### 高リスク要素 | |
| 1. **既存CSS構造の複雑さ** | |
| - 対策:段階的移行、詳細なテスト | |
| - 影響:既存HTML出力の崩れ | |
| 2. **パフォーマンス影響** | |
| - 対策:キャッシュ機能、最適化 | |
| - 影響:レスポンス時間の増加 | |
| 3. **ブラウザ互換性** | |
| - 対策:CSS変数フォールバック | |
| - 影響:古いブラウザでの表示問題 | |
| #### 中リスク要素 | |
| 1. CSS優先順位の競合 | |
| 2. 保守性の低下 | |
| 3. デバッグ難易度の増加 | |
| ### 品質保証計画 | |
| #### テスト項目 | |
| 1. **回帰テスト** | |
| - 既存HTML出力との比較 | |
| - 全セクションタイプでの動作確認 | |
| 2. **互換性テスト** | |
| - 複数ブラウザでの表示確認 | |
| - レスポンシブ動作の検証 | |
| 3. **パフォーマンステスト** | |
| - CSS生成時間の測定 | |
| - メモリ使用量の監視 | |
| - ファイルサイズの最適化確認 | |
| 4. **アクセシビリティテスト** | |
| - カラーコントラスト比の検証 | |
| - スクリーンリーダー対応確認 | |
| ### 成功指標 | |
| #### 技術指標 | |
| - CSS生成時間: 100ms以内 | |
| - 既存機能の100%互換性維持 | |
| - アクセシビリティスコア: AA準拠 | |
| #### 機能指標 | |
| - テーマ抽出成功率: 95%以上 | |
| - カラー適用精度: 90%以上 | |
| - フォント適用成功率: 90%以上 | |
| ## 確定実装順序 | |
| ### 作業順序の決定(2025年9月27日) | |
| **批判的評価結果**: 詳細版Phase優先アプローチを採用 | |
| #### 確定作業フロー | |
| 1. **詳細版Phase1**: CSS構造分析とベース設計 ✅ **完了** | |
| - CSS詳細分析(1714行)完了 | |
| - 70個以上のハードコード色特定 | |
| - セレクター特異性マップ作成 | |
| - CSS変数設計仕様書完成 | |
| 2. **詳細版Phase2**: ThemeCustomizerクラス実装 🔄 **次期実装** | |
| - ThemeCustomizerクラス実装 | |
| - CSS変数システム構築 | |
| - 単体テスト実施 | |
| 3. **詳細版Phase3**: ContentsHtmlService拡張 ⏳ **待機** | |
| - ContentsHtmlService拡張 | |
| - 既存機能100%回帰テスト | |
| - 基盤部分の品質確保 | |
| 4. **概要版Phase2**: 機能拡張 ⏳ **後続**(安定基盤上での拡張) | |
| - フォントファミリー対応 | |
| - 完全なCSS変数化 | |
| - パフォーマンス最適化 | |
| 5. **概要版Phase3**: 統合機能 ⏳ **最終** | |
| - 自動テーマ抽出機能 | |
| - API拡張とフロントエンド連携 | |
| - 包括的テスト | |
| #### 採用理由 | |
| 1. **リスク最小化**: 高リスク要素に集中し、段階的実装でロールバック可能 | |
| 2. **技術的依存関係**: 基盤完成後の機能拡張により安定性確保 | |
| 3. **品質保証**: 詳細版Phase3で基盤品質確保後、機能拡張に移行 | |
| ## まとめ | |
| この計画により、既存のHTML生成機能を損なうことなく、段階的にテーマカスタマイズ機能を実装できます。特に重要なのは: | |
| 1. **段階的実装**による リスク最小化 | |
| 2. **既存機能との互換性**の維持 | |
| 3. **パフォーマンス**への配慮 | |
| 4. **保守性**の確保 | |
| **確定方針**: 詳細版Phase1〜3を完全に完了させてから、概要版Phase2以降に移行します。実装時は各段階で十分なテストを行い、問題があれば前の段階に戻れる柔軟性を保つことが重要です。 |