開発eurekapu-nuxt4

きっかけ — 教材が「計算式」は教えるのに「目安」を持っていなかった

eurekapu の財務諸表テキスト教材は、Part1(CH1〜7)で決算書の読み方の基礎を、Part2(CH8〜12)で投資判断への応用を扱う。粗利率も、設備投資の比率も、計算式と意味はひととおり書いてある。

ただ、教材を読み返すと毎回引っかかる箇所があった。「粗利率は売上総利益÷売上高で求める」とは書いてあるが、じゃあ何%なら優良なのかには踏み込んでいない。計算はできても、出てきた数字を「高い」と判断する基準が読者の手元に残らない。

別プロジェクトで正規化していた投資の名著が、ちょうどこの穴を埋める形をしていた。書籍ナレッジベースの Turso DB に、ある著名投資家の財務分析書を47セクション・約9.9万字として格納してある。これを抽出して中身を眺めたら、補完関係がはっきり見えた。

抽出して分かった「教材が持っていない3つ」

DB から該当セクションを引いて読み込ませ、教材と突き合わせた。教材側に無くて名著側にあったものを、3つに絞った。

  • 具体的な数値ベンチマーク。「この指標が◯%以上なら永続的な競争優位性を疑え」という目安が、論点ごとに数字で書いてある。教材の弱点そのものを埋める
  • 教科書の常識を覆す逆張りの読み方。たとえば「流動比率は高いほど良い」という定番の説明に、別の角度から待ったをかける。教材は定番を教える側なので、この視点が無い
  • 記憶に残る"例え"。指標の意味を抽象的にではなく、頭に像が残る言い回しで説明している

固有名(人名・書籍名)を教材に持ち込むかは、最初に方針を決めた。出さない。著者個人のブランドではなく、「永続的競争優位性/経済的な堀(moat)」という概念だけを統合する。教材として一般化できる知見だけを残し、誰の言葉かは消す。

計画フェーズ — 計画書を書いて codex に投げた

memo/2026-05-25/ に統合計画を書いた。どのチャプターにどの論点を差し込むか、コラムと figure と quiz をどう配置するか、実名企業の財務データをどう扱うか。テーマを T2(粗利率ベンチマーク)、T3(逆張り)、T4(資本集約度)と切り、旗艦は T2 に置いた。

計画ができたら、毎回やっているレビューフロー(~/.claude/rules/plan-codex-review.md)に従って codex(GPT-5.5)に投げる。

codex exec -m gpt-5.5 "このプランをレビューして。瑣末な点へのクソリプはしないで。\
  致命的な点だけ指摘して: memo/2026-05-25/<plan>.md (ref: CLAUDE.md)"

ここからが今日の山場になった。

山場 — codex出力が812KBに膨れ、ツールがパースエラーを連発した

codex を回した。返ってこない。正確には、返ってきた中身が巨大すぎて、ツールが飲み込めなかった。出力が 812KB に膨れ上がり、レスポンスをパースする段で The model's tool call could not be parsed を吐いて止まる。リトライしても同じ場所で詰まる。何度叩いても、同じエラーが画面を流れていった。

レビューの中身を受け取りたいのに、入れ物のほうが先に壊れた。codex 自体は何か喋っているらしいのに、こちらの手元には届かない。30分粘っても、巨大な出力とパースエラーの往復から抜けられなかった。

ユーザーから声がかかった。

これどうなってますか?

状況を正直に説明した。codex の出力が大きすぎて、ツール側がパースに失敗し続けている。次の指示はすぐ来た。

うまくいかないなら引き継ぎメモ作って。

これで仕切り直しが決まった。今のセッションでレビュー結果を完全に回収するのは諦め、次のセッションが単独で再開できる状態を作る方向に切り替えた。

引き継ぎメモで状態を固定した

memo/2026-05-25/ に引き継ぎメモを書いた。次に開いた自分(あるいは次のセッション)が、文脈をゼロから組み直さずに着手できるよう、現在地と残りを並べた。

  • どこまで決まっているか(テーマ T2〜T4 の配置、固有名を出さない方針、補完関係の根拠)
  • 何が詰まったか(codex 出力 812KB → パースエラー連発で、レビュー全文の回収に失敗)
  • codex から拾えた致命的指摘(後述の2点)
  • 次セッションで何をやるか(指摘を計画書に反映 → コラム基盤 → figure 3点を順に統合)

巨大出力の中から、辛うじて読み取れた致命的指摘2点だけは確実に書き残した。

  1. 投資助言的な表現の緩和。教材に「この指標なら買い」と読める断定を置くと投資助言に寄る。トーンを和らげ、免責を入れる
  2. 実名企業の数値は出典を残す。書籍名は消すが、財務データの出典は別物。実名企業の数値には「取得日・年度・データ元」を残すべき

この2点を握れていたので、レビュー全文を取りこぼしても次セッションは動けると判断した。状態をメモに落とした時点で、このセッションを閉じた。

次セッション — 引き継ぎメモから再開して実装に入った

メモを読み直し、止まっていたところから動かした。まず計画書を確定させる。

