• #光ファイバー
  • #CPO
  • #NVIDIA Rubin
  • #バリュエーション
  • #半導体
  • #シリコンフォトニクス
  • #インタラクティブ
開発mdx-playground

光ファイバーとCPOの解説コンテンツを作りながら、光投資テーマの整合性を詰めた

外部の解説記事を読んでいて、銅線と光ファイバーの「境界線」の話が腑に落ちかけたところで止まった。表皮効果で銅が高周波になるほど表面しか使えなくなる、という物理は分かる。でも自分の言葉に落ちていない。図を眺めても、どの距離・どのデータレートで銅から光に切り替わるのかが、頭の中で線にならなかった。だから「ログイン済みのChromeでこの記事を画像ごとローカルにクローンして、それを土台にもっと噛み砕いた非公開の解説コンテンツを作って」と頼んだ。多少冗長でいいから理解を優先しろ、と注文を付けた。

今日はそこから、NVIDIA Rubinの光配線(CPO)の発展調査と、光銘柄のバリュエーション検討まで、テーマが芋づる式に伸びた一日だった。最初は「物理を噛み砕く」だけのつもりが、最後は「光銘柄のPER何千倍は今の決算で裏付けられているのか」まで自分で問いを掘っていた。

流れを先にまとめておく。外部記事のローカルクローン→非公開インタラクティブVueページの実装→フォント調整→Rubinの光配線(CPO)の発展調査とCodex事実レビュー→光銘柄のバリュエーション議論とCodexレビュー→右側フロート目次の追加→コミット。違和感や投資判断は自分、調査と実装はぜんぶ回させた、という今日もいつもの分業だった。

外部記事を自分の本棚に取り込む

最初の指示はシンプルだった。外部の有料解説記事を、自分のログイン済みChrome(DevTools MCP経由)で開いて、画像も含めてローカルに丸ごと落とす。それを HTML に再構成して、さらに自分の専門の文脈(会計・投資判断)に沿って噛み砕いた解説ページにする。公開はしない。サイトの「ローカル限定」エリアに置く。

クローンは本文画像46点まで全部落ちた。ここで一つ釘を刺しておいたのは「有料記事の全文と画像が間違ってもgitに乗らないようにしろ」という点。計画段階でCodexにレビューさせたら、まさにそこを突いてきた。memo/ は gitignore されていないから、全文JSONを誤コミットするリスクがある、と。gitignore済みの reference/ に退避させて、git status に出ないことまで確認させた。有料素材を扱うときは、便利さより先にこの一線を引かないと事故る。

解説ページ本体は Markdown ではなく .vue で作らせた。表皮効果を周波数スライダで動かす、境界線マップの点をドラッグする、といった「触って理解する」部品を入れたかったからだ。ここで非公開化が地味に厄介だった。Markdown記事なら unpublished: true で6経路から除外できるが、Vueページはアプリコードとしてビルドに混ざる。Codexの2回目のレビューが核心を突いた。<DevOnly> はテンプレートしか消さず、<script setup> に書いた本文やデータは本番チャンクに残る、と。

対処は、本文・データを丸ごと別コンポーネント(components/dev/CopperVsOpticsLesson.vue)に隔離し、ページ本体は404ガードと import.meta.dev ゲートの dynamic import だけにする構成。本番ビルドでは import.meta.devfalse に静的置換され、本文チャンクごと dead-code として消える。

ついでに決めたのは、解説ページの図版に外部記事のPNGを一切使わず、表皮効果も境界線マップも全部自作のSVG/Canvasで描かせること。public/ に外部の画像を置かなければ、このページ経由で他人の著作物が漏れる経路がそもそもゼロになる。クローンした素材は学習用に reference/(非デプロイ)へ閉じ込め、表に出すページは自作の可視化だけで組む、という線引きにした。

const Lesson = import.meta.dev
  ? defineAsyncComponent(() => import('~/components/dev/CopperVsOpticsLesson.vue'))
  : null

この非公開設計に行き着く前に、計画書をCodexに3ラウンド回させた。1回目で有料素材のgit隔離を指摘され、2回目で <script setup> 残留問題を指摘され、3回目でようやく「致命的な点なし」に収束した。プランの段階で潰しておかないと、実装してから「本番バンドルに本文が残っていた」と気づくのは目も当てられない。レビューを回させる手間より、後で剥がす手間のほうがずっと高い。

