[{"data":1,"prerenderedAt":194},["ShallowReactive",2],{"content-/memory-makers-hub-dram-share":3,"all-pages-for-dir":192,"og-image-/memory-makers-hub-dram-share":193},{"id":4,"title":5,"body":6,"category":173,"description":174,"extension":175,"meta":176,"navigation":177,"path":178,"project_name":179,"published":180,"publishedAt":181,"seo":182,"stem":183,"tags":184,"todo":190,"unpublished":180,"updatedAt":190,"__hash__":191},"pages/2026-06/2026-06-02/memory-makers-hub-dram-share.md","メモリーメーカー動向ハブを新設し、DRAM市場シェアの推移を可視化した一日",{"type":7,"value":8,"toc":165},"minimark",[9,13,17,25,30,33,51,57,60,64,67,70,94,101,105,108,111,114,118,121,132,135,139,142,145,148,151,158,161],[10,11,5],"h1",{"id":12},"メモリーメーカー動向ハブを新設しdram市場シェアの推移を可視化した一日",[14,15,16],"p",{},"朝、コーヒーを淹れる前にハンドオフメモを5本開いた。昨日の積み残しがどこまで残っているのか、記憶だけで判断せずにファイルを並べて読む。残っていたのは大小5件。一番の大物が「メモリーメーカー動向ハブ」のUIで、ページが丸ごと存在しないまま放置されていた。",[14,18,19,20,24],{},"まずは小物から片付ける。億り人記事はもう仕上がっていたので、ハンドオフメモ上で完了マークを打ち込んだ。チェックボックスに ",[21,22,23],"code",{},"x"," を入れるだけの作業だが、メモから1行消えると次に進む足が軽くなる。",[26,27,29],"h2",{"id":28},"データ層は揃っていた足りないのはページだった","データ層は揃っていた。足りないのはページだった",[14,31,32],{},"メモリーメーカーハブは、最初に「何が無いのか」を切り分けるところから入った。Claude Codeに既存実装を読ませると、データ層・純粋関数・SVGチャートはすでに前のセッションで組み上がっていた。欠けているのは画面だけ。つまりページを5枚書けば動く状態だった。",[14,34,35,36,39,40,43,44,43,47,50],{},"手本にしたのは ",[21,37,38],{},"beat-monitoring"," ページ。同じハブ構造を持っているので、構成をそのまま下敷きにできる。Claude Codeに手本と改変対象の3ファイル（",[21,41,42],{},"index.vue"," / ",[21,45,46],{},"breadcrumbs.ts",[21,48,49],{},"nuxt.config.ts","）を読ませてから、ページ実装に入らせた。",[14,52,53,54,56],{},"実装の前に既存テストをバックグラウンドで流しておいた。9件パス。データ層の足場が固いことを確認してから上物を載せる。ハブページ、動的ルートの個別ページ、チャート2種とデータ表を順に組み、トップにカードを追加し、パンくずを通し、prerender seed を足す。",[21,55,49],{}," は Read していなかったので一度編集を弾かれた。該当箇所を読み直してから書き直す。",[14,58,59],{},"検証で「Home > メモリーメーカー > サムスン電子」のパンくずが出て、404 が 404 を返すところまで確認できたとき、画面が形になったと実感した。テストは16件まで増えてすべてパスしていた。",[26,61,63],{"id":62},"サムスンとsk-hynixで決算データの形が違った","サムスンとSK Hynixで決算データの形が違った",[14,65,66],{},"午後、SK Hynix をハブの2社目として足す段になって、データの形が噛み合わない問題にぶつかった。",[14,68,69],{},"サムスン電子は「四半期・セグメント別」の損益でデータを持っている。一方 SK Hynix の手元データは「年次・連結損益」型。粒度も切り口も違う。同じ型に無理やり押し込むと、どちらかが破綻する。ここでデータ種別を1つ拡張する判断をした。年次・連結損益を扱う種別を新設し、純粋関数（年次系列ビルダー）を utils に追加して、個別ページの script で annual データセットを取り出せるようにする。",[71,72,77],"pre",{"className":73,"code":74,"language":75,"meta":76,"style":76},"language-ts shiki shiki-themes vitesse-light vitesse-light","// 年次系列を組む純粋関数を1本追加して、\n// 四半期型と年次型を別系列として扱えるようにした\n","ts","",[21,78,79,88],{"__ignoreMap":76},[80,81,84],"span",{"class":82,"line":83},"line",1,[80,85,87],{"class":86},"sxvE3","// 年次系列を組む純粋関数を1本追加して、\n",[80,89,91],{"class":82,"line":90},2,[80,92,93],{"class":86},"// 四半期型と年次型を別系列として扱えるようにした\n",[14,95,96,97,100],{},"ここで判断が要ったのが FY2018〜2020 の粗利だった。手元 memo に推定値はあったが、推定を確定値のフリで載せると後で自分が騙される。確定値のみを表に出し、FY2018〜2020 の粗利は ",[21,98,99],{},"null"," にして「—」表示にした。APIキーが取れたら埋める前提で、空欄は空欄のまま残す。",[26,102,104],{"id":103},"dart-を取りに行くのをやめた判断","DART を取りに行くのをやめた判断",[14,106,107],{},"途中で「DART だからこれって何ですか」という会話があった。DART は韓国の企業決算開示システムで、日本でいう EDINET にあたる。SK Hynix の確定粗利はそこから取れる。",[14,109,110],{},"ただ、外部取得には OpenDART の APIキーが要る。今その場で取りに行くと作業が止まる。手元 memo のデータだけで2社目を立てれば、画面としては今日中に成立する。外部取得は諦め、手元データで進めて、確定に必要なキーの件は進捗メモに「残作業」として書き残した。完璧を待つより、空欄を明示して形にする方を選んだ。",[14,112,113],{},"dev で SK Hynix ページを開くと最初は 2050 バイトしか返らず、ルートだけ 404 だった。HMR が新規ルートを拾っていなかった。dev サーバーをポート指定で再起動すると 23369 バイトで復活し、FY2023 の赤字の谷と FY2024-25 の急回復が両チャートに描かれた。FY2018-2020 の粗利は狙いどおり「—」で並んでいた。",[26,115,117],{"id":116},"過去8四半期の-dram-市場シェアを可視化した","過去8四半期の DRAM 市場シェアを可視化した",[14,119,120],{},"別のタイミングで「過去8四半期分の DRAM シェアの推移を TrendForce から取れるか」という相談が来た。TrendForce のシェアランキングは四半期ごとに同じ「DRAM Supplier Revenue Ranking」を無料公開していて、各リリースが「当四半期＋前四半期」の2四半期分を載せる。つまり3〜4本拾えば 2Q24〜1Q26 の8四半期が全部そろう。",[14,122,123,124,127,128,131],{},"集めた表画像から公表シェアをそのまま採って、",[21,125,126],{},"memory-makers"," 配下に DRAM シェアのページを1枚新設した。シェア折れ線・シェア構成・売上規模の3チャートと2テーブルを並べる。系列が7本に増えたので、",[21,129,130],{},"StackedBarChart"," の凡例を複数行折り返しに対応させた。既存の3系列利用に回帰が出ないことも確認した（viewBox 高さ 390 のまま）。",[14,133,134],{},"1点だけ無視できない断絶があった。TrendForce は 1Q25 から中国勢（CXMT等）をカバーに追加したため、「Others」が 4Q24 の 0.5% から 1Q25 の 4.6% に跳ねている。Big3 のシェアも分母が増えた分だけ薄まる。グラフを見る人がここで誤読しないよう、注記を入れた。",[26,136,138],{"id":137},"trendforce-のシェアは推計値だと裏を取った","TrendForce のシェアは推計値だと裏を取った",[14,140,141],{},"朝のうちに、マイクロンのセグメント利益の数字の裏付けも取っていた。TrendForce の Micron「1Q26 $21,750M」が何の数字なのかを Micron 公式開示で突き合わせる。",[14,143,144],{},"掘ってみると、Micron の開示セグメントは技術別（DRAM/NAND）ではなく市場別（Cloud Memory / Core Data Center / Mobile and Client / Automotive and Embedded）だった。つまり「DRAM の利益」という開示自体が存在しない。DRAM 単独の売上は 10-Q の「技術別売上」テーブルで突き合わせられるが、TrendForce の四半期はカレンダー四半期で、Micron は8月決算なのでズレる。",[14,146,147],{},"結論として、TrendForce の数字は各社の公表値そのままではなく、TrendForce が独自にカレンダー四半期へ組み替えた推計値だと確認できた。ページの注記もこの理解に合わせて「推計値」と明記した。途中で SEC.gov が WebFetch を 403 で弾いてきたが、正しい User-Agent を付けた curl に切り替えたら 10-Q を取れた。",[26,149,150],{"id":150},"終わりに",[14,152,153,154,157],{},"最後にコミットを分けた。メモリーメーカー分と億り人分は性質が違う作業なので、混ぜずに2コミットに切る。ステージ内容を一つずつ確認し、別作業の成果物（",[21,155,156],{},"research_*"," 等）が紛れていないことを確かめてから打った。",[14,159,160],{},"今日の学びは2つ。1つは、データの粒度が違うときに無理やり同じ型へ寄せず、種別を足す方が後で破綻しないということ。もう1つは、外部ソースを取りに行けないときに空欄を「—」で明示して先に形を作れば、APIキーが揃ったあとに埋めるだけで済むということ。推定値で穴を埋めて自分を騙すより、空欄のまま残す方が後の自分に優しい。",[162,163,164],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":76,"searchDepth":90,"depth":90,"links":166},[167,168,169,170,171,172],{"id":28,"depth":90,"text":29},{"id":62,"depth":90,"text":63},{"id":103,"depth":90,"text":104},{"id":116,"depth":90,"text":117},{"id":137,"depth":90,"text":138},{"id":150,"depth":90,"text":150},"dev","サムスン電子とSK Hynixの個別ページを揃えたメモリーメーカー動向ハブを新設。会社ごとに違う決算データの構造をどう吸収したか、過去8四半期のDRAM市場シェアをどう可視化したかを記録する。","md",{},true,"/memory-makers-hub-dram-share","financial-data",false,"2026-06-02T00:00:00.000Z",{"title":5,"description":174},"2026-06/2026-06-02/memory-makers-hub-dram-share",[185,186,187,188,189],"メモリー半導体","DRAM","Nuxt","データ可視化","Vue",null,"0dLQW-HyqhRdCKVmJ5EvbWWU4762ehKt8e4REwpytBM",[],"https://log.eurekapu.com/og/blog/memory-makers-hub-dram-share.png?v=2026-06-02T00%3A00%3A00.000Z&title=%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%BC%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E5%8B%95%E5%90%91%E3%83%8F%E3%83%96%E3%82%92%E6%96%B0%E8%A8%AD%E3%81%97%E3%80%81DRAM%E5%B8%82%E5%A0%B4%E3%82%B7%E3%82%A7%E3%82%A2%E3%81%AE%E6%8E%A8%E7%A7%BB%E3%82%92%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%97%E3%81%9F%E4%B8%80%E6%97%A5&author=Kei%20Komatsu&sig=14f0f44baf39054c",1780560549908]