[{"data":1,"prerenderedAt":540},["ShallowReactive",2],{"content-/beat-monitoring-ticker-expansion":3,"all-pages-for-dir":538,"og-image-/beat-monitoring-ticker-expansion":539},{"id":4,"title":5,"body":6,"category":520,"description":521,"extension":522,"meta":523,"navigation":490,"ogImage":524,"path":525,"project_name":526,"published":527,"publishedAt":528,"seo":529,"stem":530,"tags":531,"todo":524,"unpublished":527,"updatedAt":524,"__hash__":537},"pages/2026-05/2026-05-29/beat-monitoring-ticker-expansion.md","決算ビートモニタリングを13→20銘柄へ拡張し、3区分の親子構造へ作り替えた",{"type":7,"value":8,"toc":506},"minimark",[9,13,17,22,38,42,58,61,82,85,89,92,95,115,118,132,149,152,159,177,180,183,186,193,337,351,354,367,370,375,395,399,425,429,451,454,476,479,502],[10,11,5],"h1",{"id":12},"決算ビートモニタリングを1320銘柄へ拡張し3区分の親子構造へ作り替えた",[14,15,16],"p",{},"朝に画面を開いたら、モニタリング中の銘柄が13個並んでいた。半導体とソフトウェアが入り混じったカードの列を見て、「これはもう銘柄を足すだけじゃ追いつかない、棚の組み方ごと変えるタイミングだ」と判断した。一日かけて20銘柄まで広げ、見出しの軸を「セクター」から「モニタリング区分」へ丸ごとひっくり返した。",[18,19,21],"h2",{"id":20},"やったこと全体像","やったこと（全体像）",[23,24,25,29,32,35],"ul",{},[26,27,28],"li",{},"銘柄を 13 → 20 へ拡張した",[26,30,31],{},"DELL を8四半期分（Q2 FY25〜Q1 FY27）新規作成し、ServiceNow(NOW) と SNDK / INTC / STX / WDC / AMD を追加した",[26,33,34],{},"表示構造を「セクター大見出し」から「区分（tier）大見出し＋セクターはカード内タグ」へ逆転させた",[26,36,37],{},"途中で DELL がインデックスから消える事故、新規5銘柄が dev で 404 になる事象を踏んだ",[18,39,41],{"id":40},"dell-を8四半期分まるごと組む","DELL を8四半期分まるごと組む",[14,43,44,45,52,53,57],{},"きっかけは Q1 FY27 の決算で、売上 ",[46,47,51],"code",{"className":48},[49,50],"language-math","math-inline","43.8B（+88%）・非GAAP EPS ","4.86（+64%ビート）・通年ガイドを ",[46,54,56],{"className":55},[49,50],"140B→","167B へ上方修正という桁違いの数字を見たことだった。これは継続観察に入れるべきだと決めて、過去8四半期（Q2 FY25〜Q1 FY27）を一気に組ませた。",[14,59,60],{},"このページに銘柄を足す作業は、毎回この3点セットで決まっている。",[62,63,64,70,76],"ol",{},[26,65,66,69],{},[46,67,68],{},"app/data/tripleBeat/{TICKER}.json"," を新規作成（四半期データ本体）",[26,71,72,75],{},[46,73,74],{},"tickerMeta.ts"," にエントリ登録（区分・セクター・概算時価総額）",[26,77,78,81],{},[46,79,80],{},"summaries.ts"," を再生成（インデックス用のサマリ）",[14,83,84],{},"数値は SEC の 8-K 一次情報を中心に裏取りさせた。Q1 FY27 だけは「翌日終値」がまだ確定していなかった。朝の時点で米国は 5/28 の時間外取引中で、5/29 通常取引の終値が存在しない。いったん時間外値 $439.67（+38.7%、5/28 19:46 EDT時点）を暫定値として入れ、注記に「暫定」と書き残しておいた。",[18,86,88],{"id":87},"_5社は5つのリサーチエージェントを並列で走らせた","5社は5つのリサーチエージェントを並列で走らせた",[14,90,91],{},"SNDK / INTC / STX / WDC / AMD の5社は互いに独立している。「サンディスクは構造転換済みだと思うが、他はそこまでガイダンスが良かったか確認できていない」という疑問もあったので、確認も兼ねて5つのリサーチエージェントを並列起動し、各社の決算履歴を分担して調べさせた。",[14,93,94],{},"精度が命なので、指示には2つの縛りを入れた。",[23,96,97,105],{},[26,98,99,100,104],{},"各数値に",[101,102,103],"strong",{},"ソースを付ける","こと",[26,106,107,108,114],{},"見つからない値は",[101,109,110,111],{},"推測せず ",[46,112,113],{},"n/a"," にすること",[14,116,117],{},"返ってきた結論はこうだった。",[23,119,120,126],{},[26,121,122,125],{},[101,123,124],{},"SNDK / STX / WDC"," → ガイダンスが実際に大幅ビート&レイズ。構造転換は数字で裏付けが取れた",[26,127,128,131],{},[101,129,130],{},"INTC"," → 株価は2026 YTDで大きく伸びているが、ガイダンスのビートは直近1回のみ。期待先行と判断し「継続ウォッチ」へ",[14,133,134,135,139,140,148],{},"後日、SNDK のアナリスト予想が単一ソース依存で怪しい箇所が見つかり、x-search で複数ソースから取り直した。Q1 FY26 の EPS 予想だけが既存データ ",[46,136,138],{"className":137},[49,50],"0.58（MarketBeat）に対しX投稿群が予想 ","0.88 を示唆し、2倍近く乖離していた。複数の高品質ソース（FactSet 明示）で決着させ、",[101,141,142,143,147],{},"旧データ ",[46,144,146],{"className":145},[49,50],"0.58 は誤りで ","0.88 が正しい","と確定して直した。「1ソースだけで数字を置くと事故る」を地で踏んだ。",[18,150,151],{"id":151},"株式分割への対応",[14,153,154,155,158],{},"ServiceNow(NOW) は2025年12月に5対1の株式分割を実施している。EPS も株価も、分割前の四半期は実値÷5 にして",[101,156,157],{},"全期間を分割調整後ベースに統一","した。ここは新しく作った仕組みではなく、先に NVDA で10対1分割を入れたときの前例にそのまま揃えた。",[23,160,161,171],{},[26,162,163,166,167,170],{},[46,164,165],{},"epsLabel"," / ",[46,168,169],{},"stockLabel"," に「分割調整後」を明記する",[26,172,173,176],{},[46,174,175],{},"tableNotes"," に分割の事実と「率（ビート率・YoY・騰落率）は分割の影響を受けない」を注記する",[14,178,179],{},"前例があると、こういう例外処理を毎回ゼロから悩まずに済む。",[18,181,182],{"id":182},"表示構造の親子逆転リファクタ",[14,184,185],{},"これが今日の本丸だった。これまでは「セクター」が大見出しで、その下に銘柄カードが並んでいた。半導体だけで GPU・光通信・メモリ・CPU と分かれていて、見出しがどんどん細かくなる。一方で本当に見たいのは「この銘柄は構造転換まで行ったのか、まだビート継続の途中なのか、それとも様子見か」という温度感だった。",[14,187,188,189,192],{},"そこでデータモデルに区分（",[46,190,191],{},"tier","）を足し、見出しの軸を入れ替えた。",[194,195,200],"pre",{"className":196,"code":197,"language":198,"meta":199,"style":199},"language-ts shiki shiki-themes vitesse-light vitesse-light","export const TIER_LIST = [\n  { name: '構造転換済み', note: 'AIインフラの本命' },\n  { name: 'ビート継続・成長期待', note: '' },\n  { name: '継続ウォッチ', note: 'ビート鈍化・様子見' },\n] as const\n","ts","",[46,201,202,226,267,294,325],{"__ignoreMap":199},[203,204,207,211,215,219,223],"span",{"class":205,"line":206},"line",1,[203,208,210],{"class":209},"sHkkW","export",[203,212,214],{"class":213},"stQ0i"," const ",[203,216,218],{"class":217},"s4oTP","TIER_LIST",[203,220,222],{"class":221},"shFtX"," =",[203,224,225],{"class":221}," [\n",[203,227,229,232,236,239,243,247,249,252,255,257,259,262,264],{"class":205,"line":228},2,[203,230,231],{"class":221},"  { ",[203,233,235],{"class":234},"sz8Xr","name",[203,237,238],{"class":221},": ",[203,240,242],{"class":241},"sMJiu","'",[203,244,246],{"class":245},"sdGka","構造転換済み",[203,248,242],{"class":241},[203,250,251],{"class":221},", ",[203,253,254],{"class":234},"note",[203,256,238],{"class":221},[203,258,242],{"class":241},[203,260,261],{"class":245},"AIインフラの本命",[203,263,242],{"class":241},[203,265,266],{"class":221}," },\n",[203,268,270,272,274,276,278,281,283,285,287,289,292],{"class":205,"line":269},3,[203,271,231],{"class":221},[203,273,235],{"class":234},[203,275,238],{"class":221},[203,277,242],{"class":241},[203,279,280],{"class":245},"ビート継続・成長期待",[203,282,242],{"class":241},[203,284,251],{"class":221},[203,286,254],{"class":234},[203,288,238],{"class":221},[203,290,291],{"class":241},"''",[203,293,266],{"class":221},[203,295,297,299,301,303,305,308,310,312,314,316,318,321,323],{"class":205,"line":296},4,[203,298,231],{"class":221},[203,300,235],{"class":234},[203,302,238],{"class":221},[203,304,242],{"class":241},[203,306,307],{"class":245},"継続ウォッチ",[203,309,242],{"class":241},[203,311,251],{"class":221},[203,313,254],{"class":234},[203,315,238],{"class":221},[203,317,242],{"class":241},[203,319,320],{"class":245},"ビート鈍化・様子見",[203,322,242],{"class":241},[203,324,266],{"class":221},[203,326,328,331,334],{"class":205,"line":327},5,[203,329,330],{"class":221},"]",[203,332,333],{"class":209}," as",[203,335,336],{"class":213}," const\n",[14,338,339,342,343,346,347,350],{},[46,340,341],{},"index.vue"," 側は「区分でグルーピングし、各区分の中はセクター順 → 時価総額降順で並べる」computed に書き換えた。セクターは大見出しから降格させ、各カードの中のタグ（バッジ）として残した。CSS も ",[46,344,345],{},".sector-*"," を ",[46,348,349],{},".tier-*"," へ書き換えた。同じセクターのカードが隣り合うように2段階ソートにしてあるので、降格してもセクターのまとまりは視覚的に保てている。",[14,352,353],{},"最終的な区分はこうなった。",[23,355,356,362],{},[26,357,358,361],{},[101,359,360],{},"構造転換済み（9）",": NVDA / AMD / MU / ALAB / CRDO / SNDK / STX / WDC / DELL",[26,363,364,366],{},[101,365,307],{},": INTC / 4062 / SMCI / APP / NOW ほか",[18,368,369],{"id":369},"踏んだ事故と切り分け",[371,372,374],"h3",{"id":373},"dell-がインデックスから消えた","DELL がインデックスから消えた",[14,376,377,379,380,382,383,386,387,390,391,394],{},[46,378,191],{}," を導入して ",[46,381,74],{}," を再構成した際、",[101,384,385],{},"DELL のエントリが丸ごと消えていた","。インデックスは ",[46,388,389],{},"TICKER_META"," を回して銘柄を並べる作りなので、メタに無い銘柄は黙って表示されなくなる。「Dell 入れたはずなのに出ない」と気づいて grep したら ",[46,392,393],{},"tickerMeta"," に DELL が引っかからず、再構成のときに落ちたのが原因だと特定できた。構造転換済み区分へ再追加して復活させた。リストを手で組み直すと、こういう取りこぼしが起きる。",[371,396,398],{"id":397},"amd-だけ-eps-ガイダンスが-null","AMD だけ EPS ガイダンスが null",[14,400,401,402,405,406,409,410,413,414,416,417,420,421,424],{},"AMD は会社が次Q EPS ガイドを出さない方針で、",[46,403,404],{},"guidance.eps"," が ",[46,407,408],{},"null"," という既存銘柄に無いパターンだった。テーブルのコンポーネントを確認すると、",[46,411,412],{},"hasEpsGuidance"," が四半期の ",[46,415,404],{}," を見て false になり、「次Q EPSガイダンスを公表していない」という注記行に切り替わる作りになっていた。実際に AMD ページを開いて、その注記行が出ていることを目で確認した。",[46,418,419],{},"consensus: \"n/a\""," や ",[46,422,423],{},"beatPct: null"," も optional chaining で安全に描画されていた。",[371,426,428],{"id":427},"新規5銘柄が-dev-で-404","新規5銘柄が dev で 404",[14,430,431,432,439,440,443,444,447,448,450],{},"JSON は正しくパースされ配置も合っているのに、新規5銘柄のページだけ 404 を返した。既存銘柄は 200 で、ファイル内容も検証済み。ここで「データの問題ではない」と切り分けられた。原因は ",[101,433,434,435,438],{},"dev サーバーの Vite が ",[46,436,437],{},"import.meta.glob"," を再スキャンしていなかった","こと。",[46,441,442],{},"loader.ts"," は ",[46,445,446],{},"import.meta.glob('./*.json')"," で銘柄を自動 discovery するが、ファイルを足しても glob のキャッシュが更新されず、新規分が見えていなかった。",[46,449,442],{}," に HMR トリガーを与えて glob を再評価させたら、5銘柄すべて 200 になった。",[18,452,453],{"id":453},"学び",[23,455,456,459,462,468],{},[26,457,458],{},"銘柄が増えてカードが横に伸びてきたら、見出しの軸そのものを疑う。今回は「セクター → 区分」へ逆転させたら、見たい温度感が一目で分かるようになった",[26,460,461],{},"リストを手で組み直すリファクタは、既存エントリが黙って消える。DELL 消失は grep で一発だったが、表示が消えるだけでエラーは出ないので気づきにくい",[26,463,464,465,467],{},"データが正しいのにページが 404 のときは、まず「ビルドツールが新ファイルを認識しているか」を疑う。",[46,466,437],{}," は黙ってキャッシュを返す",[26,469,470,471,475],{},"数値は1ソースで置かない。SNDK の ",[46,472,474],{"className":473},[49,50],"0.58 → ","0.88 は、複数ソースで突き合わせなければ間違ったまま公開していた",[18,477,478],{"id":478},"明日以降やること",[23,480,483,493],{"className":481},[482],"contains-task-list",[26,484,487,492],{"className":485},[486],"task-list-item",[488,489],"input",{"disabled":490,"type":491},true,"checkbox"," DELL Q1 FY27 の翌日終値を、5/29 の通常取引終値が確定したら暫定値から差し替える",[26,494,496,498,499,501],{"className":495},[486],[488,497],{"disabled":490,"type":491}," ",[46,500,437],{}," の再スキャン対応を、新銘柄追加のたびに HMR で踏まないか手順として残すか検討する",[503,504,505],"style",{},"html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}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 .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}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);}",{"title":199,"searchDepth":228,"depth":228,"links":507},[508,509,510,511,512,513,518,519],{"id":20,"depth":228,"text":21},{"id":40,"depth":228,"text":41},{"id":87,"depth":228,"text":88},{"id":151,"depth":228,"text":151},{"id":182,"depth":228,"text":182},{"id":369,"depth":228,"text":369,"children":514},[515,516,517],{"id":373,"depth":269,"text":374},{"id":397,"depth":269,"text":398},{"id":427,"depth":269,"text":428},{"id":453,"depth":228,"text":453},{"id":478,"depth":228,"text":478},"dev","ビートモニタリングのページに7銘柄を足して20まで広げ、表示を『セクター大見出し』から『モニタリング区分（tier）大見出し＋セクターはカードのタグ』へ逆転させた一日。DELL消失バグや新規銘柄404の原因切り分けまで記録する。","md",{},null,"/beat-monitoring-ticker-expansion","mdx-playground",false,"2026-05-29T00:00:00.000Z",{"title":5,"description":521},"2026-05/2026-05-29/beat-monitoring-ticker-expansion",[532,533,534,535,536],"決算ビート","ビートモニタリング","リファクタリング","Vite","サブエージェント","NzKxZXMDGG_nOltB0SwwZmJ5XwUFbiksstC_x7vpGFk",[],"https://log.eurekapu.com/og/blog/beat-monitoring-ticker-expansion.png?v=2026-05-29T00%3A00%3A00.000Z&title=%E6%B1%BA%E7%AE%97%E3%83%93%E3%83%BC%E3%83%88%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%9213%E2%86%9220%E9%8A%98%E6%9F%84%E3%81%B8%E6%8B%A1%E5%BC%B5%E3%81%97%E3%80%813%E5%8C%BA%E5%88%86%E3%81%AE%E8%A6%AA%E5%AD%90%E6%A7%8B%E9%80%A0%E3%81%B8%E4%BD%9C%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%9F&author=Kei%20Komatsu&sig=e9346ae841468566",1782528844406]