[{"data":1,"prerenderedAt":617},["ShallowReactive",2],{"content-/cloud-capex-chart-and-pure-functions":3,"all-pages-for-dir":598,"related-/cloud-capex-chart-and-pure-functions":599,"og-image-/cloud-capex-chart-and-pure-functions":616},{"id":4,"title":5,"body":6,"category":577,"concepts":578,"description":579,"extension":580,"meta":581,"navigation":262,"ogImage":578,"path":582,"project_name":583,"published":584,"publishedAt":585,"seo":586,"stem":587,"tags":588,"todo":578,"unpublished":584,"updatedAt":578,"__hash__":597},"pages/2026-07/2026-07-31/cloud-capex-chart-and-pure-functions.md","決算コメントの「3年未満で回収」を原文で検算し、クラウド設備投資チャートと純粋関数に落とすまで",{"type":7,"value":8,"toc":565},"minimark",[9,13,17,20,23,28,31,34,37,43,51,54,57,60,63,66,69,72,76,79,82,100,104,107,110,113,116,119,122,125,128,142,145,148,151,154,157,160,167,326,336,339,342,345,349,352,355,358,361,368,486,489,492,495,498,501,504,543,546,561],[10,11,5],"h1",{"id":12},"決算コメントの3年未満で回収を原文で検算しクラウド設備投資チャートと純粋関数に落とすまで",[14,15,16],"p",{},"設備投資金は平均3年未満で回収される。",[14,18,19],{},"Amazonの決算説明会の要約として、この1行が回ってきた。\n2026年の設備投資見通しは約2200億ドルある。\nそれが3年弱で戻ってくるなら、いまキャッシュフローが沈んでいるのは通過点にすぎない、という話になる。",[14,21,22],{},"原文に当たらせたら、主語が違った。",[24,25,27],"h2",{"id":26},"_3年未満がかかっている範囲","「3年未満」がかかっている範囲",[14,29,30],{},"回ってきた要約は5点あった。\n決算説明会の発言、決算リリース、SECに出した10-Kを引いてきてもらい、1点ずつ突き合わせた。",[14,32,33],{},"4点は発言に沿っていた。\nずれていたのは、いちばん強く読める1点目の範囲である。",[14,35,36],{},"原文はこうだった。",[38,39,40],"blockquote",{},[14,41,42],{},"For servers and networking equipment, on average, it takes a little less than three years to break even on that investment.",[14,44,45,46,50],{},"3年弱で回収されるのは",[47,48,49],"strong",{},"サーバーとネットワーク機器","で、設備投資の全体ではない。\nデータセンター本体については、同じ説明のなかで別の周期が語られている。\nサーバーを挿して収益化を始める2年前から資金が出ていき、その後は30年以上使う。\n建屋と機器で周期が違う以上、2200億ドルを3年で回収する話として読むと、発言より広い範囲を指すことになる。",[14,52,53],{},"5点目の「設備寿命を延ばせば同じサーバーでより多くの収益を上げられる」も、その言い方はしていなかった。\n会計上の耐用年数はむしろ逆に動いていて、2024年に5年から6年へ延ばした翌年、一部を6年から5年へ戻している。",[14,55,56],{},"2つの資本サイクルが分かれていることが判定の中心なので、そこはSVGで図にしてもらった。\n最初に出てきた図では建屋と機器の期間の差が伝わらなかったので、その一点だけ描き直させた。",[24,58,59],{"id":59},"引用の英文はどこまで入っているか",[14,61,62],{},"判定の表と本文はできたが、引用として英文を出しているか気になって確かめさせた。",[14,64,65],{},"①から④には入っていて、⑤にだけ入っていなかった。",[14,67,68],{},"範囲がずれていると指摘する記事なのに、いちばん重い項目にだけ原文が付いていないことになる。\nそこは補わせた。",[14,70,71],{},"表示確認では、ブラウザ拡張の側が繋がらなくなった。\nPlaywrightに切り替えて描画を見た。\nこの日はバックグラウンドで起こしたdevサーバーが何度も止まり、そのたびにポートを変えて立て直した。",[24,73,75],{"id":74},"_1ドルで4年間で5ドルが自分の記事から出てこない","「1ドルで4年間で5ドル」が自分の記事から出てこない",[14,77,78],{},"読んでいるうちに、これと組になる発言を過去に扱った覚えが出てきた。\n顧客はインフラに1ドル支出するごとに、4年間で5ドルのレンタル収入を得る。\n売る側であるNVIDIAの説明で、テクノロジー会議での発言として報道された数字である（一次資料では確認できていない）。",[14,80,81],{},"自分の記事から引こうとして、取れなかった。",[14,83,84,88,89,92,93,92,96,99],{},[85,86,87],"code",{},"apps/web/content"," の全文を、日本語表記（「1ドル」「5ドル」「レンタル収入」「4年間で」「投資回収」）と英語表記（",[85,90,91],{},"for every $1","、",[85,94,95],{},"rental revenue",[85,97,98],{},"$5","）の両方で探させた。\nヒットしたのはこの日書いている記事だけで、扱った覚えのほうが間違いだった。",[24,101,103],{"id":102},"_4年で5倍と3年弱で回収は矛盾するか","「4年で5倍」と「3年弱で回収」は矛盾するか",[14,105,106],{},"売り手が「4年で5倍」と言い、買い手が「3年弱で回収」と言う。\n期間が違うので最初は矛盾して見えた。",[14,108,109],{},"測っているものが違う。\n5ドルのほうは顧客が受け取る売上で、3年弱のほうは投じた資金が戻るまでの期間である。\n売上からは電力費も運用費もデータセンターの費用も引かれるので、4年で5倍の売上が立っていても、機器代の回収に3年弱かかることはありうる。",[14,111,112],{},"数字を並べると噛み合う。\n4年で5倍なら、年あたりの売上は投資額の1.25倍にあたる。\n3年で3.75倍の売上が立つので、そのうち27%が手元に残れば機器代を返し終わる。\nAWSはQ2 2026に売上422億ドルに対して営業利益166億ドルで、利益率は39%である。\nしかもこれは減価償却費を引いたあとの数字だから、機器代の回収を測るなら手残りの割合はもっと高い。",[14,114,115],{},"この噛み合いは文章だけだと追いにくいので、svg-diagramのスキルで図にしてもらった。\n1ドルの支出、3年分の累計売上3.75ドル、必要な手残り27%と実績の39%、と3段で追う構成にした。\n最初の版では3年の塊と4年目の区別が弱く、どこまでが回収期間なのか読めなかったので、そこだけ直させた。",[14,117,118],{},"なお、この2つは独立した証拠ではない。\n売り手と買い手は同じ取引の当事者で、どちらも投資が続くことで利益を得る立場にある。\nそこは記事にも書いておいた。",[24,120,121],{"id":121},"推敲スキルを当てていなかった",[14,123,124],{},"書き上がった段階で、7月30日に足した文章スキルを当てているか聞いた。",[14,126,127],{},"当てていなかった。",[14,129,130,133,134,137,138,141],{},[85,131,132],{},"japanese-tech-writing"," と ",[85,135,136],{},"cognitive-rhythm-writing"," が該当するのに、読み込まずに書いていた。\nその場で両方を当てて推敲し、最後に ",[85,139,140],{},"honda-sakubun"," で5箇所直させた。\nスキルは足しただけでは動かない。",[24,143,144],{"id":144},"午後は3社分を一次情報から集めた",[14,146,147],{},"今度はSNSから別の数字が回ってきた。\nAWSが年換算で約1,690億ドルの前年比37%増、Azureが約1,240億ドルの43%増、Google Cloudが約990億ドルの82%増、という3つの数字だった。",[14,149,150],{},"一次情報の取得は素直に進まなかった。\nWebFetchがドメイン検証で通らず、curl経由に切り替えた。\n決算リリースの表はpandocに通すと落ちるので、Pythonで直接抜き出す形にした。\nAlphabetの分を取ってから、残り11本のファイリングをEDGARからまとめて引いてきてもらった。",[14,152,153],{},"結果として、AWSとGoogle Cloudの数字は決算リリースの金額をそのまま4倍したもので、検算すれば合う。\nAzureの1,240億ドルだけは会社が出していない。\nMicrosoftが公表したのは成長率43%と「通期でAzureの売上が初めて1,000億ドルを超えた」という一文で、四半期の実額は開示していない。\nそこで分析にはIntelligent Cloudセグメントを使った。",[24,155,156],{"id":156},"予測モデルを純粋関数に切り出す",[14,158,159],{},"直近8四半期の売上と営業利益、会社全体の設備投資と営業キャッシュフローが揃ったので、フリーキャッシュフローがいつプラスに戻るかを試算するモデルを作らせた。",[14,161,162,163,166],{},"計算はコンポーネントに書かず、",[85,164,165],{},"app/utils/cloudFcfProjection.ts"," に純粋関数として置いた。",[168,169,174],"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-ts shiki shiki-themes vitesse-light vitesse-light","export const project = (\n  base: ProjectionBase,\n  a: ProjectionAssumption,\n  years: number,\n): ProjectionYear[]\n\nexport const sustainedPositiveYear = (\n  rows: ProjectionYear[],\n  pick: (r: ProjectionYear) => number,\n): number | null\n","ts","",[85,175,176,200,217,230,243,257,264,278,291,314],{"__ignoreMap":173},[177,178,181,185,189,193,197],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sHkkW","export",[177,186,188],{"class":187},"stQ0i"," const ",[177,190,192],{"class":191},"senZ8","project",[177,194,196],{"class":195},"shFtX"," =",[177,198,199],{"class":195}," (\n",[177,201,203,207,210,214],{"class":179,"line":202},2,[177,204,206],{"class":205},"s4oTP","  base",[177,208,209],{"class":195},": ",[177,211,213],{"class":212},"sSkh3","ProjectionBase",[177,215,216],{"class":195},",\n",[177,218,220,223,225,228],{"class":179,"line":219},3,[177,221,222],{"class":205},"  a",[177,224,209],{"class":195},[177,226,227],{"class":212},"ProjectionAssumption",[177,229,216],{"class":195},[177,231,233,236,238,241],{"class":179,"line":232},4,[177,234,235],{"class":205},"  years",[177,237,209],{"class":195},[177,239,240],{"class":212},"number",[177,242,216],{"class":195},[177,244,246,249,251,254],{"class":179,"line":245},5,[177,247,248],{"class":195},")",[177,250,209],{"class":187},[177,252,253],{"class":205},"ProjectionYear",[177,255,256],{"class":195},"[]\n",[177,258,260],{"class":179,"line":259},6,[177,261,263],{"emptyLinePlaceholder":262},true,"\n",[177,265,267,269,271,274,276],{"class":179,"line":266},7,[177,268,184],{"class":183},[177,270,188],{"class":187},[177,272,273],{"class":191},"sustainedPositiveYear",[177,275,196],{"class":195},[177,277,199],{"class":195},[177,279,281,284,286,288],{"class":179,"line":280},8,[177,282,283],{"class":205},"  rows",[177,285,209],{"class":195},[177,287,253],{"class":212},[177,289,290],{"class":195},"[],\n",[177,292,294,297,300,303,305,307,310,312],{"class":179,"line":293},9,[177,295,296],{"class":191},"  pick",[177,298,299],{"class":195},": (",[177,301,302],{"class":205},"r",[177,304,209],{"class":195},[177,306,253],{"class":212},[177,308,309],{"class":195},") => ",[177,311,240],{"class":212},[177,313,216],{"class":195},[177,315,317,319,321,323],{"class":179,"line":316},10,[177,318,248],{"class":195},[177,320,209],{"class":187},[177,322,240],{"class":205},[177,324,325],{"class":187}," | null\n",[14,327,328,329,332,333,335],{},"一度プラスに顔を出した年ではなく、そこから戻らない年を答えにしたかったので、",[85,330,331],{},"crossoverYear"," とは別に ",[85,334,273],{}," を置いた。",[14,337,338],{},"前提は2回作り直した。",[14,340,341],{},"最初はクラウド売上の初年成長率に直近四半期の前年同期比を使ったが、Google Cloudの82%を年ベースの起点に掛けると数字が発散したので、起点と同じ年間ベースの成長率に直した。\n次に、起点そのものを直近12か月から2025年の通年に変えた。\n各社の設備投資見通しは暦年で語られるので、通年に揃えると前提とガイダンスが直接つながる。\n2024年の通年も追加で取りにいってもらった。",[14,343,344],{},"試算では、Amazonのフリーキャッシュフローがプラスに戻るのは2029年になった。\nMicrosoftとAlphabetは試算期間を通して一度も割らない。\n面白かったのは感度で、転換年はクラウドの成長率を動かしてもほとんど変わらず、設備投資の伸びがいつ止まると仮定するかで大きく動いた。",[24,346,348],{"id":347},"数値ラベルの重なりと半端な軸目盛り","数値ラベルの重なりと、半端な軸目盛り",[14,350,351],{},"チャートは実績用と予測用の2本を作らせた。\n実績側は3社比較と1社ずつのコンボ表示を切り替えられるようにして、数値はスマートフォンで効かないホバーに隠さず、図の中に直接置いた。",[14,353,354],{},"手こずったのは数値ラベルの配置だった。",[14,356,357],{},"最初は各点の値の順位で上下に振り分けさせたが、順位が近い点どうしは結局重なる。\n順位をやめて、直上のラベルとの距離を見る衝突検出に変えた。\n今度は逃がした先が別の系列の点に重なった。\n上がだめなら点の下へ落とす、という形に落ち着いた。",[14,359,360],{},"軸目盛りも半端だった。\n値の最大最小をそのまま使うと 11.8 / 23.6 / 35.5 のような刻みになる。\n1、2、2.5、5、10 の刻みに丸めてから軸を張り、正負をまたぐ図で基準になる0は必ず目盛りに含めることにした。",[14,362,363,364,367],{},"この2つは ",[85,365,366],{},"app/utils/chartAxis.ts"," にまとめた。",[168,369,371],{"className":170,"code":370,"language":172,"meta":173,"style":173},"export const niceAxis = (values: number[], tickCount = 4): NiceAxis\n\nexport const placeLabels = (\n  pointYs: number[],\n  lift = 12,\n  drop = 19,\n  minGap = 14,\n): number[]\n",[85,372,373,412,416,429,440,452,464,476],{"__ignoreMap":173},[177,374,375,377,379,382,384,387,390,392,394,397,400,402,406,409],{"class":179,"line":180},[177,376,184],{"class":183},[177,378,188],{"class":187},[177,380,381],{"class":191},"niceAxis",[177,383,196],{"class":195},[177,385,386],{"class":195}," (",[177,388,389],{"class":205},"values",[177,391,209],{"class":195},[177,393,240],{"class":212},[177,395,396],{"class":195},"[],",[177,398,399],{"class":205}," tickCount",[177,401,196],{"class":195},[177,403,405],{"class":404},"sM54T"," 4",[177,407,408],{"class":195},"):",[177,410,411],{"class":212}," NiceAxis\n",[177,413,414],{"class":179,"line":202},[177,415,263],{"emptyLinePlaceholder":262},[177,417,418,420,422,425,427],{"class":179,"line":219},[177,419,184],{"class":183},[177,421,188],{"class":187},[177,423,424],{"class":191},"placeLabels",[177,426,196],{"class":195},[177,428,199],{"class":195},[177,430,431,434,436,438],{"class":179,"line":232},[177,432,433],{"class":205},"  pointYs",[177,435,209],{"class":195},[177,437,240],{"class":212},[177,439,290],{"class":195},[177,441,442,445,447,450],{"class":179,"line":245},[177,443,444],{"class":205},"  lift",[177,446,196],{"class":195},[177,448,449],{"class":404}," 12",[177,451,216],{"class":195},[177,453,454,457,459,462],{"class":179,"line":259},[177,455,456],{"class":205},"  drop",[177,458,196],{"class":195},[177,460,461],{"class":404}," 19",[177,463,216],{"class":195},[177,465,466,469,471,474],{"class":179,"line":266},[177,467,468],{"class":205},"  minGap",[177,470,196],{"class":195},[177,472,473],{"class":404}," 14",[177,475,216],{"class":195},[177,477,478,480,482,484],{"class":179,"line":280},[177,479,248],{"class":195},[177,481,209],{"class":187},[177,483,240],{"class":205},[177,485,256],{"class":195},[14,487,488],{},"残りは目で見て潰した。\nコンボ表示で右端がはみ出す、下端のラベルが軸と重なる、売上のラベルが設備投資の線のラベルとぶつかる。\n最後のものは、棒の内側に置くことで解いた。\nスライダーの動きとモバイル表示も見た。",[24,490,491],{"id":491},"テストが全部通ったあとに残っていたずれ",[14,493,494],{},"予測モデルのテストが26件通り、リポジトリ全体では19,376件が通った。",[14,496,497],{},"そのあと、記事に書いた数値をモデルの出力と小数まで突き合わせさせた。\n記事の予測値が、起点を2025年通年に変える前の数字のまま残っていた。",[14,499,500],{},"前提を作り直したのは実装側だけで、本文はその前に書いていた。\nテストが全部通っていても、本文の数字までは守ってくれない。",[24,502,503],{"id":503},"今日の残り",[505,506,509,519,525,531,537],"ul",{"className":507},[508],"contains-task-list",[510,511,514,518],"li",{"className":512},[513],"task-list-item",[515,516],"input",{"checked":262,"disabled":262,"type":517},"checkbox"," 決算説明会の5点を原文と10-Kで突き合わせて記事化",[510,520,522,524],{"className":521},[513],[515,523],{"checked":262,"disabled":262,"type":517}," 「1ドルで4年で5ドル」との検算を追記し、SVGで図解",[510,526,528,530],{"className":527},[513],[515,529],{"checked":262,"disabled":262,"type":517}," クラウド3社の実績チャートと予測チャートを実装",[510,532,534,536],{"className":533},[513],[515,535],{"checked":262,"disabled":262,"type":517}," 軸目盛りとキャッシュフロー予測を純粋関数に切り出してテスト",[510,538,540,542],{"className":539},[513],[515,541],{"disabled":262,"type":517}," 耐用年数の見積りが次にどちらへ動くかを、次の10-Kで確認する",[14,544,545],{},"公開した記事は2本になった。",[505,547,548,555],{},[510,549,550],{},[551,552,554],"a",{"href":553},"/amazon-q2-2026-capex-payback-factcheck","Amazonの「設備投資は3年未満で回収」を原文で確認した",[510,556,557],{},[551,558,560],{"href":559},"/cloud-capex-fcf-breakeven-2026","クラウド3社の設備投資とフリーキャッシュフロー",[562,563,564],"style",{},"html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}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 .sSkh3, html code.shiki .sSkh3{--shiki-default:#2E8F82;--shiki-dark:#2E8F82}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 .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}",{"title":173,"searchDepth":202,"depth":202,"links":566},[567,568,569,570,571,572,573,574,575,576],{"id":26,"depth":202,"text":27},{"id":59,"depth":202,"text":59},{"id":74,"depth":202,"text":75},{"id":102,"depth":202,"text":103},{"id":121,"depth":202,"text":121},{"id":144,"depth":202,"text":144},{"id":156,"depth":202,"text":156},{"id":347,"depth":202,"text":348},{"id":491,"depth":202,"text":491},{"id":503,"depth":202,"text":503},"dev",null,"決算説明会で出た「設備投資は平均3年未満で回収される」という要約を原文まで遡って確かめ、「1ドルの支出で4年間で5ドルの収入」という別の発言と突き合わせて検算した。噛み合う理由をSVGで図にし、クラウド3社の設備投資チャート2本と、軸目盛りとキャッシュフロー予測の純粋関数をテスト付きで切り出した一日の記録。","md",{},"/cloud-capex-chart-and-pure-functions","mdx-playground",false,"2026-07-31T00:00:00.000Z",{"title":5,"description":579},"2026-07/2026-07-31/cloud-capex-chart-and-pure-functions",[589,590,591,592,593,594,595,596],"日記","決算","ファクトチェック","設備投資","Vue","SVG","純粋関数","Vitest","IXFRBqMISDGrvo6yU4fosx41KsxI9_vMRdDvLL_zZNo",[],[600,602,604,608,612],{"title":601,"path":553,"publishedAt":585},"Amazonの「設備投資は3年未満で回収」を原文で確認した｜3年未満はサーバーとネットワーク機器に限った話で、データセンターは別勘定",{"title":603,"path":559,"publishedAt":585},"クラウド3社の設備投資とフリーキャッシュフロー｜AWS・Azure・Google Cloudの数字を検証し、黒字に戻る年を試算した",{"title":605,"path":606,"publishedAt":607},"2026年7月1日の開発日記 - つくみ通しスライド、MU財務チャート、SVGスキル拡張","/2026-07-01-diary","2026-07-01T00:00:00.000Z",{"title":609,"path":610,"publishedAt":611},"2026年5月21日の開発日記 - NVDA決算3部作・アナレンマ・物件購入シミュレーター・Tampermonkey予約自動化","/2026-05-21-diary","2026-05-21T00:00:00.000Z",{"title":613,"path":614,"publishedAt":615},"2026年4月29日の開発日記 - 蔵書841冊タグ付け／ScrollArticle共通化／GIF→SVGアニメ","/2026-04-29-diary","2026-04-29T00:00:00.000Z","https://log.eurekapu.com/og/blog/cloud-capex-chart-and-pure-functions.png?v=2026-07-31T00%3A00%3A00.000Z&title=%E6%B1%BA%E7%AE%97%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%80%8C3%E5%B9%B4%E6%9C%AA%E6%BA%80%E3%81%A7%E5%9B%9E%E5%8F%8E%E3%80%8D%E3%82%92%E5%8E%9F%E6%96%87%E3%81%A7%E6%A4%9C%E7%AE%97%E3%81%97%E3%80%81%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E8%A8%AD%E5%82%99%E6%8A%95%E8%B3%87%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%81%A8%E7%B4%94%E7%B2%8B%E9%96%A2%E6%95%B0%E3%81%AB%E8%90%BD%E3%81%A8%E3%81%99%E3%81%BE%E3%81%A7&author=Kei%20Komatsu&sig=6293f4a3c984f7e6",1785552636681]