物理計算は純粋関数(interconnect-physics.ts)に切り出してテストを30件書かせた。表皮深さ、交流抵抗比、到達距離、リンク種別の分類。dev で開いて、周波数スライダを28GHzに合わせると δ=395nm、実効断面積が0.4%まで縮み、交流抵抗が直流比×253まで跳ね上がる、という数字が画面の計算と一致するのを目で確かめた。「太くしても効かない」という直感が、ここで初めて数字の手触りになった。導体径を上げても高周波では表面しか電流が流れないから、銅の到達距離は224Gで60cm程度まで縮む。その先はパッシブDACかACC/AEC、もっと先は光、という境界が、点をドラッグするマップで見えるようになった。

検証では既存テストの失敗24件に一瞬ひやっとしたが、内訳を見させたら23件は既存の別件(OGメタタグ・consolidation・url-migration系)で、自分が増やしたのは1件だけ。それも、本番404・noindexのローカル限定ページにOGタグを要求するチェックだったので、除外リストに「ローカル限定ページ」として正しく分類させて解消した。自分の作業のせいか既存の問題かを切り分けないと、無関係な赤に振り回される。

レイテンシの誤解も、積み上げ棒グラフで距離スライダを動かして初めて消えた。伝播遅延(距離に比例)と変換/DSP遅延(距離に依らず固定)を分けて積むと、短距離では銅が低遅延だが、ある距離で光が逆転するクロスオーバーが見える。「光は速い」のではなく、「短距離では銅、長距離では光」という境界が遅延の面でも引ける、という話だった。会計の言葉に翻訳すると、境界線は損益分岐点で、光の消費電力は経常的なopex、銅ケーブルはcapex寄り、という囲みも添えさせた。自分の土俵に引き寄せると、トレードオフの構造が一段早く飲み込める。

フォントが薄い、という違和感

完成報告を受けてページを開いたら、本文のフォントが他のページと明らかに違った。薄い。細い。「ちょっと合わせてもらえませんかね、なんか薄くなってませんか」と投げた。

原因は本文に独自の font-family を指定していたことだった。"Yu Gothic", Meiryo を含めたせいで、Windowsでは細い Yu Gothic が選ばれていた。兄弟のブログページは日本語フォントを指定せず -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif を使っている。そのサイト共通スタックに揃えさせたら、算出スタイル(computed style)が他ページと一致して、薄さが消えた。

機能的には何も壊れていなかったのに、フォントが他ページと違うだけで「これ別物だ」と感じる。AIが作ったページは、こういう「全体と馴染んでいない」ズレを、画面を並べて見比べないと拾えない。動くかどうかとは別の軸で、自分が違和感を持つ係をやらないと残る、という小さい体感だった。

Rubinは光で配線してるんだっけ、という問い

ここから発展。NVIDIAのRubinって、もう銅線じゃなくて光で配線してるんでしたっけ、という記憶が曖昧だった。その技術の正体を調べて、発展内容としてコンテンツに折り込ませた。ただし「OpenAIのCodexにちゃんと事実レビューを受けておいて」と条件をつけた。

調べさせた結果、自分の記憶は半分正しくて半分混ざっていた。Rubin世代の「ラック内」スケールアップ(GPU同士をNVLinkで密結合する極短距離)は、まだオールカッパー=銅。NVIDIAは銅を物理限界まで使う。光(CPO: Co-Packaged Optics)が出てくるのは、スイッチ側と、Rubin Ultra(2027)のラック「間」スケールアップから。ラック内のNVLinkそのものが光になる(ネイティブ光NVLink)のは Feynman(2028)世代。「Rubin=光」という認識は、先端のスイッチ/CPOの話としては正しいが、ラック内まで光になるのはもっと先、という整理に落ちた。

光の正体は CPO × シリコンフォトニクス。これまでスイッチの外側に挿していたプラガブル光トランシーバを、スイッチASICと同じパッケージ基板の上まで引き寄せて、光IC(PIC)と電気IC(EIC)を隣に載せる。変調はマイクロリング変調器(microring resonator)で、レーザーは熱に弱いので外部光源(ELS)として分離する。製造はTSMCの3Dハイブリッドボンディング(COUPE)。プラガブル比でポート電力が30W→9W、レーザー数1/4、信号品質63倍、という数字を発展セクションに折り込んだ。電気信号を基板上で長く引き回さずに済むから、消費電力も信号劣化も一気に減る、という筋が通っている。

