[{"data":1,"prerenderedAt":353},["ShallowReactive",2],{"content-/earnings-beat-watcher-spec":3,"all-pages-for-dir":351,"og-image-/earnings-beat-watcher-spec":352},{"id":4,"title":5,"body":6,"category":330,"description":331,"extension":332,"meta":333,"navigation":334,"ogImage":335,"path":336,"project_name":337,"published":338,"publishedAt":339,"seo":340,"stem":341,"tags":342,"todo":349,"unpublished":338,"updatedAt":335,"__hash__":350},"pages/2026-05/2026-05-18/earnings-beat-watcher-spec.md","アナリスト予想ビート率ウォッチャーの仕様を v0.5 まで反復、最終的に自作判断に着地した",{"type":7,"value":8,"toc":317},"minimark",[9,14,23,27,30,33,37,40,43,46,50,53,56,59,63,66,69,112,115,118,122,125,128,138,141,144,148,156,175,178,181,251,254,258,261,264,268,283,287,290,307,310],[10,11,13],"h2",{"id":12},"朝の出発点-予想ビート率を継続ウォッチしたい","朝の出発点: 「予想ビート率を継続ウォッチしたい」",[15,16,17,18,22],"p",{},"朝、コーヒーを淹れながら Koyfin の Earnings History を眺めていて、ふと手が止まった。NVDA、TSM、MU の Whisper Beat と次四半期ガイダンスを毎四半期手で追うのが、もう4回目になっていた。同じ作業を年4回 × 主要10銘柄でやり続けるなら、仕様を起こしてアプリにしたほうが早い。Claude Code に「アナリスト予想ビート率ウォッチャーの設計セッションを頼む」と一行投げて、",[19,20,21],"code",{},"memo/2026-05-18/earnings-beat-watcher-spec.md"," を作らせた。",[10,24,26],{"id":25},"v01-ガイダンスは-v2-でいいと書いた直後に撤回した","v0.1: 「ガイダンスは v2 でいい」と書いた直後に撤回した",[15,28,29],{},"最初の叩き台ではガイダンスを Out of Scope に置いていた。決算 Beat の数字だけ追えば十分だろうと思っていた。",[15,31,32],{},"書き終えた直後、自分でブツブツ言いながら読み返して気付いた。「Beat だがガイダンス Cut」は罠で、株価が一番動くのはむしろガイダンスのほうだ。Beat-and-Raise と Beat-and-Cut を分けない仕様には価値がない。すぐに v0.2 で In Scope に引き上げ、Tier 3 強シグナルの判定条件に「明示ガイダンスあり」を入れた。最初の30分で出した結論を、次の30分で全部書き直すことになった。",[10,34,36],{"id":35},"v02-koyfin-にガイダンスが入っていると思い込んでいた","v0.2: Koyfin にガイダンスが入っていると思い込んでいた",[15,38,39],{},"「ガイダンスデータをどこから取るか」を整理する段になって、自分の手元にある Koyfin を真っ先に書いた。Earnings History にガイダンス欄が見えた気がしていた。",[15,41,42],{},"念のため Koyfin のヘルプを開いて Earnings History の説明を読んだ。1行目に「本機能は企業ガイダンスを含みません」と明記されていた。手が止まった。Koyfin で見ていた「Guidance っぽい列」は、コンセンサスの推移グラフだった。仕様書に書きかけていた「Koyfin Guidance を一次データに」の行を全部消した。",[15,44,45],{},"ここで初めて、ガイダンスは「企業ごとにフォーマットがバラバラ」「出さない企業も多い」「専用フィードは法人契約のみ」という難物だと腹落ちした。個人で扱うなら、SEC EDGAR の 8-K Exhibit 99.1 を取ってきて LLM で構造化抽出するしかない、と仕様書に書いた。",[10,47,49],{"id":48},"earnings-whispers-と-fiscalai-を実画面で確認させた","Earnings Whispers と fiscal.ai を実画面で確認させた",[15,51,52],{},"机上の調査だけで仕様を固めると、また Koyfin のような誤認を埋め込む。Claude Code に agent-browser で Earnings Whispers の NVDA ページを開かせ、実画面で「コンセンサスは出ているがガイダンスは無い」ことを確認させた。最初、Cookie 同意のオーバーレイで本文が読めず、Claude Code が「Accept Cookies ボタンをクリックしてから DOM を取得します」と返してきた。Whisper Number はあるが、Outlook 由来の構造化ガイダンスは載っていない。これも仕様書に追記した。",[15,54,55],{},"次に fiscal.ai の NVDA Estimates ページを Chrome DevTools MCP で開かせた。タブを順番にクリックさせて、Estimates / Surprises / Revisions のどれにも「Guidance」専用ビューが無いことを確認した。AI Summary には部分的にガイダンス文言が混ざるが、構造化フィードではない。",[15,57,58],{},"実画面を確認させると、「公式ページの説明文を信じすぎるとハマる」を一段乗り越えられる。Koyfin の件で痛い目に遭った直後だったので、二度同じ穴に落ちたくなかった。",[10,60,62],{"id":61},"v03-codex-に個人向けでガイダンスを構造化で取れるサービスはあるかと詰めさせた","v0.3: Codex に「個人向けでガイダンスを構造化で取れるサービスはあるか」と詰めさせた",[15,64,65],{},"ここまで来て、v0.2 の仕様書に「個人向けの構造化ガイダンスフィードは事実上存在しない、自作の LLM 抽出が本線」と書いていた。これも怪しい。1〜2年で景色が変わるはずの領域で、業界構造の常識を当てにすると遅れる。",[15,67,68],{},"Codex CLI（GPT-5.5）に「Benzinga 以外で、個人契約可能なガイダンス構造化データのサービスを全部リストアップしろ」と投げた。返ってきたリストで、自分の知らない名前が並んだ:",[70,71,72,80,93],"ul",{},[73,74,75,79],"li",{},[76,77,78],"strong",{},"Massive 経由 Benzinga Corporate Guidance"," が個人向け $99/月で出ていた",[73,81,82,85,86,92],{},[76,83,84],{},"MetricDuck"," という SEC 8-K を AI で抽出する個人向けサービスが Free / ",[19,87,91],{"className":88},[89,90],"language-math","math-inline","15 / ","29 / $79 で稼働していた",[73,94,95,98,99,103,104,107,108,111],{},[76,96,97],{},"Trefis"," の「Recent Forward Guidance ",[100,101,102],"span",{},"BETA","」、",[76,105,106],{},"CapyFin"," の REST API、",[76,109,110],{},"Fintool"," の Earnings Summary など、ここ1〜2年で立ち上がったサービスが複数",[15,113,114],{},"v0.2 で書いた「個人向けは無い」は間違いだったので、v0.3 で全面改訂した。仕様書の 2.4 節を新設して、構造化ガイダンスを取れる個人向けサービスを一覧化し、Benzinga $99 を本命候補に据え直した。",[15,116,117],{},"Codex に詰めさせる効用はここで効いた。自分が「無いはず」と決めつけていた領域に、Codex は淡々と最新の SaaS リストを返してくる。前言を撤回するコストは仕様書を1セクション書き直すだけなので、間違ったまま走り続けるよりはるかに安い。",[10,119,121],{"id":120},"v04-毎年使うのに月額課金は積み上がるで自作に振った","v0.4: 「毎年使うのに月額課金は積み上がる」で自作に振った",[15,123,124],{},"Benzinga $99/月を本命に据えた直後、机の上でブツブツ呟きながら考えた。これは四半期ごとに発生する継続業務だ。サブスクは雪だるま式に積み上がる。",[15,126,127],{},"仕様書の余白に手で月額を書き出した:",[129,130,135],"pre",{"className":131,"code":133,"language":134},[132],"language-text","Benzinga      $99\nFMP           $69\nWhispers      $49\nfiscal.ai     $29\nKoyfin        $39\n合計          $285/月 = 5年で $17,100 ≒ 250万円\n","text",[19,136,133],{"__ignoreMap":137},"",[15,139,140],{},"決算ウォッチャー1つで250万円は払いたくない。Claude Code もあるし、Codex CLI もある。8-K Exhibit 99.1 を LLM で構造化抽出するパイプラインなら、実装1〜2日で組める。自作なら開発時間は一度きり、運用コストは API 利用料のみ。",[15,142,143],{},"v0.4 で Build vs Buy の最終判断を仕様書の冒頭に固定した。Benzinga と MetricDuck は本線から外して、§2.4 にフォールバック候補として残すだけにした。M1 マイルストーンで「NVDA / AMD / MU / TSM の過去4四半期分を Claude で抽出して、IR 公表値と手動照合して 95% 精度を測る」を入れた。ここで精度が出れば自作で確定、出なかった項目だけ既製サービスで補完する。",[10,145,147],{"id":146},"v05-codex-sdk-chatgpt-サブスクでもう払っているサブスクの中で完結する","v0.5: Codex SDK + ChatGPT サブスクで「もう払っているサブスクの中で完結する」",[15,149,150,151,155],{},"v0.4 を書き終えた時点で、実行基盤は「Anthropic API を従量で叩く」想定だった。月 ",[19,152,154],{"className":153},[89,90],"20〜","50 と書いた。",[15,157,158,159,162,163,166,167,170,171,174],{},"ここで、同じ日に別途作っていた ",[19,160,161],{},"codex-sdk-app-server-notes.md"," を Claude Code に読ませた。Codex SDK は Codex CLI のプログラム制御ラッパーで、内部で ",[19,164,165],{},"codex"," を子プロセス起動して JSONL でやり取りする。重要なのは、",[76,168,169],{},"ChatGPT サブスクのログイン済みセッションを SDK 経由で再利用できる","点。",[19,172,173],{},"OPENAI_API_KEY"," を環境変数に置かなくても、CLI のログインだけで動く。",[15,176,177],{},"つまり、自分は ChatGPT Plus を既に契約している。その月額の中で Codex CLI を回せば、決算ウォッチャーの追加コストは実質ゼロになる。API 従量課金が積み上がらない。",[15,179,180],{},"v0.5 で実行基盤を Codex SDK + ChatGPT サブスクに確定した。月額試算を書き直した:",[182,183,184,197],"table",{},[185,186,187],"thead",{},[188,189,190,194],"tr",{},[191,192,193],"th",{},"項目",[191,195,196],{},"コスト",[198,199,200,209,217,224,236],"tbody",{},[188,201,202,206],{},[203,204,205],"td",{},"ChatGPT Plus / Pro（既契約）",[203,207,208],{},"サブスク固定費",[188,210,211,214],{},[203,212,213],{},"Codex SDK / CLI",[203,215,216],{},"無料",[188,218,219,222],{},[203,220,221],{},"SEC EDGAR",[203,223,216],{},[188,225,226,229],{},[203,227,228],{},"FMP（無料枠 or $19）",[203,230,231,235],{},[19,232,234],{"className":233},[89,90],"0〜","19",[188,237,238,243],{},[203,239,240],{},[76,241,242],{},"追加コスト",[203,244,245],{},[76,246,247,250],{},[19,248,234],{"className":249},[89,90],"19/月",[15,252,253],{},"「もう既に払っているサブスクの中で完結する」のが本当の勝ち筋だった。5年で 93〜100% コスト削減になる。",[10,255,257],{"id":256},"運用形態-saas-化しないローカルから始めて-mini-pc-に移す","運用形態: SaaS 化しない、ローカルから始めて mini PC に移す",[15,259,260],{},"最後に運用形態を決めた。Codex SDK の主戦場は「ローカル / 社内 runner / CI / 個人用自動化」で、信頼済み環境を前提に設計されている。決算ウォッチャー（自分一人が cron で回す）の用途に完全一致する。",[15,262,263],{},"不特定多数に向けた SaaS にはしない。サーバ上に認証情報と shell 権限を持つエージェントを公開で置くのは危険だし、用途として不要だ。全部ローカルで始めて、回り始めたら自宅の mini PC か Linux 機に移す。Cloudflare Tunnel で自分専用に閉じる。これが個人エージェントの現実解。",[10,265,267],{"id":266},"新リポジトリに切り出して新セッションで即続きから始められる状態にした","新リポジトリに切り出して、新セッションで即続きから始められる状態にした",[15,269,270,271,274,275,278,279,282],{},"仕様書を v0.5 まで固めたら、",[19,272,273],{},"mdx-playground/memo/"," の中に置いておくとプロジェクトが混ざる。新リポジトリ ",[19,276,277],{},"C:\\Users\\numbe\\Git_repo\\nvidia-guidance-watcher\\"," を切って、CLAUDE.md と handoff.md と計画書を配置した。次に ",[19,280,281],{},"cd nvidia-guidance-watcher && claude"," で立ち上げた瞬間に、Claude Code が文脈を全部引き継いで M1 の PoC から作業に入れる状態。",[10,284,286],{"id":285},"一日の振り返り-仕様策定は前言撤回の連鎖だった","一日の振り返り: 仕様策定は「前言撤回の連鎖」だった",[15,288,289],{},"v0.1 から v0.5 までを並べると、全部前のバージョンの前提を訂正している:",[70,291,292,295,298,301,304],{},[73,293,294],{},"v0.1: ガイダンスは Out of Scope → v0.2 で In Scope に格上げ",[73,296,297],{},"v0.2: Koyfin にガイダンスがある → ヘルプで訂正、削除",[73,299,300],{},"v0.2: 個人向け構造化フィードは無い → v0.3 で Codex が複数発見、改訂",[73,302,303],{},"v0.3: Benzinga $99 を本命 → v0.4 で「毎年使うのに月額は積み上がる」で自作へ振る",[73,305,306],{},"v0.4: Anthropic API を従量 → v0.5 で Codex SDK + ChatGPT サブスクに変更",[15,308,309],{},"各バージョンの所要時間は30分〜1時間。前言を撤回するコストは仕様書を一節書き直すだけなので、間違ったまま走り続けるより圧倒的に安い。Claude Code に書かせて、Codex に詰めさせて、agent-browser に実画面を確認させる。三者を回しながら、自分の判断は「視点を選ぶ」だけに集中できた。",[15,311,312,313,316],{},"明日からは ",[19,314,315],{},"nvidia-guidance-watcher"," リポジトリで M1 PoC に入る。NVDA / AMD / MU / TSM の過去4四半期分の 8-K を Claude で抽出して、IR 公表値と手動照合する。95% 出れば自作確定。",{"title":137,"searchDepth":318,"depth":318,"links":319},2,[320,321,322,323,324,325,326,327,328,329],{"id":12,"depth":318,"text":13},{"id":25,"depth":318,"text":26},{"id":35,"depth":318,"text":36},{"id":48,"depth":318,"text":49},{"id":61,"depth":318,"text":62},{"id":120,"depth":318,"text":121},{"id":146,"depth":318,"text":147},{"id":256,"depth":318,"text":257},{"id":266,"depth":318,"text":267},{"id":285,"depth":318,"text":286},"dev","Whisper Beat とガイダンスを二軸で追う決算ウォッチャーの仕様を一日で v0.1 から v0.5 まで反復。Koyfin の誤認をヘルプで訂正し、Codex に個人向けサービスを掘らせ、最終的に Codex SDK で自作する判断に着地した記録","md",{},true,null,"/earnings-beat-watcher-spec","financial-data",false,"2026-05-18T00:00:00.000Z",{"title":5,"description":331},"2026-05/2026-05-18/earnings-beat-watcher-spec",[343,344,345,346,347,348],"決算","アナリスト予想","ガイダンス","Codex","仕様策定","Build vs Buy","active","zbbml586F-Ih32q-4QKAmD_F5mcyMsD0_fQqXdrVIEI",[],"https://log.eurekapu.com/og/blog/earnings-beat-watcher-spec.png?v=2026-05-18T00%3A00%3A00.000Z&title=%E3%82%A2%E3%83%8A%E3%83%AA%E3%82%B9%E3%83%88%E4%BA%88%E6%83%B3%E3%83%93%E3%83%BC%E3%83%88%E7%8E%87%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81%E3%83%A3%E3%83%BC%E3%81%AE%E4%BB%95%E6%A7%98%E3%82%92%20v0.5%20%E3%81%BE%E3%81%A7%E5%8F%8D%E5%BE%A9%E3%80%81%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AB%E8%87%AA%E4%BD%9C%E5%88%A4%E6%96%AD%E3%81%AB%E7%9D%80%E5%9C%B0%E3%81%97%E3%81%9F&author=Kei%20Komatsu&sig=ae6aa685d83811d0",1782528839178]