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生成フローとの親和性が高い
課題と懸念:
CSS構造の複雑性
- 現在の
commonCSSは1600行以上の巨大ファイル - セクション別・レスポンシブ対応など複雑な構造
- nth-of-type セレクターによる詳細な背景色制御
- 現在の
動的CSS生成の性能問題
- テーマ適用のたびにCSS全体を動的生成すると処理時間が増大
- ブラウザでの CSS パース時間への影響
CSS優先順位の問題
- 既存の詳細なセレクター(.section-base:nth-of-type(3n) など)とカスタムテーマの競合
- 特異性の管理が複雑化
保守性の課題
- CSSカスタマイズ機能追加により、既存コードの可読性・保守性が低下する可能性
- デバッグ難易度の増加
第1段階:commonCSSのテーマ対応拡張
1. 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
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の拡張
既存メソッドの拡張
generateTemplateBasedHtml(
tabName: string,
sections?: ContentSection[],
isDummyMode?: boolean,
theme?: ThemeExtractionResult // 新規追加
): { html: string; css: string }
実装内容
- テーマが指定された場合はカスタムCSSを生成
- 既存機能との後方互換性を維持
- エラー時のフォールバック機能
第2段階:テーマ抽出機能の統合
1. HTML生成フローへの組み込み
自動テーマ抽出モードの追加
async generateContentsHtmlWithTheme(
tabName: string,
sections?: ContentSection[],
options?: {
isDummyMode?: boolean;
autoExtractTheme?: boolean;
referenceUrl?: string;
customTheme?: ThemeExtractionResult;
}
): Promise<{ html: string; css: string; batchId?: string; theme?: ThemeExtractionResult }>
フロー
- 参照URLが指定されている場合、テーマを自動抽出
- カスタムテーマが指定されている場合はそれを使用
- どちらもない場合はデフォルトテーマを使用
- 抽出/指定されたテーマをHTMLスタイルに反映
2. API拡張
エンドポイント修正
- 既存:
POST /api/contents-html - 追加パラメータ:
{ theme?: ThemeExtractionResult; autoExtractTheme?: boolean; referenceUrl?: string; }
3. エラーハンドリングと品質保証
フォールバック機能
- テーマ抽出失敗時はデフォルトテーマを使用
- 無効なカラーコードの自動修正
- CSS生成エラー時の安全な代替処理
品質チェック
- カラーアクセシビリティ(WCAG基準)
- ブランド適合性の基本チェック
- CSS妥当性検証
実装計画詳細
新規作成ファイル
1. server/lib/theme/theme-customizer.ts (Phase 1.2 実装対象)
export class ThemeCustomizer {
// テーマカスタマイズ機能の中核
}
export interface AccessibilityReport {
contrastIssues: string[];
recommendations: string[];
score: number;
}
2. server/lib/styles/theme-variables.ts (Phase 1.2 実装対象)
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 実装対象)
// 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: 基盤構築(優先度:高)
- CSS構造分析とベース設計 ✅
- CSS詳細分析(1714行)完了
- 70個以上のハードコード色特定
- セレクター特異性マップ作成
- CSS変数設計仕様書完成
- ThemeCustomizerクラスの実装
- CSS変数システムの基本構造
- 色のみのテーマ適用(限定実装)
- 基本的な動作確認
Phase 2: 機能拡張(優先度:中)
- フォントファミリー対応
- 完全なCSS変数化
- エラーハンドリング強化
- パフォーマンス最適化
Phase 3: 統合機能(優先度:中)
- 自動テーマ抽出機能
- API拡張とフロントエンド連携
- アクセシビリティチェック
- 包括的テスト
リスク管理
高リスク要素
既存CSS構造の複雑さ
- 対策:段階的移行、詳細なテスト
- 影響:既存HTML出力の崩れ
パフォーマンス影響
- 対策:キャッシュ機能、最適化
- 影響:レスポンス時間の増加
ブラウザ互換性
- 対策:CSS変数フォールバック
- 影響:古いブラウザでの表示問題
中リスク要素
- CSS優先順位の競合
- 保守性の低下
- デバッグ難易度の増加
品質保証計画
テスト項目
回帰テスト
- 既存HTML出力との比較
- 全セクションタイプでの動作確認
互換性テスト
- 複数ブラウザでの表示確認
- レスポンシブ動作の検証
パフォーマンステスト
- CSS生成時間の測定
- メモリ使用量の監視
- ファイルサイズの最適化確認
アクセシビリティテスト
- カラーコントラスト比の検証
- スクリーンリーダー対応確認
成功指標
技術指標
- CSS生成時間: 100ms以内
- 既存機能の100%互換性維持
- アクセシビリティスコア: AA準拠
機能指標
- テーマ抽出成功率: 95%以上
- カラー適用精度: 90%以上
- フォント適用成功率: 90%以上
確定実装順序
作業順序の決定(2025年9月27日)
批判的評価結果: 詳細版Phase優先アプローチを採用
確定作業フロー
詳細版Phase1: CSS構造分析とベース設計 ✅ 完了
- CSS詳細分析(1714行)完了
- 70個以上のハードコード色特定
- セレクター特異性マップ作成
- CSS変数設計仕様書完成
詳細版Phase2: ThemeCustomizerクラス実装 🔄 次期実装
- ThemeCustomizerクラス実装
- CSS変数システム構築
- 単体テスト実施
詳細版Phase3: ContentsHtmlService拡張 ⏳ 待機
- ContentsHtmlService拡張
- 既存機能100%回帰テスト
- 基盤部分の品質確保
概要版Phase2: 機能拡張 ⏳ 後続(安定基盤上での拡張)
- フォントファミリー対応
- 完全なCSS変数化
- パフォーマンス最適化
概要版Phase3: 統合機能 ⏳ 最終
- 自動テーマ抽出機能
- API拡張とフロントエンド連携
- 包括的テスト
採用理由
- リスク最小化: 高リスク要素に集中し、段階的実装でロールバック可能
- 技術的依存関係: 基盤完成後の機能拡張により安定性確保
- 品質保証: 詳細版Phase3で基盤品質確保後、機能拡張に移行
まとめ
この計画により、既存のHTML生成機能を損なうことなく、段階的にテーマカスタマイズ機能を実装できます。特に重要なのは:
- 段階的実装による リスク最小化
- 既存機能との互換性の維持
- パフォーマンスへの配慮
- 保守性の確保
確定方針: 詳細版Phase1〜3を完全に完了させてから、概要版Phase2以降に移行します。実装時は各段階で十分なテストを行い、問題があれば前の段階に戻れる柔軟性を保つことが重要です。