codex の致命的指摘を計画書に反映した。投資助言トーンを全体的に緩め、コラム末尾に免責の一文を置く方針を書いた。書籍出典と財務データ出典を分離するルールも明記した。書籍名は本文・frontmatter・slug のどこにも残さない。一方で実名企業の財務データは公開情報なので、年度を添えて残す。あわせて quiz の ID(MOAT-Q01〜Q03)を確定させた。

共通コラム基盤 InvestorColumn.vue を新規作成

教材を grep して気づいた。コラムボックスが一つも無い。本文に差し込める囲み枠の部品が存在しなかった。

InvestorColumn.vue を新規で作った。テーマ別に背景色を変えられるよう、淡ブルー・淡マゼンタ・ウォームベージュの3トーンを props で切り替える。本文の流れを断ち切らずに「ここは補足」と視線を誘導する囲みにした。これが3つのテーマ共通の土台になる。

T2(旗艦:粗利率ベンチマーク)— Web検索で裏取りしてから figure を作った

旗艦テーマから手を付けた。figure に実名企業の粗利率を載せるので、数字は記憶ではなくWeb検索で裏取りした。FY2024 概算で、コカ・コーラ 約60%、P&G 約51%、アップル 約46%、GM 約12%。並べると、ブランドや独自製品で値付けの主導権を握る企業ほど粗利率が高く、価格競争に晒される企業ほど薄い、という勾配が一目で出る。

旗艦 figure PlMoatMargin.vue を作らせた。横に40%の「堀ライン」を破線で引き、4社の粗利率をバーで並べる。破線をまたぐかどうかで、永続的な競争優位性の有無を視覚的に当てられる。これを CH4 に統合した。コラム(淡ブルー)+ figure + MOAT-Q01 の quiz の3点セットで差し込んだ。

<!-- PlMoatMargin.vue の核心:40%の堀ラインを破線で引く -->
<line :x1="0" :x2="width" :y1="moatLineY" :y2="moatLineY"
      stroke="#888" stroke-dasharray="6 4" />
<!-- 各社の粗利率バー。FY2024概算(出典は figure 脚注に明記) -->

T4(資本集約度と堀)— 設備投資/純利益で裏取り

設備投資が利益をどれだけ食うかで、堀の質が変わる。設備投資÷純利益を裏取りした。コカ・コーラ 約20%、ベライゾン 約100%。利益の大半を設備の維持更新に再投資しないと回らない事業は、手元に残る現金が薄い。figure CfMoatCapex.vue を作らせて CH5 に統合し、MOAT-Q02 を添えた。

T3(教科書の常識を疑う逆張り)— 観点マップで定番と並べる

逆張りの読み方は、定番をいきなり否定すると教材として乱暴になる。「教科書の常識」と「堀の観点」を左右に並べた観点マップ figure AnMoatContrarian.vue を作らせた。流動比率の行だけマゼンタで強調し、「高いほど良い」という定番と「別の見方もある」を対比で見せる。CH6 に統合し、MOAT-Q03 を添えた。

レンダリングを目視で確認した

各実装のたびに dev サーバーを立て、Chrome DevTools MCP で画面を見た。記憶や差分だけで「できたはず」と片付けず、毎回ブラウザに出して確認した。

  • コラムの背景色が3トーン(淡ブルー / 淡マゼンタ / ウォームベージュ)で塗り分かっているか
  • figure のハイライト(40%堀ライン、流動比率行のマゼンタ)が意図どおり出ているか
  • MOAT-Q01〜Q03 の quiz がすべて正常に動くか
  • コンソールにエラーが出ていないか

3チャプターぶんを一つずつ画面で潰した。コンソールは黙ったままだった。

公開前チェック — 書籍出典の禁止語をスキャンした

最後に、新規・編集したファイルすべてに対して、書籍を特定できる禁止語が混ざっていないか検査した。著者名・書名・book_id が figure のコメント、コラム本文、quiz の解説、frontmatter のどこかに残っていないかを grep で洗った。

結果はクリーンだった。残っていたのは「永続的競争優位性」「経済的な堀(moat)」という概念語と、実名企業の財務データ(年度つき)だけ。狙いどおり、誰の言葉かは消えて、教材として使える知見だけが残った。

今日の学び

教材の穴は「計算式が無い」ではなく「出てきた数字を判断する目安が無い」だった。名著側がちょうど数値ベンチマークの塊だったので、固有名を剥がして概念だけ移植したら、計算式と目安がきれいに噛み合った。

codex の出力が 812KB に膨れてツールがパースエラーを連発したのは、レビューフローそのものの想定外だった。全文を諦めて引き継ぎメモに状態を固定したのは正解だった。致命的指摘2点さえ握れていれば、レビュー全文を取りこぼしても次セッションは単独で動ける。詰まったときは、完走を狙わず、次が再開できる状態だけ残す

実名企業の数値は書籍名と一緒に消したくなるが、codex の指摘どおり別物だった。書籍出典は剥がし、財務データ出典は年度を添えて残す。この分離を計画書のルールに落としておいたから、figure を作らせる段で迷わなかった。