[{"data":1,"prerenderedAt":986},["ShallowReactive",2],{"content-/financial-data-company-diff-analysis":3,"all-pages-for-dir":963,"related-/financial-data-company-diff-analysis":964,"og-image-/financial-data-company-diff-analysis":985},{"id":4,"title":5,"body":6,"category":948,"concepts":948,"description":949,"extension":950,"meta":951,"navigation":466,"ogImage":948,"path":952,"project_name":948,"published":953,"publishedAt":954,"seo":955,"source":948,"stem":956,"tags":957,"todo":948,"unpublished":953,"updatedAt":961,"__hash__":962},"pages/2025-12/2025-12-19/financial-data-company-diff-analysis.md","財務データ生成スクリプトの企業数差異分析",{"type":7,"value":8,"toc":928},"minimark",[9,12,16,20,23,110,120,123,133,137,141,277,280,285,312,316,336,340,360,364,377,383,386,390,393,396,409,412,420,423,432,435,505,509,512,561,567,575,580,585,589,592,627,631,636,640,648,652,655,675,679,682,685,688,811,814,875,881,884,892,895,924],[10,11,5],"h1",{"id":5},[13,14,15],"h2",{"id":15},"概要",[17,18,19],"p",{},"3つのデータ生成スクリプトで出力される企業数に差異があることが判明した。本ドキュメントでは、差異の原因を分析し対処方法を記載する。",[13,21,22],{"id":22},"現状の企業数",[24,25,26,45],"table",{},[27,28,29],"thead",{},[30,31,32,36,39,42],"tr",{},[33,34,35],"th",{},"スクリプト",[33,37,38],{},"出力ファイル",[33,40,41],{},"サイズ",[33,43,44],{},"企業数",[46,47,48,71,91],"tbody",{},[30,49,50,57,62,65],{},[51,52,53],"td",{},[54,55,56],"code",{},"generate-eac-light-data.mjs",[51,58,59],{},[54,60,61],{},"eac-light-data.ts",[51,63,64],{},"3.09MB",[51,66,67],{},[68,69,70],"strong",{},"154社",[30,72,73,78,83,86],{},[51,74,75],{},[54,76,77],{},"generate-scatter-data.mjs",[51,79,80],{},[54,81,82],{},"scatter-data.ts",[51,84,85],{},"81.1KB",[51,87,88],{},[68,89,90],{},"152社",[30,92,93,98,103,106],{},[51,94,95],{},[54,96,97],{},"generate-financial-data.mjs",[51,99,100],{},[54,101,102],{},"financial-data.ts",[51,104,105],{},"3.32MB",[51,107,108],{},[68,109,90],{},[17,111,112,113,116,117],{},"※ ",[54,114,115],{},"companies","テーブル全体は",[68,118,119],{},"156社",[13,121,122],{"id":122},"データソースの関係",[124,125,130],"pre",{"className":126,"code":128,"language":129},[127],"language-text","companies テーブル (156社)\n    │\n    ├─→ eac_annual テーブル (154社) ─→ eac-light-data.ts\n    │       │\n    │       └─→ + 2026-2029 Estimate条件 (152社) ─→ scatter-data.ts\n    │\n    └─→ v_annual_data ビュー (152社) ─→ financial-data.ts\n","text",[54,131,128],{"__ignoreMap":132},"",[13,134,136],{"id":135},"差異の原因7社","差異の原因（7社）",[138,139,140],"h3",{"id":140},"一覧表",[24,142,143,163],{},[27,144,145],{},[30,146,147,150,154,157,160],{},[33,148,149],{},"企業",[33,151,153],{"align":152},"center","eac-light",[33,155,156],{"align":152},"scatter",[33,158,159],{"align":152},"financial",[33,161,162],{},"欠損理由",[46,164,165,182,199,215,230,245,261],{},[30,166,167,172,175,177,179],{},[51,168,169],{},[68,170,171],{},"BRKSN",[51,173,174],{"align":152},"×",[51,176,174],{"align":152},[51,178,174],{"align":152},[51,180,181],{},"全データ未取得",[30,183,184,189,191,193,196],{},[51,185,186],{},[68,187,188],{},"WOLF",[51,190,174],{"align":152},[51,192,174],{"align":152},[51,194,195],{"align":152},"✓",[51,197,198],{},"EACデータなし",[30,200,201,206,208,210,212],{},[51,202,203],{},[68,204,205],{},"AZN",[51,207,195],{"align":152},[51,209,195],{"align":152},[51,211,174],{"align":152},[51,213,214],{},"財務諸表なし",[30,216,217,222,224,226,228],{},[51,218,219],{},[68,220,221],{},"MPWR",[51,223,195],{"align":152},[51,225,195],{"align":152},[51,227,174],{"align":152},[51,229,214],{},[30,231,232,237,239,241,243],{},[51,233,234],{},[68,235,236],{},"QRVO",[51,238,195],{"align":152},[51,240,195],{"align":152},[51,242,174],{"align":152},[51,244,214],{},[30,246,247,252,254,256,258],{},[51,248,249],{},[68,250,251],{},"HUT",[51,253,195],{"align":152},[51,255,174],{"align":152},[51,257,195],{"align":152},[51,259,260],{},"2026-2029のEPS/PER予測なし",[30,262,263,268,270,272,274],{},[51,264,265],{},[68,266,267],{},"MARA",[51,269,195],{"align":152},[51,271,174],{"align":152},[51,273,195],{"align":152},[51,275,276],{},"2026-2029のEPS/PERが全てnull",[138,278,279],{"id":279},"詳細分析",[281,282,284],"h4",{"id":283},"brksnberkshire-grey","BRKSN（Berkshire Grey）",[286,287,288,294,300,306],"ul",{},[289,290,291,293],"li",{},[54,292,115],{},"テーブルには存在",[289,295,296,299],{},[54,297,298],{},"eac_annual","テーブルにデータなし",[289,301,302,305],{},[54,303,304],{},"v_annual_data","ビューにデータなし",[289,307,308,311],{},[68,309,310],{},"原因",": Koyfinからのデータ取得が未完了",[281,313,315],{"id":314},"wolfwolfspeed","WOLF（Wolfspeed）",[286,317,318,322,326,331],{},[289,319,320,293],{},[54,321,115],{},[289,323,324,299],{},[54,325,298],{},[289,327,328,330],{},[54,329,304],{},"ビューにはデータあり",[289,332,333,335],{},[68,334,310],{},": EACデータのみ未取得",[281,337,339],{"id":338},"azn-mpwr-qrvo","AZN, MPWR, QRVO",[286,341,342,346,351,355],{},[289,343,344,293],{},[54,345,115],{},[289,347,348,350],{},[54,349,298],{},"テーブルにはデータあり",[289,352,353,305],{},[54,354,304],{},[289,356,357,359],{},[68,358,310],{},": 財務諸表データが未取得",[281,361,363],{"id":362},"hut-maraビットコインマイニング企業","HUT, MARA（ビットコインマイニング企業）",[286,365,366,369,372],{},[289,367,368],{},"全テーブルにデータ存在",[289,370,371],{},"ただし2026-2029年のEPS成長率・PERがnullまたは欠損",[289,373,374,376],{},[68,375,310],{},": アナリストによる長期予測が存在しない（ビットコイン関連企業の特性）",[124,378,381],{"className":379,"code":380,"language":129},[127],"MARA 2026 EPS-Adjusted_YoY-%-Chg      → null\nMARA 2026 Price-/-Earnings-(Adjusted) → null\nMARA 2027 EPS-Adjusted_YoY-%-Chg      → null\nMARA 2027 Price-/-Earnings-(Adjusted) → null\nMARA 2028 EPS-Adjusted_YoY-%-Chg      → null\nMARA 2028 Price-/-Earnings-(Adjusted) → null\n",[54,382,380],{"__ignoreMap":132},[13,384,385],{"id":385},"対処方法",[138,387,389],{"id":388},"方法aデータ追加取得推奨","方法A：データ追加取得（推奨）",[17,391,392],{},"Koyfinから不足データを追加取得し、全スクリプトで同一企業を出力できるようにする。",[281,394,395],{"id":395},"優先度高",[397,398,399,404],"ol",{},[289,400,401,403],{},[68,402,339],{},": 財務諸表データを取得",[289,405,406,408],{},[68,407,188],{},": EACデータを取得",[281,410,411],{"id":411},"優先度中",[397,413,415],{"start":414},3,[289,416,417,419],{},[68,418,171],{},": 財務諸表 + EACデータを取得",[281,421,422],{"id":422},"対応不要",[397,424,426],{"start":425},4,[289,427,428,431],{},[68,429,430],{},"HUT, MARA",": ビットコイン関連企業のため長期予測が存在しない可能性が高い。scatter-dataからの除外は仕様として許容。",[281,433,434],{"id":434},"実施手順",[124,436,440],{"className":437,"code":438,"language":439,"meta":132,"style":132},"language-bash shiki shiki-themes vitesse-light vitesse-light","# 1. Koyfinで対象企業のデータをエクスポート\n# 2. SQLiteにインポート\n# 3. スクリプトを再実行\n\ncd apps/web\nnode scripts/generate-eac-light-data.mjs\nnode scripts/generate-scatter-data.mjs\nnode scripts/generate-financial-data.mjs\n","bash",[54,441,442,451,457,462,468,479,489,497],{"__ignoreMap":132},[443,444,447],"span",{"class":445,"line":446},"line",1,[443,448,450],{"class":449},"sxvE3","# 1. Koyfinで対象企業のデータをエクスポート\n",[443,452,454],{"class":445,"line":453},2,[443,455,456],{"class":449},"# 2. SQLiteにインポート\n",[443,458,459],{"class":445,"line":414},[443,460,461],{"class":449},"# 3. スクリプトを再実行\n",[443,463,464],{"class":445,"line":425},[443,465,467],{"emptyLinePlaceholder":466},true,"\n",[443,469,471,475],{"class":445,"line":470},5,[443,472,474],{"class":473},"sz8Xr","cd",[443,476,478],{"class":477},"sdGka"," apps/web\n",[443,480,482,486],{"class":445,"line":481},6,[443,483,485],{"class":484},"senZ8","node",[443,487,488],{"class":477}," scripts/generate-eac-light-data.mjs\n",[443,490,492,494],{"class":445,"line":491},7,[443,493,485],{"class":484},[443,495,496],{"class":477}," scripts/generate-scatter-data.mjs\n",[443,498,500,502],{"class":445,"line":499},8,[443,501,485],{"class":484},[443,503,504],{"class":477}," scripts/generate-financial-data.mjs\n",[138,506,508],{"id":507},"方法b欠損許容現状維持","方法B：欠損許容（現状維持）",[17,510,511],{},"各ページで使用するデータが異なるため、現状のまま欠損を許容する。",[24,513,514,526],{},[27,515,516],{},[30,517,518,521,524],{},[33,519,520],{},"ページ",[33,522,523],{},"使用データ",[33,525,44],{},[46,527,528,539,550],{},[30,529,530,535,537],{},[51,531,532],{},[54,533,534],{},"actual-consensus.vue",[51,536,61],{},[51,538,70],{},[30,540,541,546,548],{},[51,542,543],{},[54,544,545],{},"eps-per-scatter.vue",[51,547,82],{},[51,549,90],{},[30,551,552,557,559],{},[51,553,554],{},[54,555,556],{},"proportional-animation-qqq.vue",[51,558,102],{},[51,560,90],{},[17,562,563,566],{},[68,564,565],{},"メリット",":",[286,568,569,572],{},[289,570,571],{},"追加作業不要",[289,573,574],{},"各ページの目的に合ったデータセットを維持",[17,576,577,566],{},[68,578,579],{},"デメリット",[286,581,582],{},[289,583,584],{},"ページ間で対象企業が異なり、ユーザーが混乱する可能性",[138,586,588],{"id":587},"方法c共通企業のみに統一","方法C：共通企業のみに統一",[17,590,591],{},"3つ全てに存在する企業のみを出力する（最も厳格なアプローチ）。",[124,593,597],{"className":594,"code":595,"language":596,"meta":132,"style":132},"language-javascript shiki shiki-themes vitesse-light vitesse-light","// 各スクリプトで共通フィルタを適用\nconst commonTickers = getCommonTickers() // 約149社\n","javascript",[54,598,599,604],{"__ignoreMap":132},[443,600,601],{"class":445,"line":446},[443,602,603],{"class":449},"// 各スクリプトで共通フィルタを適用\n",[443,605,606,610,614,618,621,624],{"class":445,"line":453},[443,607,609],{"class":608},"stQ0i","const",[443,611,613],{"class":612},"s4oTP"," commonTickers",[443,615,617],{"class":616},"shFtX"," =",[443,619,620],{"class":484}," getCommonTickers",[443,622,623],{"class":616},"()",[443,625,626],{"class":449}," // 約149社\n",[17,628,629,566],{},[68,630,565],{},[286,632,633],{},[289,634,635],{},"全ページで同一企業セットを保証",[17,637,638,566],{},[68,639,579],{},[286,641,642,645],{},[289,643,644],{},"一部ページで本来表示可能な企業が除外される",[289,646,647],{},"スクリプト修正が必要",[13,649,651],{"id":650},"採用方針方法c共通企業のみに統一","採用方針：方法C（共通企業のみに統一）",[138,653,654],{"id":654},"決定理由",[397,656,657,663,669],{},[289,658,659,662],{},[68,660,661],{},"Koyfinの無料利用期間が終了"," - 追加データ取得には再ログインや有料プランが必要",[289,664,665,668],{},[68,666,667],{},"欠損企業は重要度が低い"," - BRKSN、WOLF、AZN、MPWR、QRVOはポートフォリオの主要銘柄ではない",[289,670,671,674],{},[68,672,673],{},"HUT、MARAはビットコイン関連"," - 長期予測が存在しないのは業界特性であり、対応不要",[138,676,678],{"id":677},"対応内容2025-12-20-実施完了","対応内容（2025-12-20 実施完了）",[17,680,681],{},"3つのスクリプトすべてに除外企業リストを追加し、共通企業のみを出力するように修正した。",[281,683,684],{"id":684},"修正内容",[17,686,687],{},"各スクリプトに以下の除外リストを追加:",[124,689,691],{"className":594,"code":690,"language":596,"meta":132,"style":132},"const EXCLUDED_TICKERS = new Set([\n  'BRKSN',  // 全データ未取得\n  'WOLF',   // EACデータなし\n  'AZN',    // 財務諸表なし\n  'MPWR',   // 財務諸表なし\n  'QRVO',   // 財務諸表なし\n  'HUT',    // 2026-2029のEPS/PER予測なし\n  'MARA',   // 2026-2029のEPS/PERが全てnull\n])\n",[54,692,693,711,728,741,754,767,779,792,805],{"__ignoreMap":132},[443,694,695,697,700,702,705,708],{"class":445,"line":446},[443,696,609],{"class":608},[443,698,699],{"class":612}," EXCLUDED_TICKERS",[443,701,617],{"class":616},[443,703,704],{"class":608}," new",[443,706,707],{"class":484}," Set",[443,709,710],{"class":616},"([\n",[443,712,713,717,719,722,725],{"class":445,"line":453},[443,714,716],{"class":715},"sMJiu","  '",[443,718,171],{"class":477},[443,720,721],{"class":715},"'",[443,723,724],{"class":616},",",[443,726,727],{"class":449},"  // 全データ未取得\n",[443,729,730,732,734,736,738],{"class":445,"line":414},[443,731,716],{"class":715},[443,733,188],{"class":477},[443,735,721],{"class":715},[443,737,724],{"class":616},[443,739,740],{"class":449},"   // EACデータなし\n",[443,742,743,745,747,749,751],{"class":445,"line":425},[443,744,716],{"class":715},[443,746,205],{"class":477},[443,748,721],{"class":715},[443,750,724],{"class":616},[443,752,753],{"class":449},"    // 財務諸表なし\n",[443,755,756,758,760,762,764],{"class":445,"line":470},[443,757,716],{"class":715},[443,759,221],{"class":477},[443,761,721],{"class":715},[443,763,724],{"class":616},[443,765,766],{"class":449},"   // 財務諸表なし\n",[443,768,769,771,773,775,777],{"class":445,"line":481},[443,770,716],{"class":715},[443,772,236],{"class":477},[443,774,721],{"class":715},[443,776,724],{"class":616},[443,778,766],{"class":449},[443,780,781,783,785,787,789],{"class":445,"line":491},[443,782,716],{"class":715},[443,784,251],{"class":477},[443,786,721],{"class":715},[443,788,724],{"class":616},[443,790,791],{"class":449},"    // 2026-2029のEPS/PER予測なし\n",[443,793,794,796,798,800,802],{"class":445,"line":499},[443,795,716],{"class":715},[443,797,267],{"class":477},[443,799,721],{"class":715},[443,801,724],{"class":616},[443,803,804],{"class":449},"   // 2026-2029のEPS/PERが全てnull\n",[443,806,808],{"class":445,"line":807},9,[443,809,810],{"class":616},"])\n",[281,812,813],{"id":813},"結果",[24,815,816,830],{},[27,817,818],{},[30,819,820,822,824,827],{},[33,821,520],{},[33,823,523],{},[33,825,826],{},"企業数（変更前）",[33,828,829],{},"企業数（変更後）",[46,831,832,847,861],{},[30,833,834,838,840,842],{},[51,835,836],{},[54,837,534],{},[51,839,61],{},[51,841,70],{},[51,843,844],{},[68,845,846],{},"149社",[30,848,849,853,855,857],{},[51,850,851],{},[54,852,545],{},[51,854,82],{},[51,856,90],{},[51,858,859],{},[68,860,846],{},[30,862,863,867,869,871],{},[51,864,865],{},[54,866,556],{},[51,868,102],{},[51,870,90],{},[51,872,873],{},[68,874,846],{},[17,876,877,880],{},[68,878,879],{},"全ページで同一の149社","を使用するようになり、ページ間での企業セットの不整合が解消された。",[138,882,883],{"id":883},"今後の運用",[286,885,886,889],{},[289,887,888],{},"新規企業追加時は3つのデータソースすべてにデータを取得する",[289,890,891],{},"除外企業リストは各スクリプトで共通化されているため、必要に応じて一括更新が可能",[13,893,894],{"id":894},"関連ファイル",[286,896,897,902,907,912,918],{},[289,898,899],{},[54,900,901],{},"scripts/generate-eac-light-data.mjs",[289,903,904],{},[54,905,906],{},"scripts/generate-scatter-data.mjs",[289,908,909],{},[54,910,911],{},"scripts/generate-financial-data.mjs",[289,913,914,917],{},[54,915,916],{},"data/koyfin.db","（SQLiteデータベース）",[289,919,920,923],{},[54,921,922],{},".claude/rules/data-generation.md","（スクリプト運用ルール）",[925,926,927],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}",{"title":132,"searchDepth":453,"depth":453,"links":929},[930,931,932,933,937,942,947],{"id":15,"depth":453,"text":15},{"id":22,"depth":453,"text":22},{"id":122,"depth":453,"text":122},{"id":135,"depth":453,"text":136,"children":934},[935,936],{"id":140,"depth":414,"text":140},{"id":279,"depth":414,"text":279},{"id":385,"depth":453,"text":385,"children":938},[939,940,941],{"id":388,"depth":414,"text":389},{"id":507,"depth":414,"text":508},{"id":587,"depth":414,"text":588},{"id":650,"depth":453,"text":651,"children":943},[944,945,946],{"id":654,"depth":414,"text":654},{"id":677,"depth":414,"text":678},{"id":883,"depth":414,"text":883},{"id":894,"depth":453,"text":894},null,"3つのデータ生成スクリプト間の企業数差異の原因調査と対処方法","md",{},"/financial-data-company-diff-analysis",false,"2025-12-19T00:00:00.000Z",{"title":5,"description":949},"2025-12/2025-12-19/financial-data-company-diff-analysis",[958,959,960],"data-generation","sqlite","troubleshooting","2025-12-20T00:00:00.000Z","FmaqBBwys4O934fP_ZHrKkrqYpSRptA5xpqufjQPxiM",[],[965,969,973,977,981],{"title":966,"path":967,"publishedAt":968},"Nuxt Content「database is locked」エラーの原因と対処法","/nuxt-content-database-locked-issue","2025-11-19T00:00:00.000Z",{"title":970,"path":971,"publishedAt":972},"dev サーバーを止めずにデプロイできるよう、Nuxt のビルド出力先と Content DB を分けた","/deploy-while-dev-running","2026-07-31T00:00:00.000Z",{"title":974,"path":975,"publishedAt":976},"Nuxt Content の database lock と auto-import 衝突によるビルドエラー - dev起動失敗から measure-deploy で再発するまでの2連続","/nuxt-content-db-lock-and-auto-import-conflict","2026-06-13T00:00:00.000Z",{"title":978,"path":979,"publishedAt":980},"ある国家資格試験の過去問データを Turso DB に丸ごと移して全文検索できるようにした","/exam-past-questions-turso-migration","2026-05-27T00:00:00.000Z",{"title":982,"path":983,"publishedAt":984},"裁断スキャンした参考書をOCRしてTursoに取り込む：WALロックでハングしたスクリプトをHTTP直接接続で救出するまで","/book-ocr-turso-wal-lock-recovery","2026-05-25T00:00:00.000Z","https://log.eurekapu.com/og/blog/financial-data-company-diff-analysis.png?v=2025-12-20T00%3A00%3A00.000Z&title=%E8%B2%A1%E5%8B%99%E3%83%87%E3%83%BC%E3%82%BF%E7%94%9F%E6%88%90%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E4%BC%81%E6%A5%AD%E6%95%B0%E5%B7%AE%E7%95%B0%E5%88%86%E6%9E%90&author=Kei%20Komatsu&sig=31dd75b985b81dc0",1785654962500]