FE_Dev / docs /archive /theme-customization-implementation-plan.md
GitHub Actions
Deploy from GitHub Actions [dev] - 2025-10-31 07:28:50
68f7925
# テーマカスタマイズ機能実装計画
## 概要
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以降に移行します。実装時は各段階で十分なテストを行い、問題があれば前の段階に戻れる柔軟性を保つことが重要です。