開発完了
actual-consensus ページ改善計画
現状の問題
ページ情報
- URL:
/financial-quiz/actual-consensus - 機能: 個別企業のActuals(実績)とConsensus(コンセンサス予想)を時系列チャートで表示
問題点
| 項目 | 現状 |
|---|---|
| データファイル | actual-consensus-data.ts |
| ファイルサイズ | 35MB |
| SSR | 動作するが不安定になる可能性あり |
| 読み込み速度 | 遅い(35MBをブラウザに送信) |
なぜ35MBなのか
100社 × 全メトリクス(50+項目)× 年次(10年分)× 四半期(40期分)= 35MB
含まれるが使っていないデータ例:
- Book Value, NAV/Share
- Interest Expense
- Return on Assets, Return on Equity
- Enterprise Value
- 多くのYoY/QoQ変化率の重複
改善案: データ分割
参考: eps-per-scatter での成功事例
| ファイル | サイズ | 削減率 |
|---|---|---|
| actual-consensus-data.ts | 35MB | - |
| scatter-data.ts | 52KB | 99.8%削減 |
散布図ページでは、必要なメトリクス(EPS成長率、PER)だけを抽出して軽量化に成功。
actual-consensus で使用しているメトリクス
現在のチャートで実際に使用しているメトリクス:
年次・四半期共通:
Sales_Adjusted- 売上Sales_Adjusted_YoY_Pct_Chg- 売上YoY成長率Net_Income_Adjusted- 純利益Net_Income_Adjusted_YoY_Pct_Chg- 純利益YoY成長率EPS_Adjusted- EPSEPS_Adjusted_YoY_Pct_Chg- EPS YoY成長率Gross_Margin_Pct- 粗利益率EBIT_Adj._Margin_Pct- EBITマージンNet_Income_Adj._Margin_Pct- 純利益率
→ 約10メトリクスのみ使用(50+中)
提案: 軽量データファイル生成
apps/web/
├── scripts/
│ └── generate-eac-light-data.mjs # 新規作成
└── app/composables/
└── eac-light-data.ts # 軽量版(推定500KB〜1MB)
実装手順
Step 1: 軽量データ生成スクリプト作成
// scripts/generate-eac-light-data.mjs
// 抽出するメトリクス(実際に使用しているもののみ)
const REQUIRED_METRICS = [
'Sales_Adjusted',
'Sales_Adjusted_YoY_Pct_Chg',
'Net_Income_Adjusted',
'Net_Income_Adjusted_YoY_Pct_Chg',
'EPS_Adjusted',
'EPS_Adjusted_YoY_Pct_Chg',
'Gross_Margin_Pct',
'EBIT_Adj._Margin_Pct',
'Net_Income_Adj._Margin_Pct'
]
// 年次: 直近10年 + 予想4年
// 四半期: 直近20期 + 予想8期
Step 2: Vueファイル更新
// Before
import { actualConsensusData } from '~/composables/actual-consensus-data'
// After
import { eacLightData } from '~/composables/eac-light-data'
Step 3: データ更新コマンド
cd apps/web
node scripts/generate-eac-light-data.mjs
期待される効果
| 項目 | Before | After(予想) |
|---|---|---|
| ファイルサイズ | 35MB | 500KB〜1MB |
| 削減率 | - | 97〜98% |
| SSR安定性 | 不安定 | 安定 |
| 初期読み込み | 遅い | 高速 |
注意点
後方互換性
actual-consensus-data.tsは他のページで使用している可能性- 削除せず、両方を共存させる
- 新規ページは軽量版を使用
データ同期
SQLiteが更新された場合、両方のスクリプトを実行:
cd apps/web
node scripts/generate-eac-data.mjs # 従来版(35MB)
node scripts/generate-eac-light-data.mjs # 軽量版(新規)
実装優先度
- 高: スクリプト作成 (
generate-eac-light-data.mjs) - 高: 軽量データ生成 (
eac-light-data.ts) - 中: Vueファイル更新 (
actual-consensus.vue) - 低: 古いデータファイルの整理
実装結果(2025-12-15 完了)
作成したファイル
| ファイル | 説明 |
|---|---|
scripts/generate-eac-light-data.mjs | SQLiteから軽量版データを抽出するスクリプト |
app/composables/eac-light-data.ts | 軽量版データファイル(自動生成) |
サイズ削減結果
| 項目 | Before | After | 削減率 |
|---|---|---|---|
| データファイルサイズ | 36MB | 996KB | 97.3% |
| 年次期間数 | 全期間 | 1,328期間 | - |
| 四半期期間数 | 全期間 | 2,785期間 | - |
| メトリクス数 | 50+項目 | 9項目 | 約82%削減 |
抽出したメトリクス
以下の9つのメトリクスのみを抽出:
Sales_Adjusted- 売上Sales_Adjusted_YoY_Pct_Chg- 売上YoY成長率Net_Income_Adjusted- 純利益Net_Income_Adjusted_YoY_Pct_Chg- 純利益YoY成長率EPS_Adjusted- EPSEPS_Adjusted_YoY_Pct_Chg- EPS YoY成長率Gross_Margin_Pct- 粗利益率EBIT_Adj._Margin_Pct- EBITマージンNet_Income_Adj._Margin_Pct- 純利益率
データ更新手順
SQLiteデータベースが更新された場合:
cd apps/web
node scripts/generate-eac-light-data.mjs # 軽量版を再生成
従来版(35MB)も必要な場合:
node scripts/generate-eac-data.mjs # 従来版(35MB)
関連ドキュメント
/2025-12-15/eps-per-scatter-page-guide- 散布図ページの軽量化実装例/2025-12-15/nuxt-client-only-guide- SSRエラー対策の解説