Web UI 強化実装完了レポート
実装日時
2025-11-28
概要
Web UI を「SaaSっぽい見た目・体験」に強化するため、以下の機能を実装しました:
- C-1: Run 一覧にステータスアイコン/色付きバッジを追加
- C-2: Run 一覧に「実行時間」カラムを追加
- C-3: プロジェクトダッシュボードをカードレイアウトにして、主要KPIを一目で分かるようにする
- C-4: プロジェクト詳細→ダッシュボードへの導線追加
実装ステップ
ステップ1: C-1 - Run 一覧にステータスアイコン/バッジを追加
1-1. Run 一覧 HTML の共通化(ヘルパー関数導入)
ファイル: src/nexuscore/webapp/views_projects.py
実装内容:
_format_duration(): 実行時間をフォーマット(秒、分、時間単位で表示)_compute_run_duration(): Run の実行時間を計算(秒)_render_run_status_badge(): ステータスごとに色付きバッジ+アイコンを生成- PENDING: 灰色・⏱ アイコン
- RUNNING: 青・▶ アイコン(点滅アニメーション)
- SUCCESS: 緑・✔ アイコン
- FAILED: 赤・✖ アイコン
render_run_table(): Run 一覧テーブルをHTMLとして生成する共通関数
特徴:
- ステータスバッジにCSSアニメーション(RUNNING時は点滅)
- テーブルスタイルを統一
- 再利用可能なヘルパー関数として実装
1-2. 既存のプロジェクト詳細画面を更新
変更内容:
project_detail()関数で、既存のインラインHTMLテーブル生成をrender_run_table()に置き換え- ステータス表示をバッジ形式に変更
ステップ2: C-2 - 実行時間カラムの追加
実装内容:
render_run_table()内で_compute_run_duration()と_format_duration()を使用して Duration カラムを追加- JSONレスポンスにも
duration_secを追加(project_detail()のruns_dataに含める)
出力形式:
- 60秒未満:
"30s" - 60分未満:
"5m 30s" - 60分以上:
"2h 15m"
ステップ3: C-3 - プロジェクトダッシュボードのカードレイアウト化
3-1. プロジェクトダッシュボードルートの追加
ファイル: src/nexuscore/webapp/views_dashboard.py
実装内容:
/dashboard/projects/<project_id>ルートを追加project_dashboard()関数で以下を集計:- 統計情報(総Run数、成功数、失敗数、成功率)
- 最新Run情報
- 最新Runのメトリクス(パッチ数、影響ファイル数、LLM呼び出し数、コスト、実行時間)
- LLMコスト内訳(モデル別)
- 直近のRun一覧(最大10件)
3-2. カードレイアウトHTML生成関数の実装
実装内容:
render_project_dashboard_html(): カードレイアウトのHTMLを生成_render_llm_cost_table(): LLMコスト内訳テーブルを生成_render_recent_runs_list(): 直近のRun一覧を生成
カード構成:
- Project Summary Card: 成功率、総Run数、成功数、失敗数
- Latest Run Summary Card: Run ID、ステータス、実行時間、パッチ数、LLM呼び出し数、推定コスト
- LLM Cost Breakdown Card: モデル別の呼び出し数、トークン数、コスト
- Recent Runs Card: 直近10件のRun一覧(ステータスバッジ付き)
デザイン特徴:
- モダンなカードレイアウト(グリッドシステム)
- レスポンシブデザイン(
auto-fitで自動調整) - 統一されたカラーパレット
- ステータスバッジのアニメーション
ステップ4: C-4 - プロジェクト詳細→ダッシュボードへの導線追加
実装内容:
project_detail()関数のHTMLに「Open Project Dashboard」ボタンを追加- ボタンスタイルを統一(青背景、白文字、ホバー効果)
変更ファイル一覧
変更ファイル
src/nexuscore/webapp/views_projects.py- ヘルパー関数を追加(
_format_duration,_compute_run_duration,_render_run_status_badge,render_run_table) project_detail()を更新(render_run_table()を使用、ダッシュボードリンクを追加)- JSONレスポンスに
duration_secを追加
- ヘルパー関数を追加(
src/nexuscore/webapp/views_dashboard.py/dashboard/projects/<project_id>ルートを追加project_dashboard()関数を実装render_project_dashboard_html()関数を実装_render_llm_cost_table()関数を実装_render_recent_runs_list()関数を実装views_projectsからヘルパー関数をインポート
新規作成ファイル
tests/webapp/test_run_table_status.py- ステータスバッジ生成のテスト
tests/webapp/test_dashboard_cards.py- ダッシュボードHTML生成のテスト
動作確認結果
静的解析結果
- リンターエラー: なし
- 型チェック: 問題なし
設計上の改善点
- コードの再利用性:
- Run 一覧テーブル生成をヘルパー関数化し、複数箇所で再利用可能に
- ステータスバッジ生成を一元管理
- UI/UX の改善:
- ステータスが視覚的に分かりやすく(色付きバッジ+アイコン)
- 実行時間が一目で分かる
- カードレイアウトで主要KPIを一覧表示
- 情報の整理:
- プロジェクト概要、最新Run、LLMコスト、Run履歴をカードで整理
- レスポンシブデザインで様々な画面サイズに対応
既知の制約・注意事項
- テンプレートエンジン未使用:
- 現在はインラインHTML文字列の組み立てで実装
- 将来的にテンプレートエンジン(Jinja2等)に移行可能な設計
- メトリクス集計:
- 現在は簡易版のメトリクス集計を実装
- より詳細なメトリクスが必要な場合は
metrics.pyを拡張
- LLMコスト内訳:
- 最新Runのみのコスト内訳を表示
- プロジェクト全体のコスト内訳は別途実装が必要
次のステップ
推奨される動作確認
- 実際のWeb UIで確認:
- プロジェクト詳細画面で Run 一覧のステータスバッジと実行時間を確認
- ダッシュボードでカードレイアウトが正しく表示されるか確認
- レスポンシブデザインが動作するか確認
- テストの実行:
python -m pytest tests/webapp/test_run_table_status.py -v python -m pytest tests/webapp/test_dashboard_cards.py -v - ブラウザでの確認:
- 各種ステータス(PENDING, RUNNING, SUCCESS, FAILED)でバッジが正しく表示されるか
- RUNNING ステータスでアニメーションが動作するか
- ダッシュボードのカードが正しく配置されるか
将来の拡張
- テンプレートエンジンの導入:
- Jinja2 などのテンプレートエンジンを導入してHTML生成を改善
- メトリクスの拡張:
- より詳細なメトリクス(テストカバレッジ、コード品質スコア等)を追加
- 時系列グラフの追加
- インタラクティブ機能:
- カードのクリックで詳細表示
- フィルタリング・ソート機能
関連ドキュメント
docs/completion_reports/SAAS_UX_ENHANCEMENT_COMPLETION_REPORT.md- 以前のUX強化レポートdocs/saas_architecture.md- SaaS アーキテクチャドキュメント