スイッチ側の製品も整理した。InfiniBandの Quantum-X Photonics は144ポート×800Gb/sで115.2Tb/s、Ethernetの Spectrum-X Photonics は最大512ポート×800Gb/sで400Tb/s。NVLinkそのものが光になるのは Feynman(2028)、NVL1152で全結合。ここまで来てようやく、ユーザーの「Rubinは光」という記憶が、どの層の話と混ざっていたのかが線で見えた。

このセクションを Codex に渡したら、自前のWeb検索で一次情報と突き合わせて事実修正を返してきた。Vera Rubinの主力は NVL72 であって NVL144/Kyber は Rubin Ultra 側だ、とか、スケールアップの定義が狭い、とか。世代と年次の対応は混同しやすいので、Codexに突き合わせさせて正解だった。発展セクションには、GB300 NVL72(2025)→Vera Rubin(2026)→Rubin Ultra NVL576(2027)→Feynman NVL1152(2028)のロードマップ表を入れて、各世代で「ラック内/ラック間/スイッチ」がそれぞれ銅か光かを色分けした。表にすると、銅が消えるのではなく担当する距離レンジが世代ごとに狭まっていく、という構図が一目で追えた。タイプミス(Rubun→Rubin)も画面で見つけて直させた。

光銘柄、決算はまだビート転換していないのでは

一番気になっていたのはここ。光系の銘柄がめちゃくちゃ上がっていて、PERが何千倍とかになっている。でも足元のガイダンスを見ても、アナリスト予想を大幅に上回って明確な変曲点を迎えた決算を、まだ自分は見ていない。これはまだ試験研究段階で、Rubin UltraのCPOがラック間スケールアップに実採用されてから決算に出る、という理解で合っているのか。そして2028年のFeynmanでラック内スケールアップに光を使う場合、市場としてどれくらいでかいのか、それが今の光銘柄のバリュエーションと整合しているのか。

調べさせて整理したら、自分の問いの立て方が一段ずれていた。「光全体」と「CPO/スケールアップ特化」を一括りにしていたのが、感覚を鈍らせていた。「光全体」では決算の変曲点はもう来ている。トランシーバ系(Coherent/Lumentum/AOI)はスケールアウト(800G/1.6Tのプラガブル)で数四半期ビートを継続している。まだ来ていないのはCPO/スケールアップ特化の部分で、そこはRubin Ultraのラック間CPO→Feynmanの2027〜2028以降。広範採用は2028-2030。単一の節目ではなく段階的なランプ、という理解に修正した。「変曲点をまだ見ていない」という自分の体感は間違っていなかったが、見ていたレイヤーがCPOで、トランシーバ側はもう動いていた、という二段構えだった。

トランシーバ系の足元の数字を並べてもらうと、過熱の気配がはっきりした。Coherentは7四半期連続ビートでYTD+97%、Lumentumは売上が前年比で倍増、AOIに至ってはYTD+441%。それでも期待が先に行きすぎて「ビートしても株が下がる(priced for perfection)」局面に入っている。一方でCPO/スケールアップ特化の売上はまだ小さく、CPO部品は業界全体でも2025年に約$1.3B程度。自分が「まだ明確な変曲点の決算を見ていない」と感じていたのは、CPOのレイヤーを見ていたからだ、と腑に落ちた。

バリュエーションは、現在の高マルチプル(ALAB 100倍超、CRDO 99倍、対して半導体平均は60倍弱)が2028-30のランプを織り込み済み。しかも価値の取り手が分断していて、CPOがDSPリタイマやプラガブルモジュールの経済性を侵食する一方、価値はシリコンフォトニクス・外部レーザー(NVIDIAがLumentum/Coherentに4B投資)・先端パッケージング(TSMC COUPE)側へ再配分される。光AIのTAMは18B→2030年$90B超(Lumentum自社試算)、CPO浸透率は2030年に最大35%(TrendForce)という規模感だが、推計の幅は大きい。トランシーバ出荷の絶対数自体は2026の約5,000万→2030の約2億個と増え続けるので、当面ゼロサムではない。

HBMとは別レイヤー、という整理も自分の中で固めた。HBMはオンパッケージのメモリ帯域(メモリの壁)、光はGPU間/ラック間のネットワーク(通信の壁)。光が進んでスケールアップの天井が上がると、単一GPUドメインが広がり(NVL72→576→1152)、束ねるGPUが増えるから、総HBM消費はむしろ増える。代替ではなく加算だ。HBM需要は前年比+130%で独立に拡大している。光に張ることがHBMに張ることの裏返しにはならない、と確認できた。

