開発mdx-playground

発端: 非上場のCXMTから数字を取りたい

「2026年1〜3月の売上高508億元」という数字がメモリ記事に転がっていた。出どころが気になって調べると、CXMT(長鑫存儲)本体は非上場だが、A株上場の 兆易創新(GigaDevice, 603986.SS) の四半期報告書に持分法投資先として数字が乗っているらしい、という当たりが付いた。

これは memory-makers の決算ビートに乗せたい。/add-ticker で兆易創新を取り込めば、芋づる式に CXMT の四半期売上が拾えるはず——という前提で着手した。

最初の躓き: 兆易創新は CXMT の proxy じゃなかった

/add-ticker を回す前に、サブエージェントを偵察に派遣した。「兆易創新の長鑫科技持分はどの会計区分か、何%か」を1問だけ聞かせる構成にした。

戻ってきた答えで前提が崩れた。

  • 兆易創新の長鑫科技持分は 1.80% しかない
  • 会計区分は「联营企业」(持分法)ではなく 「其他权益工具投资」(公允価値評価)
  • つまり兆易創新の四半期報告書には、CXMT の売上・利益が一切ぶら下がってこない

「兆易創新を取り込めば CXMT が取れる」という当初の絵は、ここで完全に崩れた。508億元の数字が出てきた一次資料は別にあるはずで、改めて探させると 長鑫科技自身の招股说明书(IPO 申請受理 2025-12-30、財務資料更新版 2026-05-17 公開)が引っかかった。これが本物だった。

ここで方針を切り替えた。

  • CXMT を memory-makers の独立 maker として追加する(兆易創新の DRAM 区画に間借りさせない)
  • 兆易創新は本来の NOR / MCU / NAND メーカーsubcategory: nand)の位置に戻す
  • 兆易創新と CXMT の関係は「持分1.80% + 関连人(朱一明が両社で重要ポジション)+ DRAM代工調達」の3系統に分解して説明欄に書く

最初の数十分はこの整理にかかった。

次の躓き: チャートを作らなかった判断ミス

CXMT の maker ページが描画されたあと「表示確認しました」と報告したら、「ごめん、チャートにしてほしいんですけど、できなかったってことですか?」と返ってきた。

正直に書くと、できなかったのではなく 判断ミス だった。元の記事にあった定量データが3点しかなく(508億元 / 1,100-1,200億元ガイダンス / 500-570億元ガイダンス)、「3点ならテキストでいいか」と勝手に省略した。本来は招股说明书から年次推移が取れる以上、最初からチャートにすべきだった。

SK Hynix 用のカスタムセクションパターンを参考に、cxmtIpoFinancials.ts データファイルを作らせて、[maker].vue に CXMT 専用セクションを showCxmtFinancials = (id === 'cxmt') のガード式で出し分けるよう指示した。GroupedBarChart 2枚(売上 / 歸母純利益)と詳細テーブルが描画されて、ようやく見られる形になった。

3つめの躓き: 過去の数字を入れ忘れた

「OK、それでその508億元ってやつがチャートのどこに書いてあるのかわからないんですけど」と返ってきて、画面を見て自分でも気づいた。チャートに乗っているのは 2025年通年と 2026 Q1 だけで、2022〜2024年の実績が抜けていた。さらに 2026 通年予測(H1 ガイダンス × 2 で粗く推計)の扱いが、実績と並列に置かれて見分けがつかない。

ここで GroupedBarChart 側に 予測区切り の仕組みを足すことにした。既存呼び出し側を壊さない前提で、forecastFromIndex などの prop を追加して、指定インデックス以降のバーをハッチ柄+点線 stroke で描き、境界に縦の点線ディバイダと「← 実績 / 予測 →」ラベルを引く構成にした。

<GroupedBarChart
  :categories="['2022', '2023', '2024', '2025', '2026 Q1', '2026E']"
  :series="revenueSeries"
  unit="億元"
  :forecast-from-index="5"
  forecast-label-actual="実績"
  forecast-label-forecast="予測"
/>

forecastFromIndex を 5 にすると、6番目(インデックス5)の 2026E 列から先がハッチ柄に切り替わる。prop 未指定なら従来動作 の挙動を維持しているので、既存の SK Hynix / Micron / Nanya 側は何も書き換えなくていい。

4つめの躓き: チャートを分けすぎた

forecastFromIndex を入れた直後、最初の実装では「実績用チャート」と「予測用チャート」を別パネルに分けてしまっていた。「あーごめん、そういうことか。これチャートを一つにまとめてもらっていいっすよ」と指示が飛んできて、ようやく意図が合った。

時系列で並べたいのに途中で別パネルに飛ばされたら、目で連続性を追えない。1枚に統合して、2022〜2026Eの6カテゴリが横一列に並ぶ形に直した。GroupedBarChart 側に予測区切りの仕組みを入れた効果がここで効いてくる——同じパネル内で実績と予測を視覚分離できるので、分割する理由がそもそもなくなった。

最終的に着地した構成はこうなった。

位置カテゴリ売上 (億元)歸母 (億元)スタイル
12022 年82.9実績(塗りつぶし)
22023 年90.9実績
32024 年241.8実績
42025 年617.99実績
52026 Q1 単四半期508実績(単Q表記)
62026 年(予測, H1×2)2,300前後ハッチ柄+点線

招股说明书の年次推移がきれいに右肩上がりに並んで、最後だけハッチ柄で予測と分かる絵になった。

学び

  • 一次資料の所在を仮定で進めない。「兆易創新の四半期報告に CXMT がぶら下がっている」という前提は、誰かが書いた要約記事の影響で頭に貼り付いていた。サブエージェントに偵察を派遣して持分%と会計区分を1問だけ確認させたのが効いた。リサーチを並列でフル稼働させる前に、前提を1つ確認させるステップを噛ませる癖は維持したい
  • 「データ点が少ないから省略していい」は呼んでいない判断。チャートにできる数字があるなら最初からチャートにする。テキストにまとめて出すと、後から「チャート見せて」と必ず戻る。一往復ぶん無駄になる
  • 既存コンポーネントに足す prop は default で従来動作を保つforecastFromIndex をオプショナルにし、未指定で既存挙動を維持したので、他の maker ページに副作用が出なかった。「既存呼び出し側を壊さない」を最低条件にしてから機能追加に踏み切ると、レビューと検証が軽くなる
  • 時系列は1パネルにまとめる。実績と予測を別パネルに分けると、目で連続性を追えなくなる。スタイル(ハッチ・点線・ディバイダ)で十分に分離できる

成果物

git commit 1a0a0c36 の中身:

  • 新規: apps/web/app/data/memory-makers/cxmtIpoFinancials.ts(招股说明书ベースの年次推移+2026 H1 ガイダンス)
  • 修正: apps/web/app/components/memory-makers/GroupedBarChart.vueforecastFromIndex / forecastLabelActual / forecastLabelForecast prop 追加、ハッチ柄+点線 stroke +境界ディバイダ)
  • 修正: apps/web/app/pages/memory-makers/[maker].vueshowCxmtFinancials ガード式で CXMT 専用セクションを出し分け)
  • 修正: apps/web/app/data/memory-makers/makers.ts(CXMT を独立 maker エントリとして追加、兆易創新を NAND メーカー側に戻し、CXMT との関係を持分1.80% / 関连人 / 代工調達の3系統で記述)