• #beat-monitoring
  • #AVGO
  • #HOOD
  • #TSM
  • #make-diary
  • #workflow
開発beat-monitoring

今日やったこと(要約)

朝、AVGO の Q2 FY26 決算(6/4 AMC)が beat-monitoring の /beat-monitoring/AVGO ページに反映されていないのを画面で見つけた。手で AVGO.json を直す前に、まず /make-diary の中から決算発表があった銘柄を拾って自動でチェーン更新する仕組みに変えた。流れで HOOD と TSM の2銘柄も追加し、最後に「構造転換済み / ビート継続成長期待 / 継続ウォッチ」の3カテゴリを個別ページのヘッダーにバッジ表示した。

1. AVGO Q2 FY26 を手で当ててから自動化に倒した

AVGO の Q2 FY26 は 6/4 引け後の発表。朝開いたページの最新行はまだ Q1 FY26(3/4発表)のままだった。「/check-earnings でコンセンサスは取れているのに、tripleBeat/AVGO.json の四半期行が伸びていない」のがズレ。

最初に /update-ticker-quarter AVGO 相当の手順を Claude Code に踏ませて Q2 FY26 行を入れた。

  • 売上 / EPS / 次Q売上ガイドは x-search で複数投稿(@ESB36121、@DTechtrends ほか)から数値を拾わせた
  • reportClose は Koyfin OHLCV の 2026-06-04 RTH 終値 $418.91
  • nextClose は AH 速報の -13% をいったん暫定値で入れ、tableNotes に「6/5 RTH 終値確定後に更新」を明記
  • highlightQuarter を Q1 FY26 → Q2 FY26 へ切り替え

Q1 で示した「FY27 AI $100B 超」テーゼに対する答え合わせとして Q2 を文脈化する形になった。

AVGO はガイダンス据置で株価が落ちた → 通年ガイダンスのモニタリング欄を追加

「AVGO って通年ガイダンス出してないですよね、今回そこに上方修正がなかったから株価が落ちたんで、年間ガイダンスの修正有無をモニタリングするのは重要」とユーザーから指摘された。実際 Broadcom は総売上・EPS の通年ガイドは出さず、代わりに「AI 半導体の通年見通し(FY26 56B / FY27 100B 超)」を出す方式だった。

Q2 で売られた根本原因は「FY27 AI > $100B が 据え置き だった」こと。これは決算ビートだけ見ていると拾えない。

types.ts に汎用 aiOutlook フィールドを追加し、AVGO の Q1/Q2 に履歴を入れて、ticker ページ末尾に「AI半導体 長期見通しの変化」セクションを新設した。Q2 FY26 の FY27 据え置き はグレーバッジで明示し、上方修正なしを視覚的に拾えるようにした。

/update-ticker-quarter のコマンド md にも「aiOutlook の集め方」を追記して、次回からこの観点が抜けないようにした。

2. /make-diary 一発で他銘柄も自動更新される形に

ユーザーから「マイクロンの決算が6月末。/make-diary を1回叩けば MU も自動で同じように修正される状態にしてほしい」と指示が出た。

.claude/commands/make-diary.md の Step 11 と Step 12 の間に Step 11.5「beat-monitoring の自動チェーン更新」 を挿入した。中身はざっくり以下。

1. /check-earnings の Step 1(SEC EDGAR 8-K Item 2.02)でヒットした銘柄
   + Step 2 で |Avg Δ%| > 5% の銘柄
   + /earnings-beat-scan で記事化した銘柄
   を和集合で候補化
2. apps/web/app/data/tripleBeat/<T>.json 登録済みフィルタを通す
3. 該当銘柄ごとに .claude/commands/update-ticker-quarter.md の
   Step 1〜5 をインライン実行(B案)
4. AMC 発表で翌日 RTH 終値が未確定なら暫定値で入れ、tableNotes に
   「翌日終値確定後に更新」を明記。翌朝の /make-diary で grep して再上書き

スラッシュコマンドを /make-diary 内から機械的にループ呼びするのは難しいので、B 案(コマンド md をその場で読んで実行)に倒した。並列化は将来の Dynamic Workflow 化で検討する(x-search のクオータ消費と tool-call-malformed 予防のため、今は直列)。

設計メモは memo/2026-06-05/beat-monitoring-auto-update-plan.md に残した。

3. HOOD(Robinhood)追加 — リサーチした結果 tier を変えた

/add-ticker HOOD で追加に入った。最初は「ビート継続・成長期待」で雛形を切ったが、サブエージェント3本を直近6四半期に並列で派遣してリサーチさせたら、

Qrev beateps beat
Q4 2025missbeat
Q1 2026missmiss

直近2四半期で売上ミス、Q1 2026 は EPS もミスで株価も大幅反落、というデータが返ってきた。tier を「継続ウォッチ」に再判定。tickerMeta.ts の登録位置も差し替えた。

HOOD は次Q ガイダンスを出していないため、guidance は全四半期 null。tableNotes で明示。

Koyfin 接続 → KID 取得(eq-74v2z9) → Turso 取り込み → valuation.ts 再生成までで、HOOD カードの上段(price=88.33 / NTM EPS=2.30 / NTM PE=38.4x)が埋まった。

継続ウォッチ tier の個別ページは current price を非表示にする仕様(INTC でも同じ)。HOOD は仕様通り。