この内容も「7. 投資の視点」としてページに折り込んで、Codexに事実レビューさせた。+441%や18B→90Bといった数字が出典と整合しているか、誇張になっていないか、特定銘柄の売買示唆に踏み込んでいないか、を厳しく見させた。致命的な指摘は1件。CPOスケールアップの変曲点を「Rubin Ultra(2027〜)」とやや断定しすぎ、というもの。出典(TrendForceは "could emerge as early as"、SemiAnalysisはFeynmanを焦点に置き2027-28はまだ銅中心)に照らして、2箇所の表現を緩めた。投資の世界で年次を断定すると後で恥をかくので、ここは緩めて正解。本文には「投資助言ではない/特定銘柄推奨ではない」旨を明記させてある。元記事の免責に倣う形だ。

価値の取り手が分断する、という構造もここで腹落ちした。CPOがDSPリタイマを不要にしてプラガブルモジュールの経済性を侵食する一方で、その分の価値はシリコンフォトニクスや外部レーザー、先端パッケージングへ移る。だから「光が伸びる=既存の光トランシーバ銘柄がそのまま伸びる」とは限らない。むしろ既存のプラガブル系が一部食われる側に回る可能性がある。「光に張る」と言ったときに、どのレイヤーのどのプレイヤーに張っているのかを分けないと、テーマだけ合っていて中身を外す。

フロート目次、追従っていうかフロートになってない

最後に、他ページと同じ右側のスクロール追従目次を付けさせた。共有コンポーネント TableOfContents.vue があって、右側 sticky・scrollspy・1024px以下で非表示、という仕様。oauthページ等が grid-template-columns: 1fr 280px の右レイアウトを確定パターンとして持っていたので、それに合わせさせた。

一度目は「追従する」とは言うが、スクロールしても目次が画面に留まらなかった。追従っていうか、フロートになってない、と返した。原因は .lesson-layoutalign-items: start を付けたせいで、サイドバー列が目次の高さしかなくなり、position: sticky の可動域がゼロになっていたこと。他ページは stretch のままで、列が本文の高さまで伸びるから追従する。align-items: start を外したら、1800pxスクロールしても目次が top:16px に踏みとどまるようになった。

最後に、この copper-vs-optics ページ機能の8ファイル(新規6・変更2)だけをステージしてコミットした。セッション前から残っていた beat-monitoring 等の無関係な変更は混ぜていない。git status を見ると関係ない差分がたくさん並んでいたので、今日触ったファイルだけを選ばせた。一機能一コミットを崩すと、後で履歴を追えなくなる。コミットは 08b869f2feat(blog): 銅線↔光ファイバーの非公開インタラクティブ解説ページを追加。master直コミットの運用なのでブランチは切っていない。

振り返り

今日の構図はいつも通りだった。物理の違和感も、決算がまだビート転換していないという感覚も、フォントが薄いというズレも、目次がフロートしていないという気づきも、全部自分が画面を見て拾った。一方で、ローカルクローン、CPOの世代調査、TAMとバリュエーションの裏取り、Codexレビューの反映は全部回させた。人間が違和感を拾う係、AIが調べて直す係。

一番得たのは、自分の投資の問いが「光全体」と「CPO/スケールアップ特化」を一括りにしていた、という気づきだ。トランシーバはもう決算でビートしている。まだ来ていないのはCPOのほうで、それは2028 Feynmanに向けた段階的なランプ。今のPER何千倍は、その2028-30を相当先食いしている。決算で何を見るべきかが、銘柄のレイヤーごとに分かれた。

残った宿題もはっきりした。Feynman世代でラック内スケールアップに光を使う場合のTAMが、出典の数字(18B→90B、CPO浸透率35%)から逆算して今のバリュエーションと噛み合うのか、まだ自分の手で詰め切れていない。テーマが正しくても、規模感と織り込み済みの度合いがズレていたら高値掴みになる。そこは別の日に数字を並べて納得するまでやる。

明日以降やりたいこと

  • このページの「7. 投資の視点」を、beat-monitoring の監視銘柄リストと紐づけて、どの銘柄のどの四半期で変曲点を見るかをチェックリスト化する
  • Feynman世代のラック内スケールアップ光化のTAM試算を、出典の数字(18B→90B、CPO浸透率35%)から自分で逆算して納得できる形にする
  • 非公開Vueページの本番バンドル漏洩確認(dist grep)を、次に本番ビルドを回すタイミングで1回だけ実行する