開発financial-dataアクティブ

朝の出発点: 「予想ビート率を継続ウォッチしたい」

朝、コーヒーを淹れながら Koyfin の Earnings History を眺めていて、ふと手が止まった。NVDA、TSM、MU の Whisper Beat と次四半期ガイダンスを毎四半期手で追うのが、もう4回目になっていた。同じ作業を年4回 × 主要10銘柄でやり続けるなら、仕様を起こしてアプリにしたほうが早い。Claude Code に「アナリスト予想ビート率ウォッチャーの設計セッションを頼む」と一行投げて、memo/2026-05-18/earnings-beat-watcher-spec.md を作らせた。

v0.1: 「ガイダンスは v2 でいい」と書いた直後に撤回した

最初の叩き台ではガイダンスを Out of Scope に置いていた。決算 Beat の数字だけ追えば十分だろうと思っていた。

書き終えた直後、自分でブツブツ言いながら読み返して気付いた。「Beat だがガイダンス Cut」は罠で、株価が一番動くのはむしろガイダンスのほうだ。Beat-and-Raise と Beat-and-Cut を分けない仕様には価値がない。すぐに v0.2 で In Scope に引き上げ、Tier 3 強シグナルの判定条件に「明示ガイダンスあり」を入れた。最初の30分で出した結論を、次の30分で全部書き直すことになった。

v0.2: Koyfin にガイダンスが入っていると思い込んでいた

「ガイダンスデータをどこから取るか」を整理する段になって、自分の手元にある Koyfin を真っ先に書いた。Earnings History にガイダンス欄が見えた気がしていた。

念のため Koyfin のヘルプを開いて Earnings History の説明を読んだ。1行目に「本機能は企業ガイダンスを含みません」と明記されていた。手が止まった。Koyfin で見ていた「Guidance っぽい列」は、コンセンサスの推移グラフだった。仕様書に書きかけていた「Koyfin Guidance を一次データに」の行を全部消した。

ここで初めて、ガイダンスは「企業ごとにフォーマットがバラバラ」「出さない企業も多い」「専用フィードは法人契約のみ」という難物だと腹落ちした。個人で扱うなら、SEC EDGAR の 8-K Exhibit 99.1 を取ってきて LLM で構造化抽出するしかない、と仕様書に書いた。

Earnings Whispers と fiscal.ai を実画面で確認させた

机上の調査だけで仕様を固めると、また Koyfin のような誤認を埋め込む。Claude Code に agent-browser で Earnings Whispers の NVDA ページを開かせ、実画面で「コンセンサスは出ているがガイダンスは無い」ことを確認させた。最初、Cookie 同意のオーバーレイで本文が読めず、Claude Code が「Accept Cookies ボタンをクリックしてから DOM を取得します」と返してきた。Whisper Number はあるが、Outlook 由来の構造化ガイダンスは載っていない。これも仕様書に追記した。

次に fiscal.ai の NVDA Estimates ページを Chrome DevTools MCP で開かせた。タブを順番にクリックさせて、Estimates / Surprises / Revisions のどれにも「Guidance」専用ビューが無いことを確認した。AI Summary には部分的にガイダンス文言が混ざるが、構造化フィードではない。

実画面を確認させると、「公式ページの説明文を信じすぎるとハマる」を一段乗り越えられる。Koyfin の件で痛い目に遭った直後だったので、二度同じ穴に落ちたくなかった。

v0.3: Codex に「個人向けでガイダンスを構造化で取れるサービスはあるか」と詰めさせた

ここまで来て、v0.2 の仕様書に「個人向けの構造化ガイダンスフィードは事実上存在しない、自作の LLM 抽出が本線」と書いていた。これも怪しい。1〜2年で景色が変わるはずの領域で、業界構造の常識を当てにすると遅れる。

Codex CLI(GPT-5.5)に「Benzinga 以外で、個人契約可能なガイダンス構造化データのサービスを全部リストアップしろ」と投げた。返ってきたリストで、自分の知らない名前が並んだ:

  • Massive 経由 Benzinga Corporate Guidance が個人向け $99/月で出ていた
  • MetricDuck という SEC 8-K を AI で抽出する個人向けサービスが Free / 15 / 29 / $79 で稼働していた
  • Trefis の「Recent Forward Guidance BETA」、CapyFin の REST API、Fintool の Earnings Summary など、ここ1〜2年で立ち上がったサービスが複数

v0.2 で書いた「個人向けは無い」は間違いだったので、v0.3 で全面改訂した。仕様書の 2.4 節を新設して、構造化ガイダンスを取れる個人向けサービスを一覧化し、Benzinga $99 を本命候補に据え直した。

Codex に詰めさせる効用はここで効いた。自分が「無いはず」と決めつけていた領域に、Codex は淡々と最新の SaaS リストを返してくる。前言を撤回するコストは仕様書を1セクション書き直すだけなので、間違ったまま走り続けるよりはるかに安い。