4. TSM(台湾セミコンダクター)追加 — NVDA 起点に揃えて 12Q に拡張

/add-ticker TSM で「ビート継続・成長期待」「直近8Q」で始めた。途中で「NVIDIA の AI 構造転換始点(2023/5/24 Q1 FY24 発表)と起点を揃えたい」と指示が入り、Q2 FY23(2023/7/20 発表)から 12四半期に拡張した。

セクターは TSM が純粋ファウンドリのため新規「半導体(ファウンドリ)」を追加した(既存「半導体(CPU/ファウンドリ)」は INTC 専用にする整理)。

Koyfin の ADR 比率補正

Koyfin 経由で NTM PE を Turso に取り込んだら 133.92x という異常値が出た。TSM ADR の妥当値は ~28x。Koyfin が普通株ベース USD(1 ADR = 5 普通株)でデータを返していたのが原因。

generate-beat-valuation.mjsADR 比率補正(TSM 1ADR=5普通株)を追加した。将来 ADR 銘柄が増えてもこの1箇所で対応できる形にしてある。補正後は price=444.92 / NTM EPS=16.61 / NTM PE=26.8x で妥当値に落ちた。

ガイドビート率を X-search で12Q分埋めた

「ビート率とかも知りたいんで、ちゃんと全部調べてください。X サーチして」と指示。

x-search スキルを Python スクリプトで4本並列起動し、各四半期の「当時の次Q売上ガイドコンセンサス(中央値)」を取りに行かせた。12Q 全てに guidance ビート率が入った。Q2 FY23(-3.3%)が唯一のミスで、AI 立ち上がり前の弱気ガイドだった、という構図が出てきた。

subtitle のハードコード「直近8四半期」

ticker ページのテンプレに subtitle が 直近8四半期 で hardcoded で残っており、TSM だけ 12四半期にしたら subtitle が嘘になった。データ長から動的に計算するようにして、MU=5Q、TSM=12Q、NVDA=12Q が全部正しく出るようにした。

5. 3カテゴリのタグを個別ページに可視化した

ユーザーから「MU は構造転換済みカテゴリに入っているが、ページに行っても今どのカテゴリに属しているのかわからない。3つ(構造転換済み / ビート継続成長期待 / 継続ウォッチ)を全部出して、現在属しているものだけハイライトしてほしい」と指示が出た。

[ticker].vue のヘッダーの h1 と subtitle の間に .tier-badges を追加。

  • 3つの tier を常に表示
  • 非アクティブはグレー文字、アクティブはブランド色 #ed1e79(マゼンタ)で白文字ハイライト
  • データソースは TICKER_METAtier を見て判定

最初 class="active tier-badge" の class 順序問題で grep が引っ掛からず、active が付いていないと誤判定しかけた。{{ currentTier }} を template に直書きしてデバッグ。CSS の .tier-badge.active は class 順序に依存しないので、実装は意図通り動いていた、というオチ。

MU(構造転換済み)と TSM(ビート継続・成長期待)の両ページで、属するカテゴリだけマゼンタにハイライトされる挙動を確認。

このバッジを出した意図

ticker 単体を見ていると「この銘柄が beat-monitoring の中でどういう位置づけなのか」が消える。3カテゴリは銘柄選定の前提(構造転換済み=構造転換が確認できた銘柄/ビート継続・成長期待=期待先行で売上ガイド上方修正を追う/継続ウォッチ=再加速の入口を待つ)なので、ticker ページに常設すると、毎朝の dev 確認や記事作成のときに迷子にならない。

学びメモ

  • 「ガイダンス据置」もモニタリング対象: AVGO Q2 FY26 で FY27 AI > $100B が据え置きになっただけで株価が落ちた。決算ビートだけ見ていると拾えないので、aiOutlooktypes.ts に足して通年ガイドの履歴を JSON に残す形にした。次回 Q3 FY26 で +α が出れば変化が即見える
  • ADR 銘柄は補正を1箇所に集約: TSM で NTM PER が 133x と表示されたとき、データ取り込み層で補正するか表示層で補正するかで迷ったが、generate-beat-valuation.mjs に集約した。次に ADR 銘柄を増やすときに同じ罠を踏まない
  • 直近Q数を hardcode しない: subtitle が「直近8四半期」で固定されていたせいで、TSM だけ 12Q にした瞬間に嘘表示になった。データ長から動的に計算する形に倒した
  • 継続ウォッチ tier の意思を見える化: HOOD はリサーチ結果が「直近2Q売上ミス、EPS もミス」だったので、初期判定の「ビート継続・成長期待」を「継続ウォッチ」に下げた。サブエージェントに過去 6Q を並列リサーチさせる手順を /add-ticker に組み込んでいたのが効いた

明日以降やること

  • turso-replicas/scripts/check_earnings.py--tickers デフォルトを MU,NVDA,SNDK から tickers.koyfin_kid 登録済み全銘柄に変える(Step 11.5 の SEC EDGAR フックを全銘柄に効かせる前提)
  • 翌日 RTH 終値で nextClose / changePct を上書きする --refresh-stock フラグを /update-ticker-quarter に追加
  • 1〜2 週間運用して誤検知・抜けを観察してから C 案(Dynamic Workflows での並列銘柄処理)への移行を検討
  • MU FY26 Q3 発表(6月末予定)で /make-diary 一発の自動反映を実地検証する