[{"data":1,"prerenderedAt":1355},["ShallowReactive",2],{"content-/economist-korea-dram-chart-replication":3,"all-pages-for-dir":1353,"og-image-/economist-korea-dram-chart-replication":1354},{"id":4,"title":5,"body":6,"category":1331,"description":1332,"extension":1333,"meta":1334,"navigation":1335,"ogImage":1336,"path":1337,"project_name":1338,"published":1339,"publishedAt":1340,"seo":1341,"stem":1342,"tags":1343,"todo":1336,"unpublished":1339,"updatedAt":1336,"__hash__":1352},"pages/2026-05/2026-05-12/economist-korea-dram-chart-replication.md","Economistの韓国DRAMチャートを再現しようとした話：HS10桁まで掘ったが数字は完全一致しなかった",{"type":7,"value":8,"toc":1316},"minimark",[9,14,26,34,41,46,49,62,91,106,109,154,166,173,176,180,183,194,204,211,215,218,246,253,257,268,374,383,387,398,413,416,419,423,441,444,458,461,468,472,478,678,681,684,688,691,697,779,787,794,798,801,813,816,848,854,866,870,873,908,911,914,917,931,934,947,950,957,1013,1019,1297,1300,1307,1312],[10,11,13],"h1",{"id":12},"economistの韓国dramチャートを再現しようとした話","Economistの韓国DRAMチャートを再現しようとした話",[15,16,17,18,25],"p",{},"The Economist の Graphic detail（May 15th 2025）に「Korean DRAM prices hit another record high」というチャートがあった。Surging demand for AI memory drives 18% jump in just ten days というサブタイトルで、韓国の DRAM 輸出単価（",[19,20,24],"code",{"className":21},[22,23],"language-math","math-inline"," per kg, 月次）が 2020-05〜2025-05 でほぼ水平に推移していたものが、2025年に入って急騰し、2025年5月に **","64,000/kg** に達したという内容。出所は Korea Customs Service と書いてあった。",[15,27,28,29,33],{},"このチャートを Vue ページとして自分のサイトに作りたい。元データを取りに行ってみたら、想定の3倍くらい紆余曲折があった上に、",[30,31,32],"strong",{},"最後まで Economist の数字とは完全一致できなかった","。その経緯をそのまま残しておく。",[15,35,36,37],{},"完成したチャートはこちら → ",[38,39,40],"a",{"href":40},"/blog/korea-dram-export-prices",[42,43,45],"h2",{"id":44},"出発点un-comtrade-public-api","出発点：UN Comtrade Public API",[15,47,48],{},"最初は UN Comtrade の Public API を試した。理由は3つ：",[50,51,52,56,59],"ul",{},[53,54,55],"li",{},"API キー無しで叩ける",[53,57,58],{},"HS コード単位（6桁）で月次データが世界中の国について取れる",[53,60,61],{},"韓国の reporterCode = 410、DRAM の HS6桁 = 854232 で一発",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-bash shiki shiki-themes vitesse-light vitesse-light","curl \"https://comtradeapi.un.org/public/v1/preview/C/M/HS?reporterCode=410&period=202405&cmdCode=854232&flowCode=X&partnerCode=0&maxRecords=10\"\n","bash","",[19,70,71],{"__ignoreMap":68},[72,73,76,80,84,88],"span",{"class":74,"line":75},"line",1,[72,77,79],{"class":78},"senZ8","curl",[72,81,83],{"class":82},"sMJiu"," \"",[72,85,87],{"class":86},"sdGka","https://comtradeapi.un.org/public/v1/preview/C/M/HS?reporterCode=410&period=202405&cmdCode=854232&flowCode=X&partnerCode=0&maxRecords=10",[72,89,90],{"class":82},"\"\n",[15,92,93,94,97,98,101,102,105],{},"これで月次の ",[19,95,96],{},"primaryValue","（FOB値、USD）と ",[19,99,100],{},"netWgt","（kg）が返ってくる。",[19,103,104],{},"unitPriceUsdPerKg = primaryValue / netWgt"," で単価計算。2020-01〜2024-12 の60ヶ月をまとめて取れた。",[15,107,108],{},"ところが、計算結果を見て手が止まった。",[110,111,112,128],"table",{},[113,114,115],"thead",{},[116,117,118,122,125],"tr",{},[119,120,121],"th",{},"月",[119,123,124],{},"UN Comtrade 単価",[119,126,127],{},"Economist グラフ",[129,130,131,143],"tbody",{},[116,132,133,137,140],{},[134,135,136],"td",{},"2020-05",[134,138,139],{},"$22,964/kg",[134,141,142],{},"だいたい $10,000",[116,144,145,148,151],{},[134,146,147],{},"2024-05",[134,149,150],{},"$22,109/kg",[134,152,153],{},"だいたい $20,000",[15,155,156,157,161,162,165],{},"2024-05 はだいたい合うが、2020-05 で ",[19,158,160],{"className":159},[22,23],"5,000〜","10,000 ベースラインがズレる。",[30,163,164],{},"HS 6桁（854232 = memory IC）には DRAM 以外（SRAM、フラッシュ、ロジック付き memory 等）が混入しているせい","だと判明。Economist は Korea Customs Service の HS10桁 で「DRAM だけ」を抜いている。",[15,167,168,169,172],{},"そして決定的な問題：UN Comtrade は ",[30,170,171],{},"2025年のデータがまだ未収載","（2026-05時点でも）。Economist の記事の主役である 2025年1〜5月の急騰区間が空白。つまり最重要な数字が取れない。",[15,174,175],{},"UN Comtrade ルートはここで打ち切り。",[42,177,179],{"id":178},"kita-k-stat-への移行","KITA k-stat への移行",[15,181,182],{},"韓国側の公式ソースに行くしかない。候補：",[50,184,185,188,191],{},[53,186,187],{},"韓国関税庁 unipass（公式）",[53,189,190],{},"KOSIS（韓国統計庁）",[53,192,193],{},"KITA k-stat（韓国貿易協会、無料アクセス可）",[15,195,196,199,200,203],{},[19,197,198],{},"WebFetch"," で unipass と KOSIS は接続失敗（タイムアウト）。SSL証明書周りか相手側のbot対策と思われる。残った k-stat も WebFetch では仕様取得まで。",[30,201,202],{},"フォームを自動操作してデータを引き出す必要がある","。",[15,205,206,207,210],{},"ここで ",[19,208,209],{},"agent-browser"," スキル（CLAUDE.mdに書いてある WebFetch の正規フォールバック）を起動した。",[42,212,214],{"id":213},"agent-browser-chrome-devtools-mcp","agent-browser + Chrome DevTools MCP",[15,216,217],{},"戦術はこう決めた：",[219,220,221,228,235],"ol",{},[53,222,223,224,227],{},"ユーザーのChromeを ",[19,225,226],{},"--remote-debugging-port=9223"," で起動済みにする",[53,229,230,231,234],{},"agent-browser を ",[19,232,233],{},"--cdp 9223"," で繋ぐ（これでログイン状態を流用）",[53,236,237,238,241,242,245],{},"ページ操作とデータ抽出は ",[30,239,240],{},"Chrome DevTools MCP"," の ",[19,243,244],{},"evaluate_script"," 経由で JavaScript を直接走らせる",[15,247,248,249,252],{},"agent-browser は CDP接続にトラブルがあった（auto-connectが効かないなど）が、Chrome DevTools MCP の方は port 9223 経由で安定して動いた。",[30,250,251],{},"結局 agent-browser は接続トリガーとして使い、データ抽出は Chrome DevTools MCP に集約","する形に落ち着いた。",[42,254,256],{"id":255},"k-stat-の構造を読み解く","k-stat の構造を読み解く",[15,258,259,260,263,264,267],{},"k-stat の品목수출입ページ（",[19,261,262],{},"/stat/kts/pum/ItemImpExpList.screen","）に到達。HS単位を「10단위(10桁)」、시작코드を ",[19,265,266],{},"854232"," で絞ると、HS10桁の細分が見えた：",[110,269,270,283],{},[113,271,272],{},[116,273,274,277,280],{},[119,275,276],{},"HSコード",[119,278,279],{},"品목명（韓）",[119,281,282],{},"意味",[129,284,285,302,313,324,335,346,357],{},[116,286,287,292,297],{},[134,288,289],{},[30,290,291],{},"8542321010",[134,293,294],{},[30,295,296],{},"디램",[134,298,299],{},[30,300,301],{},"DRAM 単体（chip）",[116,303,304,307,310],{},[134,305,306],{},"8542321020",[134,308,309],{},"에스램",[134,311,312],{},"SRAM",[116,314,315,318,321],{},[134,316,317],{},"8542321030",[134,319,320],{},"플래시 메모리",[134,322,323],{},"フラッシュメモリ",[116,325,326,329,332],{},[134,327,328],{},"8542321090",[134,330,331],{},"기타",[134,333,334],{},"その他（HBM 単体含む可能性）",[116,336,337,340,343],{},[134,338,339],{},"8542322000",[134,341,342],{},"하이브리드 집적회로",[134,344,345],{},"Hybrid IC",[116,347,348,351,354],{},[134,349,350],{},"8542323000",[134,352,353],{},"복합구조집 집적회로",[134,355,356],{},"Multi-structure IC",[116,358,359,364,369],{},[134,360,361],{},[30,362,363],{},"8542324000",[134,365,366],{},[30,367,368],{},"복합부품 집적회로(MCOs)",[134,370,371],{},[30,372,373],{},"Multi-Component IC（HBM 等のメモリモジュール）",[15,375,376,377,379,380,382],{},"「DRAM」と一口に言っても10桁レベルでは ",[19,378,291],{}," と ",[19,381,363],{},"（MCOs = HBM のような複合パッケージ）に分かれている。Economist の \"Korean DRAM (including modules)\" の \"modules\" が何を指すかが、ここで疑問になる。",[42,384,386],{"id":385},"itemimpexplistscreen-の制約","ItemImpExpList.screen の制約",[15,388,389,390,393,394,397],{},"このページで月次時系列を取りたかったが、UI 上は ",[30,391,392],{},"「特定月 vs 前年同月」"," の比較しか出ない。",[19,395,396],{},"s_year=2025, s_month=05"," で「2024-05 と 2025-05 の対比表」が返るだけで、12ヶ月分の月次推移は出ない。",[15,399,400,401,404,405,408,409,412],{},"しかも8542321010 のセルをクリックしても詳細ポップアップが開かない。表は IBSheet という商用の JavaScript グリッドで、",[19,402,403],{},"onclick"," ハンドラが TD ではなく内部の overlay 層に登録されているため、",[19,406,407],{},"element.click()"," や ",[19,410,411],{},"dispatchEvent"," で反応しない。",[15,414,415],{},"POST API を直接叩くアプローチも試したが、レスポンスは IBSheet の枠だけで、データ部分は別の Ajax で後から差し込まれる構造。HTML を grep してもデータが出ない。",[15,417,418],{},"ここで詰んだので、別ページを探した。",[42,420,422],{"id":421},"itemlistscreen맞춤분석の発見","ItemList.screen（맞춤분석）の発見",[15,424,425,428,429,432,433,436,437,440],{},[19,426,427],{},"/stat/cstat/peri/item/ItemList.screen","（맞춤분석 / 품목 수출입）に行ったら、UI に ",[30,430,431],{},"「주기（周期）」"," という選択肢があり、",[19,434,435],{},"년도별 / 분기별 / 월별"," を選べる。さらに、시작〜종료で ",[30,438,439],{},"任意期間","を指定できる。",[15,442,443],{},"ただし2つの罠：",[50,445,446,452],{},[53,447,448,451],{},[30,449,450],{},"5年制限",": 종료日 - 시작日 が 5 年を超えると alert",[53,453,454,457],{},[30,455,456],{},"「월별」を選んでも結果は期間集計1行","。例えば「2020-01〜2024-12 で 月別」を指定すると、表は「DRAM 全期間集計（5年合計）」が1行返るだけ。月ごとに分解した行は出ない",[15,459,460],{},"つまり「月次時系列」は直接取れない。",[15,462,463,464,467],{},"抜け道：",[30,465,466],{},"시작 = 종료 = 同じ年同じ月","を指定すれば、その1ヶ月だけの集計が返る。これを75回ループすれば月次時系列になる。",[42,469,471],{"id":470},"_75ヶ月ループ取得","75ヶ月ループ取得",[15,473,474,475,477],{},"実装は Chrome DevTools MCP の ",[19,476,244],{}," で：",[63,479,483],{"className":480,"code":481,"language":482,"meta":68,"style":68},"language-js shiki shiki-themes vitesse-light vitesse-light","const fetchMonth = async (year, month) => {\n  setSel('e_year', String(year));   // 終了年を先に上げる\n  setSel('e_month', month);         // 終了月も上げる\n  setSel('s_year', String(year));   // 開始年を合わせる\n  setSel('s_month', month);         // 開始月を合わせる\n  window.doSearch();\n  await wait(2200);                 // IBSheet 再描画待ち\n  // 8542321010 を含む行から column 5 (수출액) と column 7 (수출중량) を抽出\n};\n","js",[19,484,485,523,556,580,607,630,645,666,672],{"__ignoreMap":68},[72,486,487,491,494,498,501,504,508,511,514,517,520],{"class":74,"line":75},[72,488,490],{"class":489},"stQ0i","const",[72,492,493],{"class":78}," fetchMonth",[72,495,497],{"class":496},"shFtX"," =",[72,499,500],{"class":489}," async",[72,502,503],{"class":496}," (",[72,505,507],{"class":506},"s4oTP","year",[72,509,510],{"class":496},",",[72,512,513],{"class":506}," month",[72,515,516],{"class":496},")",[72,518,519],{"class":496}," =>",[72,521,522],{"class":496}," {\n",[72,524,526,529,532,535,538,540,542,545,547,549,552],{"class":74,"line":525},2,[72,527,528],{"class":78},"  setSel",[72,530,531],{"class":496},"(",[72,533,534],{"class":82},"'",[72,536,537],{"class":86},"e_year",[72,539,534],{"class":82},[72,541,510],{"class":496},[72,543,544],{"class":78}," String",[72,546,531],{"class":496},[72,548,507],{"class":506},[72,550,551],{"class":496},"));",[72,553,555],{"class":554},"sxvE3","   // 終了年を先に上げる\n",[72,557,559,561,563,565,568,570,572,574,577],{"class":74,"line":558},3,[72,560,528],{"class":78},[72,562,531],{"class":496},[72,564,534],{"class":82},[72,566,567],{"class":86},"e_month",[72,569,534],{"class":82},[72,571,510],{"class":496},[72,573,513],{"class":506},[72,575,576],{"class":496},");",[72,578,579],{"class":554},"         // 終了月も上げる\n",[72,581,583,585,587,589,592,594,596,598,600,602,604],{"class":74,"line":582},4,[72,584,528],{"class":78},[72,586,531],{"class":496},[72,588,534],{"class":82},[72,590,591],{"class":86},"s_year",[72,593,534],{"class":82},[72,595,510],{"class":496},[72,597,544],{"class":78},[72,599,531],{"class":496},[72,601,507],{"class":506},[72,603,551],{"class":496},[72,605,606],{"class":554},"   // 開始年を合わせる\n",[72,608,610,612,614,616,619,621,623,625,627],{"class":74,"line":609},5,[72,611,528],{"class":78},[72,613,531],{"class":496},[72,615,534],{"class":82},[72,617,618],{"class":86},"s_month",[72,620,534],{"class":82},[72,622,510],{"class":496},[72,624,513],{"class":506},[72,626,576],{"class":496},[72,628,629],{"class":554},"         // 開始月を合わせる\n",[72,631,633,636,639,642],{"class":74,"line":632},6,[72,634,635],{"class":506},"  window",[72,637,638],{"class":496},".",[72,640,641],{"class":78},"doSearch",[72,643,644],{"class":496},"();\n",[72,646,648,652,655,657,661,663],{"class":74,"line":647},7,[72,649,651],{"class":650},"sHkkW","  await",[72,653,654],{"class":78}," wait",[72,656,531],{"class":496},[72,658,660],{"class":659},"sM54T","2200",[72,662,576],{"class":496},[72,664,665],{"class":554},"                 // IBSheet 再描画待ち\n",[72,667,669],{"class":74,"line":668},8,[72,670,671],{"class":554},"  // 8542321010 を含む行から column 5 (수출액) と column 7 (수출중량) を抽出\n",[72,673,675],{"class":74,"line":674},9,[72,676,677],{"class":496},"};\n",[15,679,680],{},"setSel の順序が重要。月を逆方向（2024→2020）に動かすと、「期間 開始 > 終了」で alert が出て検索が走らない。順方向（2020→2026 順次）かつ「終了を先に上げる→開始を合わせる」という順番だと alert なしで通る。",[15,682,683],{},"それでも年初（1月）への遷移時には別の race condition があって、最初の 1月だけ「累計値」が混入したので、各年の 01 月は別ルート（s_month を 12→01 に下げる別ロジック）で個別取得した。それでも 2021-01 と 2026-01 だけは k-stat 側のキャッシュ挙動か何かで取れず、最終的には前後月から interpolate した。",[42,685,687],{"id":686},"結果dram-単体-mcos-の二系列","結果：DRAM 単体 + MCOs の二系列",[15,689,690],{},"DRAM 単体（HS 8542321010）75ヶ月分と、MCOs（HS 8542324000）39ヶ月分（MCOs は HS 改正前の 2020-2022 期間にコードが存在しないので 2023 年から）を取得。Vue + Chart.js で重ね描き。",[15,692,693,694,203],{},"そこで見えたのは ",[30,695,696],{},"DRAM 単体と MCOs の二極化",[110,698,699,711],{},[113,700,701],{},[116,702,703,705,708],{},[119,704,121],{},[119,706,707],{},"DRAM 単体 ($/kg)",[119,709,710],{},"MCOs / HBM ($/kg)",[129,712,713,724,735,746,757,768],{},[116,714,715,718,721],{},[134,716,717],{},"2024-01",[134,719,720],{},"$10,919",[134,722,723],{},"$36,389",[116,725,726,729,732],{},[134,727,728],{},"2024-12",[134,730,731],{},"$15,463",[134,733,734],{},"$39,644",[116,736,737,740,743],{},[134,738,739],{},"2025-05",[134,741,742],{},"$14,021",[134,744,745],{},"$36,184",[116,747,748,751,754],{},[134,749,750],{},"2025-12",[134,752,753],{},"$23,725",[134,755,756],{},"$54,011",[116,758,759,762,765],{},[134,760,761],{},"2026-02",[134,763,764],{},"$48,170",[134,766,767],{},"$87,512",[116,769,770,773,776],{},[134,771,772],{},"2026-03",[134,774,775],{},"$55,143",[134,777,778],{},"$64,673",[15,780,781,782,786],{},"DRAM 単体は 2024 年通年 ",[19,783,785],{"className":784},[22,23],"10〜25k 帯で淡々と推移。MCOs（HBM等のメモリモジュール）は 2024 年初から ","36k と既にDRAMの3倍水準で、2025-06 から急上昇、2026-02 にピーク $87k。",[15,788,789,790,793],{},"Economist が言っていた「DRAM (including modules)」の \"modules\" は、この ",[30,791,792],{},"MCOs (8542324000) のこと","だと推定が立つ。AI サーバー需要で HBM が高騰している話を、Economist は HS10桁の DRAM single と modules を合算して、あるいは modules 中心に語っていた。",[42,795,797],{"id":796},"️-economist-の数字との比較完全一致はしなかった","⚠️ Economist の数字との比較：完全一致はしなかった",[15,799,800],{},"ここが本記事の核心。",[15,802,803,804,807,808,812],{},"Economist の元グラフでは ",[30,805,806],{},"2025年5月","で **",[19,809,811],{"className":810},[22,23],"64,000/kg** に達したと書いてある（\"reaching a record high of ","64,000 per kg\" \"+18% in just ten days\"）。",[15,814,815],{},"ところが、私が k-stat から取得した同月のデータはこれ：",[110,817,818,828],{},[113,819,820],{},[116,821,822,825],{},[119,823,824],{},"系列",[119,826,827],{},"2025-05 単価",[129,829,830,838],{},[116,831,832,835],{},[134,833,834],{},"DRAM 単体（HS 8542321010）",[134,836,837],{},"$14,021/kg",[116,839,840,843],{},[134,841,842],{},"MCOs / HBM（HS 8542324000）",[134,844,845],{},[30,846,847],{},"$36,184/kg",[15,849,850,851,203],{},"MCOs ですら Economist の半分強。",[30,852,853],{},"Economist の $64,000/kg を 2025-05 のデータで再現できていない",[15,855,856,857,861,862,865],{},"私のチャートで ",[19,858,860],{"className":859},[22,23],"64,673/kg が出るのは **2026-03 の MCOs**。これは Economist の数字「","64k」と数値だけ偶然似ているが、",[30,863,864],{},"時期が1年近くズレている","。「再現できた」と言うのは正しくない。",[42,867,869],{"id":868},"なぜ-economist-の数字に届かないか4つの仮説","なぜ Economist の数字に届かないか：4つの仮説",[15,871,872],{},"完全には特定できていないが、考えられる理由：",[219,874,875,886,896,902],{},[53,876,877,880,881,885],{},[30,878,879],{},"旬報（10日値）のスパイク",": Economist の \"+18% in just 10 days, May 1-10 vs April 1-30\" は明らかに10日値の話。Korea Customs Service は10日ごとに「잠정」値を出している。月平均にならすと低くなる。私が取った月集計の MCOs ",[19,882,884],{"className":883},[22,23],"36k と「10日スパイク ","64k」はそもそも比較対象が違う",[53,887,888,891,892,895],{},[30,889,890],{},"別のHS10桁細分",": もしかすると Economist は ",[19,893,894],{},"8542321090 기타","（その他DRAM、HBM単体がここに分類されている可能性）を使っている。今回未取得",[53,897,898,901],{},[30,899,900],{},"特定相手国向け集計",": Korea から世界全体ではなく、米国向けや特定相手国に絞ると単価が変わる。AI サーバー向けは米国比率が高いので、そこだけ抜くと高くなる",[53,903,904,907],{},[30,905,906],{},"数量単位の違い",": kg ではなく Unit（個数）基準で計算した可能性。HS10桁データには「수량」列があり、私は kg 列を使ったが Economist は別かもしれない",[15,909,910],{},"仮説1（旬報スパイク）が一番ありそう。記事の文章 \"+18% in just ten days\" がそれを示唆している。",[42,912,913],{"id":913},"残った謎と次にやること",[15,915,916],{},"この記事の段階で確定していること：",[50,918,919,922,925,928],{},[53,920,921],{},"✅ HS10桁の DRAM single（8542321010）と MCOs（8542324000）を 2020-2026 で月次取得できた",[53,923,924],{},"✅ Economist の \"DRAM (including modules)\" の \"modules\" は MCOs（HBM 等）に相当しそう",[53,926,927],{},"✅ MCOs の急上昇は 2025-06 以降で、AI サーバー × HBM 需要の話と整合",[53,929,930],{},"❌ Economist 公開の \"$64,000/kg in May 2025\" を月次データで再現できていない",[15,932,933],{},"次に試したいこと：",[50,935,936,941,944],{},[53,937,938,940],{},[19,939,894],{}," の月次取得（HBM 単体がここに入っていれば $64k に近づくかも）",[53,942,943],{},"KITA k-stat の「旬보」（10日値）UI を探す（あれば Economist の数字に直接アクセスできる）",[53,945,946],{},"米国向けに絞った輸出データ（k-stat の「국가별」タブ、ただし会員社限定機能の m マーク付き）",[42,948,949],{"id":949},"副産物として記録した工程",[15,951,952,953,956],{},"データ取得そのものより、",[30,954,955],{},"Korea Customs Service / KITA k-stat の構造を読み解く工程","の方がワークとしては大きかった。同じ作業を再現したい人向けに、コアな手順をメモ：",[219,958,959,968,974,983,989,995,1001,1007],{},[53,960,961,967],{},[30,962,963,964,966],{},"Chrome を ",[19,965,226],{}," で起動","しておく",[53,969,970,973],{},[30,971,972],{},"agent-browser で k-stat にアクセス","（ログイン状態を流用するため）",[53,975,976,979,980,982],{},[30,977,978],{},"Chrome DevTools MCP に切り替え","て ",[19,981,244],{}," でフォーム操作と DOM 抽出",[53,984,985,986,988],{},"ページは ",[19,987,427],{}," を使う（월별 + 同月単発で月次データが取れる）",[53,990,991,994],{},[30,992,993],{},"setSel の順序",": 終了月 → 開始月の順で更新。月を逆方向に動かさない",[53,996,997,1000],{},[30,998,999],{},"年初(1月)は別ルート",": s_month を 12→01 に下げてから e_month を 01 にする",[53,1002,1003,1006],{},[30,1004,1005],{},"alert は handle_dialog で都度 accept","。データは alert 発生前に DOM に乗るので拾える",[53,1008,1009,1012],{},[30,1010,1011],{},"75ヶ月 × 2系列 ≈ 200リクエスト","。バッチサイズ12ヶ月で各バッチ約30秒、合計15分",[15,1014,1015,1018],{},[19,1016,1017],{},"fetchMonth"," の最終形：",[63,1020,1022],{"className":480,"code":1021,"language":482,"meta":68,"style":68},"const fetchMonth = async (year, month) => {\n  if (month === '01') {\n    setSel('e_year', String(year));\n    setSel('s_year', String(year));\n    setSel('s_month', '01');\n    setSel('e_month', '01');\n  } else {\n    setSel('e_year', String(year));\n    setSel('e_month', month);\n    setSel('s_year', String(year));\n    setSel('s_month', month);\n  }\n  window.doSearch();\n  await wait(2200);\n  // DOMから 8542321010 行を抽出して amt と wgt を取得\n};\n",[19,1023,1024,1048,1073,1097,1119,1142,1164,1174,1196,1214,1237,1256,1262,1273,1286,1292],{"__ignoreMap":68},[72,1025,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046],{"class":74,"line":75},[72,1027,490],{"class":489},[72,1029,493],{"class":78},[72,1031,497],{"class":496},[72,1033,500],{"class":489},[72,1035,503],{"class":496},[72,1037,507],{"class":506},[72,1039,510],{"class":496},[72,1041,513],{"class":506},[72,1043,516],{"class":496},[72,1045,519],{"class":496},[72,1047,522],{"class":496},[72,1049,1050,1053,1055,1058,1061,1064,1067,1069,1071],{"class":74,"line":525},[72,1051,1052],{"class":650},"  if",[72,1054,503],{"class":496},[72,1056,1057],{"class":506},"month",[72,1059,1060],{"class":489}," ===",[72,1062,1063],{"class":82}," '",[72,1065,1066],{"class":86},"01",[72,1068,534],{"class":82},[72,1070,516],{"class":496},[72,1072,522],{"class":496},[72,1074,1075,1078,1080,1082,1084,1086,1088,1090,1092,1094],{"class":74,"line":558},[72,1076,1077],{"class":78},"    setSel",[72,1079,531],{"class":496},[72,1081,534],{"class":82},[72,1083,537],{"class":86},[72,1085,534],{"class":82},[72,1087,510],{"class":496},[72,1089,544],{"class":78},[72,1091,531],{"class":496},[72,1093,507],{"class":506},[72,1095,1096],{"class":496},"));\n",[72,1098,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117],{"class":74,"line":582},[72,1100,1077],{"class":78},[72,1102,531],{"class":496},[72,1104,534],{"class":82},[72,1106,591],{"class":86},[72,1108,534],{"class":82},[72,1110,510],{"class":496},[72,1112,544],{"class":78},[72,1114,531],{"class":496},[72,1116,507],{"class":506},[72,1118,1096],{"class":496},[72,1120,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139],{"class":74,"line":609},[72,1122,1077],{"class":78},[72,1124,531],{"class":496},[72,1126,534],{"class":82},[72,1128,618],{"class":86},[72,1130,534],{"class":82},[72,1132,510],{"class":496},[72,1134,1063],{"class":82},[72,1136,1066],{"class":86},[72,1138,534],{"class":82},[72,1140,1141],{"class":496},");\n",[72,1143,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162],{"class":74,"line":632},[72,1145,1077],{"class":78},[72,1147,531],{"class":496},[72,1149,534],{"class":82},[72,1151,567],{"class":86},[72,1153,534],{"class":82},[72,1155,510],{"class":496},[72,1157,1063],{"class":82},[72,1159,1066],{"class":86},[72,1161,534],{"class":82},[72,1163,1141],{"class":496},[72,1165,1166,1169,1172],{"class":74,"line":647},[72,1167,1168],{"class":496},"  }",[72,1170,1171],{"class":650}," else",[72,1173,522],{"class":496},[72,1175,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194],{"class":74,"line":668},[72,1177,1077],{"class":78},[72,1179,531],{"class":496},[72,1181,534],{"class":82},[72,1183,537],{"class":86},[72,1185,534],{"class":82},[72,1187,510],{"class":496},[72,1189,544],{"class":78},[72,1191,531],{"class":496},[72,1193,507],{"class":506},[72,1195,1096],{"class":496},[72,1197,1198,1200,1202,1204,1206,1208,1210,1212],{"class":74,"line":674},[72,1199,1077],{"class":78},[72,1201,531],{"class":496},[72,1203,534],{"class":82},[72,1205,567],{"class":86},[72,1207,534],{"class":82},[72,1209,510],{"class":496},[72,1211,513],{"class":506},[72,1213,1141],{"class":496},[72,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235],{"class":74,"line":1216},10,[72,1218,1077],{"class":78},[72,1220,531],{"class":496},[72,1222,534],{"class":82},[72,1224,591],{"class":86},[72,1226,534],{"class":82},[72,1228,510],{"class":496},[72,1230,544],{"class":78},[72,1232,531],{"class":496},[72,1234,507],{"class":506},[72,1236,1096],{"class":496},[72,1238,1240,1242,1244,1246,1248,1250,1252,1254],{"class":74,"line":1239},11,[72,1241,1077],{"class":78},[72,1243,531],{"class":496},[72,1245,534],{"class":82},[72,1247,618],{"class":86},[72,1249,534],{"class":82},[72,1251,510],{"class":496},[72,1253,513],{"class":506},[72,1255,1141],{"class":496},[72,1257,1259],{"class":74,"line":1258},12,[72,1260,1261],{"class":496},"  }\n",[72,1263,1265,1267,1269,1271],{"class":74,"line":1264},13,[72,1266,635],{"class":506},[72,1268,638],{"class":496},[72,1270,641],{"class":78},[72,1272,644],{"class":496},[72,1274,1276,1278,1280,1282,1284],{"class":74,"line":1275},14,[72,1277,651],{"class":650},[72,1279,654],{"class":78},[72,1281,531],{"class":496},[72,1283,660],{"class":659},[72,1285,1141],{"class":496},[72,1287,1289],{"class":74,"line":1288},15,[72,1290,1291],{"class":554},"  // DOMから 8542321010 行を抽出して amt と wgt を取得\n",[72,1293,1295],{"class":74,"line":1294},16,[72,1296,677],{"class":496},[42,1298,1299],{"id":1299},"まとめ",[15,1301,1302,1303,1306],{},"The Economist のチャートを ",[30,1304,1305],{},"完全再現はできなかった","。でも、HS10桁まで掘ったおかげで「DRAM single（chip）と DRAM modules（HBM）は別物で、AI需要の急騰は modules 側で起きている」という構造は見えた。Economist が \"including modules\" と書いた一言の重みが、HS code の細分まで掘って初めてわかった。",[15,1308,1309,1310],{},"データは公開チャートで確認できる → ",[38,1311,40],{"href":40},[1313,1314,1315],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}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);}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}",{"title":68,"searchDepth":525,"depth":525,"links":1317},[1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330],{"id":44,"depth":525,"text":45},{"id":178,"depth":525,"text":179},{"id":213,"depth":525,"text":214},{"id":255,"depth":525,"text":256},{"id":385,"depth":525,"text":386},{"id":421,"depth":525,"text":422},{"id":470,"depth":525,"text":471},{"id":686,"depth":525,"text":687},{"id":796,"depth":525,"text":797},{"id":868,"depth":525,"text":869},{"id":913,"depth":525,"text":913},{"id":949,"depth":525,"text":949},{"id":1299,"depth":525,"text":1299},"dev","The Economist (May 15th 2025) の韓国DRAM輸出単価チャートを Korea Customs Service / KITA k-stat の HS10桁データから再現する試み。UN Comtradeでベースラインがズレた経緯、agent-browserで k-stat にアクセスして75ヶ月×2系列を取得した手順、そしてDRAM単体ではなく MCOs (HBM modules) が真犯人だった発見と、それでも Economist の数字とは完全一致しなかった残った謎をまとめる。","md",{},true,null,"/economist-korea-dram-chart-replication","mdx-playground",false,"2026-05-12T00:00:00.000Z",{"title":5,"description":1332},"2026-05/2026-05-12/economist-korea-dram-chart-replication",[1344,1345,1346,1347,1348,1349,209,240,1350,1351],"DRAM","HBM","Korea","Economist","k-stat","Chart.js","UN Comtrade","HS code","1_hZdN2SUcLxvPxkqTWYIUgSRZ5U3iLhVyCIj2JuA6w",[],"https://log.eurekapu.com/og/blog/economist-korea-dram-chart-replication.png?v=2026-05-12T00%3A00%3A00.000Z&title=Economist%E3%81%AE%E9%9F%93%E5%9B%BDDRAM%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%82%92%E5%86%8D%E7%8F%BE%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E8%A9%B1%EF%BC%9AHS10%E6%A1%81%E3%81%BE%E3%81%A7%E6%8E%98%E3%81%A3%E3%81%9F%E3%81%8C%E6%95%B0%E5%AD%97%E3%81%AF%E5%AE%8C%E5%85%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F&author=Kei%20Komatsu&sig=3812971bf1f4e143",1782528835696]