Spaces:
Sleeping
Sleeping
File size: 11,738 Bytes
68f7925 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 |
# テーマカスタマイズ機能実装計画
## 概要
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以降に移行します。実装時は各段階で十分なテストを行い、問題があれば前の段階に戻れる柔軟性を保つことが重要です。 |