v0.4: 「毎年使うのに月額課金は積み上がる」で自作に振った

Benzinga $99/月を本命に据えた直後、机の上でブツブツ呟きながら考えた。これは四半期ごとに発生する継続業務だ。サブスクは雪だるま式に積み上がる。

仕様書の余白に手で月額を書き出した:

Benzinga      $99
FMP           $69
Whispers      $49
fiscal.ai     $29
Koyfin        $39
合計          $285/月 = 5年で $17,100 ≒ 250万円

決算ウォッチャー1つで250万円は払いたくない。Claude Code もあるし、Codex CLI もある。8-K Exhibit 99.1 を LLM で構造化抽出するパイプラインなら、実装1〜2日で組める。自作なら開発時間は一度きり、運用コストは API 利用料のみ。

v0.4 で Build vs Buy の最終判断を仕様書の冒頭に固定した。Benzinga と MetricDuck は本線から外して、§2.4 にフォールバック候補として残すだけにした。M1 マイルストーンで「NVDA / AMD / MU / TSM の過去4四半期分を Claude で抽出して、IR 公表値と手動照合して 95% 精度を測る」を入れた。ここで精度が出れば自作で確定、出なかった項目だけ既製サービスで補完する。

v0.5: Codex SDK + ChatGPT サブスクで「もう払っているサブスクの中で完結する」

v0.4 を書き終えた時点で、実行基盤は「Anthropic API を従量で叩く」想定だった。月 20〜50 と書いた。

ここで、同じ日に別途作っていた codex-sdk-app-server-notes.md を Claude Code に読ませた。Codex SDK は Codex CLI のプログラム制御ラッパーで、内部で codex を子プロセス起動して JSONL でやり取りする。重要なのは、ChatGPT サブスクのログイン済みセッションを SDK 経由で再利用できる点。OPENAI_API_KEY を環境変数に置かなくても、CLI のログインだけで動く。

つまり、自分は ChatGPT Plus を既に契約している。その月額の中で Codex CLI を回せば、決算ウォッチャーの追加コストは実質ゼロになる。API 従量課金が積み上がらない。

v0.5 で実行基盤を Codex SDK + ChatGPT サブスクに確定した。月額試算を書き直した:

項目コスト
ChatGPT Plus / Pro(既契約)サブスク固定費
Codex SDK / CLI無料
SEC EDGAR無料
FMP(無料枠 or $19)0〜19
追加コスト0〜19/月

「もう既に払っているサブスクの中で完結する」のが本当の勝ち筋だった。5年で 93〜100% コスト削減になる。

運用形態: SaaS 化しない、ローカルから始めて mini PC に移す

最後に運用形態を決めた。Codex SDK の主戦場は「ローカル / 社内 runner / CI / 個人用自動化」で、信頼済み環境を前提に設計されている。決算ウォッチャー(自分一人が cron で回す)の用途に完全一致する。

不特定多数に向けた SaaS にはしない。サーバ上に認証情報と shell 権限を持つエージェントを公開で置くのは危険だし、用途として不要だ。全部ローカルで始めて、回り始めたら自宅の mini PC か Linux 機に移す。Cloudflare Tunnel で自分専用に閉じる。これが個人エージェントの現実解。

新リポジトリに切り出して、新セッションで即続きから始められる状態にした

仕様書を v0.5 まで固めたら、mdx-playground/memo/ の中に置いておくとプロジェクトが混ざる。新リポジトリ C:\Users\numbe\Git_repo\nvidia-guidance-watcher\ を切って、CLAUDE.md と handoff.md と計画書を配置した。次に cd nvidia-guidance-watcher && claude で立ち上げた瞬間に、Claude Code が文脈を全部引き継いで M1 の PoC から作業に入れる状態。

一日の振り返り: 仕様策定は「前言撤回の連鎖」だった

v0.1 から v0.5 までを並べると、全部前のバージョンの前提を訂正している:

  • v0.1: ガイダンスは Out of Scope → v0.2 で In Scope に格上げ
  • v0.2: Koyfin にガイダンスがある → ヘルプで訂正、削除
  • v0.2: 個人向け構造化フィードは無い → v0.3 で Codex が複数発見、改訂
  • v0.3: Benzinga $99 を本命 → v0.4 で「毎年使うのに月額は積み上がる」で自作へ振る
  • v0.4: Anthropic API を従量 → v0.5 で Codex SDK + ChatGPT サブスクに変更

各バージョンの所要時間は30分〜1時間。前言を撤回するコストは仕様書を一節書き直すだけなので、間違ったまま走り続けるより圧倒的に安い。Claude Code に書かせて、Codex に詰めさせて、agent-browser に実画面を確認させる。三者を回しながら、自分の判断は「視点を選ぶ」だけに集中できた。

明日からは nvidia-guidance-watcher リポジトリで M1 PoC に入る。NVDA / AMD / MU / TSM の過去4四半期分の 8-K を Claude で抽出して、IR 公表値と手動照合する。95% 出れば自作確定。