• #financial-quiz
  • #performance
  • #improvement-plan
  • #completed
開発完了

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.ts35MB-
scatter-data.ts52KB99.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 - EPS
  • EPS_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

期待される効果

項目BeforeAfter(予想)
ファイルサイズ35MB500KB〜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  # 軽量版(新規)

実装優先度

  1. : スクリプト作成 (generate-eac-light-data.mjs)
  2. : 軽量データ生成 (eac-light-data.ts)
  3. : Vueファイル更新 (actual-consensus.vue)
  4. : 古いデータファイルの整理

実装結果(2025-12-15 完了)

作成したファイル

ファイル説明
scripts/generate-eac-light-data.mjsSQLiteから軽量版データを抽出するスクリプト
app/composables/eac-light-data.ts軽量版データファイル(自動生成)

サイズ削減結果

項目BeforeAfter削減率
データファイルサイズ36MB996KB97.3%
年次期間数全期間1,328期間-
四半期期間数全期間2,785期間-
メトリクス数50+項目9項目約82%削減

抽出したメトリクス

以下の9つのメトリクスのみを抽出:

  1. Sales_Adjusted - 売上
  2. Sales_Adjusted_YoY_Pct_Chg - 売上YoY成長率
  3. Net_Income_Adjusted - 純利益
  4. Net_Income_Adjusted_YoY_Pct_Chg - 純利益YoY成長率
  5. EPS_Adjusted - EPS
  6. EPS_Adjusted_YoY_Pct_Chg - EPS YoY成長率
  7. Gross_Margin_Pct - 粗利益率
  8. EBIT_Adj._Margin_Pct - EBITマージン
  9. 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エラー対策の解説