[{"data":1,"prerenderedAt":537},["ShallowReactive",2],{"content-/financial-quiz-directory-structure":3,"all-pages-for-dir":515,"related-/financial-quiz-directory-structure":516,"og-image-/financial-quiz-directory-structure":536},{"id":4,"title":5,"body":6,"category":499,"concepts":499,"description":500,"extension":501,"meta":502,"navigation":503,"ogImage":499,"path":504,"project_name":499,"published":505,"publishedAt":506,"seo":507,"source":499,"stem":508,"tags":509,"todo":499,"unpublished":505,"updatedAt":513,"__hash__":514},"pages/2025-12/2025-12-22/financial-quiz-directory-structure.md","financial-quizディレクトリ構造の整理計画",{"type":7,"value":8,"toc":483},"minimark",[9,12,17,28,35,45,48,52,56,62,64,67,71,138,142,222,227,254,258,362,366,377,381,438,440,443,467,469,472],[10,11,5],"h1",{"id":5},[13,14,16],"h2",{"id":15},"現状の構造2025-12-23時点","現状の構造（2025-12-23時点）",[18,19,24],"pre",{"className":20,"code":22,"language":23},[21],"language-text","financial-quiz/\n├── AnimationControlPanel.vue\n├── AnimationExportButton.vue\n├── BaseCompanyComparison.vue\n├── ChartComparison.vue\n├── EPSGrowthComparison.vue\n├── FillInBlankQuestion.vue\n├── FinancialChartsPanel.vue\n├── FinancialDataTable.vue\n├── GrossMarginComparison.vue\n├── NetIncomeComparison.vue\n├── RevenueMarketCapComparison.vue\n│\n├── charts/                           # ✅ Phase 4完了\n│   ├── base/\n│   │   ├── BaseBarChart.vue\n│   │   ├── BaseLineChart.vue\n│   │   └── index.ts\n│   ├── composables/\n│   │   └── useChartDimensions.ts\n│   ├── chartLayout.ts\n│   ├── EPSChart.vue\n│   ├── FCFChart.vue\n│   ├── ProfitMarginChart.vue\n│   ├── ExpenseRatioChart.vue\n│   ├── EvMultiplesChart.vue\n│   ├── LiquidityRatioChart.vue\n│   ├── MarketCapChart.vue\n│   ├── ROEChart.vue\n│   ├── EACMarginChart.vue\n│   ├── EACSingleMetricChart.vue\n│   ├── PEEvEbitChart.vue\n│   └── index.ts\n│\n├── waterfall/                        # ✅ Phase 1完了\n│   ├── PLWaterfallChart.vue\n│   ├── CFWaterfallChart.vue\n│   └── index.ts\n│\n├── proportional-statements/          # ✅ Phase 2完了\n│   ├── ProportionalFinancialStatements.vue\n│   ├── ProportionalFinancialStatementsAnimated.vue\n│   ├── ProportionalFinancialStatementsComparison.vue\n│   ├── BalanceSheetBox.vue\n│   ├── BalanceSheetComparison.vue\n│   └── index.ts\n│\n├── proportional-animation/           # 既存ディレクトリ\n│   ├── CompanySelectorModal.vue\n│   ├── CompanySelectorSidebar.vue\n│   ├── ExportContainer.vue\n│   ├── index.ts\n│   └── composables/\n│       ├── industry-short-names.ts\n│       └── useCompanyFinancialMetrics.ts\n│\n├── nvidia-eps-forecast/              # 既存ディレクトリ\n│   └── ...\n│\n└── micron-eps-forecast/              # 既存ディレクトリ\n    └── ...\n","text",[25,26,22],"code",{"__ignoreMap":27},"",[29,30,31],"p",{},[32,33,34],"strong",{},"残りの課題:",[36,37,38,42],"ul",{},[39,40,41],"li",{},"比較コンポーネント（Comparison系）がルート直下に残っている",[39,43,44],{},"AnimationControlPanel/AnimationExportButtonが未整理",[46,47],"hr",{},[13,49,51],{"id":50},"提案-機能別ディレクトリ構造","提案: 機能別ディレクトリ構造",[53,54,55],"h3",{"id":55},"全体計画",[18,57,60],{"className":58,"code":59,"language":23},[21],"financial-quiz/\n│\n├── waterfall/                      # ✅ 完了 - ウォーターフォールチャート\n│   ├── PLWaterfallChart.vue\n│   ├── CFWaterfallChart.vue\n│   └── index.ts\n│\n├── proportional-statements/        # ✅ 完了 - 比例縮尺財務諸表\n│   ├── ProportionalFinancialStatements.vue\n│   ├── ProportionalFinancialStatementsAnimated.vue\n│   ├── ProportionalFinancialStatementsComparison.vue\n│   ├── BalanceSheetBox.vue\n│   ├── BalanceSheetComparison.vue\n│   └── index.ts\n│\n├── animation/                      # アニメーション制御（共通）\n│   ├── AnimationControlPanel.vue\n│   ├── AnimationExportButton.vue\n│   ├── CompanySelectorModal.vue\n│   ├── CompanySelectorSidebar.vue\n│   ├── ExportContainer.vue\n│   ├── composables/\n│   │   ├── useCompanyFinancialMetrics.ts\n│   │   └── industry-short-names.ts\n│   └── index.ts\n│\n├── charts/                         # ✅ 完了 - 各種チャート\n│   ├── base/                       # ベースコンポーネント\n│   │   ├── BaseBarChart.vue\n│   │   ├── BaseLineChart.vue\n│   │   └── index.ts\n│   ├── composables/\n│   │   └── useChartDimensions.ts\n│   ├── chartLayout.ts\n│   ├── EPSChart.vue\n│   ├── FCFChart.vue\n│   ├── ProfitMarginChart.vue\n│   ├── ExpenseRatioChart.vue\n│   ├── EvMultiplesChart.vue\n│   ├── LiquidityRatioChart.vue\n│   ├── MarketCapChart.vue\n│   ├── ROEChart.vue\n│   ├── EACMarginChart.vue\n│   ├── EACSingleMetricChart.vue\n│   ├── PEEvEbitChart.vue\n│   └── index.ts\n│\n├── comparison/                     # 比較コンポーネント\n│   ├── BaseCompanyComparison.vue\n│   ├── ChartComparison.vue\n│   ├── GrossMarginComparison.vue\n│   ├── NetIncomeComparison.vue\n│   ├── EPSGrowthComparison.vue\n│   ├── RevenueMarketCapComparison.vue\n│   └── index.ts\n│\n├── forecasts/                      # 企業別予測\n│   ├── nvidia/\n│   │   └── (nvidia-eps-forecastの内容)\n│   └── micron/\n│   │   └── (micron-eps-forecastの内容)\n│\n└── shared/                         # 共有コンポーネント\n    ├── FillInBlankQuestion.vue\n    ├── FinancialChartsPanel.vue\n    ├── FinancialDataTable.vue\n    └── index.ts\n",[25,61,59],{"__ignoreMap":27},[46,63],{},[13,65,66],{"id":66},"実施状況",[53,68,70],{"id":69},"phase-1-waterfall-2025-12-22-完了","Phase 1: waterfall/ (2025-12-22 完了)",[72,73,74,87],"table",{},[75,76,77],"thead",{},[78,79,80,84],"tr",{},[81,82,83],"th",{},"ファイル",[81,85,86],{},"状態",[88,89,90,102,112,121,131],"tbody",{},[78,91,92,99],{},[93,94,95,98],"td",{},[25,96,97],{},"waterfall/"," ディレクトリ作成",[93,100,101],{},"✅ 完了",[78,103,104,110],{},[93,105,106,109],{},[25,107,108],{},"PLWaterfallChart.vue"," 移動",[93,111,101],{},[78,113,114,119],{},[93,115,116,109],{},[25,117,118],{},"CFWaterfallChart.vue",[93,120,101],{},[78,122,123,129],{},[93,124,125,128],{},[25,126,127],{},"index.ts"," 作成",[93,130,101],{},[78,132,133,136],{},[93,134,135],{},"importパス更新",[93,137,101],{},[53,139,141],{"id":140},"phase-2-proportional-statements-2025-12-22-完了","Phase 2: proportional-statements/ (2025-12-22 完了)",[72,143,144,152],{},[75,145,146],{},[78,147,148,150],{},[81,149,83],{},[81,151,86],{},[88,153,154,163,172,181,190,199,208,216],{},[78,155,156,161],{},[93,157,158,98],{},[25,159,160],{},"proportional-statements/",[93,162,101],{},[78,164,165,170],{},[93,166,167,109],{},[25,168,169],{},"ProportionalFinancialStatements.vue",[93,171,101],{},[78,173,174,179],{},[93,175,176,109],{},[25,177,178],{},"ProportionalFinancialStatementsAnimated.vue",[93,180,101],{},[78,182,183,188],{},[93,184,185,109],{},[25,186,187],{},"ProportionalFinancialStatementsComparison.vue",[93,189,101],{},[78,191,192,197],{},[93,193,194,109],{},[25,195,196],{},"BalanceSheetBox.vue",[93,198,101],{},[78,200,201,206],{},[93,202,203,109],{},[25,204,205],{},"BalanceSheetComparison.vue",[93,207,101],{},[78,209,210,214],{},[93,211,212,128],{},[25,213,127],{},[93,215,101],{},[78,217,218,220],{},[93,219,135],{},[93,221,101],{},[29,223,224],{},[32,225,226],{},"影響を受けたファイル:",[36,228,229,234,239,244,249],{},[39,230,231],{},[25,232,233],{},"apps/web/app/pages/financial-quiz/waterfall-test.vue",[39,235,236],{},[25,237,238],{},"apps/web/app/pages/financial-quiz/proportional-animation.vue",[39,240,241],{},[25,242,243],{},"apps/web/app/pages/financial-quiz/proportional-comparison.vue",[39,245,246],{},[25,247,248],{},"apps/web/app/pages/financial-quiz/balance-sheet-test.vue",[39,250,251],{},[25,252,253],{},"apps/web/app/components/financial-quiz/proportional-animation/ExportContainer.vue",[53,255,257],{"id":256},"phase-4-charts-2025-12-23-完了","Phase 4: charts/ (2025-12-23 完了)",[72,259,260,268],{},[75,261,262],{},[78,263,264,266],{},[81,265,83],{},[81,267,86],{},[88,269,270,279,289,301,312,324,335,347,356],{},[78,271,272,277],{},[93,273,274,98],{},[25,275,276],{},"charts/",[93,278,101],{},[78,280,281,287],{},[93,282,283,286],{},[25,284,285],{},"charts/base/"," サブディレクトリ作成",[93,288,101],{},[78,290,291,299],{},[93,292,293,296,297],{},[25,294,295],{},"BaseBarChart.vue"," → ",[25,298,285],{},[93,300,101],{},[78,302,303,310],{},[93,304,305,296,308],{},[25,306,307],{},"BaseLineChart.vue",[25,309,285],{},[93,311,101],{},[78,313,314,322],{},[93,315,316,319,320],{},[25,317,318],{},"EPSChart.vue"," 他11ファイル → ",[25,321,276],{},[93,323,101],{},[78,325,326,333],{},[93,327,328,296,331],{},[25,329,330],{},"chartLayout.ts",[25,332,276],{},[93,334,101],{},[78,336,337,345],{},[93,338,339,296,342],{},[25,340,341],{},"composables/useChartDimensions.ts",[25,343,344],{},"charts/composables/",[93,346,101],{},[78,348,349,354],{},[93,350,351,353],{},[25,352,127],{}," 作成（base/, charts/）",[93,355,101],{},[78,357,358,360],{},[93,359,135],{},[93,361,101],{},[29,363,364],{},[32,365,226],{},[36,367,368,373],{},[39,369,370],{},[25,371,372],{},"apps/web/app/components/financial-quiz/FinancialChartsPanel.vue",[39,374,375],{},[25,376,253],{},[53,378,380],{"id":379},"phase-3以降-未着手","Phase 3以降: 未着手",[72,382,383,395],{},[75,384,385],{},[78,386,387,390,393],{},[81,388,389],{},"Phase",[81,391,392],{},"ディレクトリ",[81,394,86],{},[88,396,397,408,418,428],{},[78,398,399,402,405],{},[93,400,401],{},"Phase 3",[93,403,404],{},"animation/ (proportional-animation をリネーム・統合)",[93,406,407],{},"未着手",[78,409,410,413,416],{},[93,411,412],{},"Phase 5",[93,414,415],{},"comparison/",[93,417,407],{},[78,419,420,423,426],{},[93,421,422],{},"Phase 6",[93,424,425],{},"forecasts/",[93,427,407],{},[78,429,430,433,436],{},[93,431,432],{},"Phase 7",[93,434,435],{},"shared/",[93,437,407],{},[46,439],{},[13,441,442],{"id":442},"移動時の作業手順",[444,445,446,449,456,461,464],"ol",{},[39,447,448],{},"ディレクトリを作成",[39,450,451,452,455],{},"ファイルを移動（",[25,453,454],{},"git mv","推奨）",[39,457,458,460],{},[25,459,127],{},"を作成してre-export",[39,462,463],{},"importしているファイルのパスを更新",[39,465,466],{},"ビルド・テストで動作確認",[46,468],{},[13,470,471],{"id":471},"備考",[36,473,474,477,480],{},[39,475,476],{},"コンポーネントの内部ロジックは変更しない",[39,478,479],{},"段階的に実施し、一度に全てを移動しない",[39,481,482],{},"各Phase完了後にテストを実行して動作確認",{"title":27,"searchDepth":484,"depth":484,"links":485},2,[486,487,491,497,498],{"id":15,"depth":484,"text":16},{"id":50,"depth":484,"text":51,"children":488},[489],{"id":55,"depth":490,"text":55},3,{"id":66,"depth":484,"text":66,"children":492},[493,494,495,496],{"id":69,"depth":490,"text":70},{"id":140,"depth":490,"text":141},{"id":256,"depth":490,"text":257},{"id":379,"depth":490,"text":380},{"id":442,"depth":484,"text":442},{"id":471,"depth":484,"text":471},null,"コンポーネントの機能別ディレクトリ分割の計画と実施状況","md",{},true,"/financial-quiz-directory-structure",false,"2025-12-22T00:00:00.000Z",{"title":5,"description":500},"2025-12/2025-12-22/financial-quiz-directory-structure",[510,511,512],"refactoring","directory-structure","financial-quiz","2025-12-23T00:00:00.000Z","V9lenFTn3cX5ctpx3WLLTcCQdJSUkdg1Xqrz416F7aM",[],[517,520,524,528,532],{"title":518,"path":519,"publishedAt":506},"チャートX軸整列の学び - 個別修正 vs 共通化リファクタリング","/financial-quiz-chart-alignment-lessons",{"title":521,"path":522,"publishedAt":523},"NVIDIA EPS予測ページ リファクタリング計画","/nvidia-eps-forecast-refactoring-plan","2025-12-18T00:00:00.000Z",{"title":525,"path":526,"publishedAt":527},"eurekapu-nuxt4 全77ページ2カラム化 + Part 2 投資判断クイズ + 教科書 CH8-12 実装","/eurekapu-2col-and-part2-textbook","2026-05-15T00:00:00.000Z",{"title":529,"path":530,"publishedAt":531},"CF精算表Excel自動生成のデバッグ記録 -- SUMIFS不一致・符号規則・3600行リファクタリング計画","/cfws-excel-automation-debug","2026-04-14T00:00:00.000Z",{"title":533,"path":534,"publishedAt":535},"MillerViewer SSRハイドレーションバグ修正と純粋関数リファクタリング","/miller-viewer-ssr-hydration-fix","2026-03-15T00:00:00.000Z","https://log.eurekapu.com/og/blog/financial-quiz-directory-structure.png?v=2025-12-23T00%3A00%3A00.000Z&title=financial-quiz%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E9%80%A0%E3%81%AE%E6%95%B4%E7%90%86%E8%A8%88%E7%94%BB&author=Kei%20Komatsu&sig=0014ddef5305b1f2",1785654979293]