[{"data":1,"prerenderedAt":579},["ShallowReactive",2],{"content-/2026-06-16-diary":3,"all-pages-for-dir":577,"og-image-/2026-06-16-diary":578},{"id":4,"title":5,"body":6,"category":558,"description":559,"extension":560,"meta":561,"navigation":485,"ogImage":562,"path":563,"project_name":564,"published":565,"publishedAt":566,"seo":567,"stem":568,"tags":569,"todo":562,"unpublished":565,"updatedAt":562,"__hash__":576},"pages/2026-06/2026-06-16/diary-2026-06-16.md","2026年6月16日の開発日記 - Cloudflare の1MB壁とNuxtビルド20分の壁、両方に頭をぶつけた日",{"type":7,"value":8,"toc":540},"minimark",[9,14,18,22,29,32,37,49,55,72,83,86,90,101,105,116,124,126,130,156,160,173,181,183,187,194,198,209,217,219,223,230,234,248,256,258,262,272,285,287,290,425,427,430,469,471,474,506,508,511],[10,11,13],"h1",{"id":12},"_2026年6月16日の開発日記","2026年6月16日の開発日記",[15,16,17],"p",{},"今日は別プロジェクトの「壁」に2つ頭をぶつけた日だった。一つは eurekapu-nuxt4 の Cloudflare Pages Worker bundle 1MB 制限。もう一つは mdx-playground の Nuxt Content v3 でビルド20分という重さ。前者は構成図A/B/C/Dを HTML で書き起こしながら設計判断を整理し、後者は並列化を試して「意味なかった」とドキュメントに残して撤退した。並行して beat-monitoring の scatter に FCF 軸を生やし、本棚（Turso）には会計と税務の本を10冊単位で流し込み、LINE 通知には「最高値比較カード」を足した。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-06/2026-06-16/timeline-2026-06-16.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-cloudflare-pages-の-1mb-worker-bundle-制限に当たって構成図adを書いた","1. Cloudflare Pages の 1MB Worker bundle 制限に当たって構成図A〜Dを書いた",[15,38,39,40,44,45,48],{},"eurekapu-nuxt4 で Cloudflare Pages にデプロイしようとしたら、Worker bundle の ",[41,42,43],"code",{},"index2.mjs"," と ",[41,46,47],{},"[chapter].mjs"," がそれぞれ 1.0 MB で無料枠の上限を踏んだ。$5 払っても 10 MiB にしか増えないと気づいた瞬間、増額ではなく構成自体を見直す方向に切り替わった。プランA（現状維持）／B（hybrid）／C（フロント・バックエンド分離）／D（HTML/JS 直配信・SSGメイン）の比較を HTML で書き起こし、最終的にプランDの方向へ。Phase 1 を Step 0〜Step 4 まで実装してデプロイしたが 404、ロールバックも失敗して Codex に原因の深掘りをさせた。",[15,50,51],{},[52,53,54],"strong",{},"主な成果:",[56,57,58,66,69],"ul",{},[59,60,61,62,65],"li",{},"構成A〜D比較の HTML 解説を ",[41,63,64],{},"memo/2026-06-16/"," に保存",[59,67,68],{},"Phase 1 の Step 0〜4 を実装、デプロイまで実行",[59,70,71],{},"失敗時の原因解析を Codex に投げる指示書を作成",[15,73,74,77,78],{},[52,75,76],{},"詳細:"," ",[79,80,82],"a",{"href":81},"/cloudflare-pages-workers-bundle-architecture","Cloudflare Pages の 1MB Worker bundle 制限に当たって構成図A〜Dを書きながら設計判断を整理した",[84,85],"hr",{},[33,87,89],{"id":88},"_2-nuxt-content-v3-でビルド時間20分の壁に並列化で挑んだが意味なかった","2. Nuxt Content v3 でビルド時間20分の壁に並列化で挑んだが意味なかった",[15,91,92,93,96,97,100],{},"mdx-playground の本番ビルドが20分かかる。タグページ（旧 ",[41,94,95],{},"[tag].vue","）の削除で 13分40秒まで縮んだあと、",[41,98,99],{},"concurrency: 8"," を入れて並列化を試した。結果、むしろ遅くなって撤退。Codex に診させる前に Web で Nitro Issue #1447 を引き当てて、worker_threads が未対応で並列化が効かないと判明。Aプランに戻し、「効かなかった理由」をドキュメントに残した。",[15,102,103],{},[52,104,54],{},[56,106,107,110,113],{},[59,108,109],{},"旧タグページと関連リンクを全削除（13分40秒、32%短縮）",[59,111,112],{},"並列化試行と撤退の経緯をドキュメント化",[59,114,115],{},"Nitro Issue #1447 の根拠を確認",[15,117,118,77,120],{},[52,119,76],{},[79,121,123],{"href":122},"/nuxt-build-time-parallel-investigation","Nuxt Content v3 でビルド時間20分の壁に並列化で挑んだが意味なかった話",[84,125],{},[33,127,129],{"id":128},"_3-beat-monitoring-scatter-に-fcf-基準トグルを追加した前日の積み残し","3. beat-monitoring scatter に FCF 基準トグルを追加した（前日の積み残し）",[15,131,132,135,136,139,140,143,144,147,148,151,152,155],{},[41,133,134],{},"memo/2026-06-15/scatter-fcf-extension-plan.md"," の積み残しを片付けた。朝の点検で ",[41,137,138],{},"BeatValuation"," 型の FCF 4 フィールドが抜けているねじれを発見、",[41,141,142],{},"optional + nullable"," で追補。scatter ページに「指標基準」トグルを足して、Codex のレビューを4ラウンド回しながら最終形へ。Codex の致命的指摘2件（",[41,145,146],{},"pe"," フィールド流用の危険性、ADR の式が逆）を取り込んで ",[41,149,150],{},"5548092d"," / ",[41,153,154],{},"47add3b6"," の2コミットで決着。",[15,157,158],{},[52,159,54],{},[56,161,162,167,170],{},[59,163,164,166],{},[41,165,138],{}," 型に FCF 4 フィールドを追補",[59,168,169],{},"scatter に「指標基準」トグルを実装",[59,171,172],{},"Codex 4 ラウンドで設計の穴を埋め切った",[15,174,175,77,177],{},[52,176,76],{},[79,178,180],{"href":179},"/beat-monitoring-scatter-fcf-toggle","beat-monitoring scatter に FCF 基準トグルを追加して 13 銘柄の割安成長ゾーンを別軸で読む",[84,182],{},[33,184,186],{"id":185},"_4-裁断した実務書を-turso-の本棚に毎日10冊単位で取り込んだ","4. 裁断した実務書を Turso の本棚に毎日10冊単位で取り込んだ",[15,188,189,190,193],{},"book-knowledge-base プロジェクトで、yomitoku で OCR したマークダウンを ",[41,191,192],{},"/restructure-book"," で章節単位に再構築し、Turso にぶち込む流れを「会計分野10冊」「税務分野10冊」と分野別に流した。1バッチ約1時間45分。進捗マークダウンが実態と乖離していたので、朝イチで差分を整理してから流し始めた。SQL は書かないので、後で本棚を引くときは Claude Code に「○○について関連書籍から検索して要約して」と頼む構図。",[15,195,196],{},[52,197,54],{},[56,199,200,203,206],{},[59,201,202],{},"会計分野・税務分野で合計20冊強を Turso に取り込み",[59,204,205],{},"進捗マークダウンを実態に合わせて整理",[59,207,208],{},"/import-batch 運用が分野横断で安定",[15,210,211,77,213],{},[52,212,76],{},[79,214,216],{"href":215},"/book-knowledge-base-import-batch-workflow","裁断した実務書をOCRしてTursoのDBに横串検索できる本棚を毎日10冊単位で増やす",[84,218],{},[33,220,222],{"id":221},"_5-line-のポートフォリオ通知に最高値比較カードを足した","5. LINE のポートフォリオ通知に「最高値比較カード」を足した",[15,224,225,226,229],{},"personal-notification-bots を見直して、LINE Flex Message の Bubble にバーチャートで7日／30日／90日の総額推移を描こうとした。300px幅では差がほぼ消えるので諦め、代わりに「最高値（過去のピーク）からの差分を％と日付で出す」カードに切替。履歴は Google スプレッドシートで管理しているので、そこから純粋関数 ",[41,227,228],{},"peakByPersonBefore"," で最大値を引いてカードに流し込む。Windows のタスクスケジューラの定期実行時刻も実値に合わせ直した。",[15,231,232],{},[52,233,54],{},[56,235,236,239,245],{},[59,237,238],{},"Bubble カードに最高値比較カード（4資産分）を追加",[59,240,241,242,244],{},"純粋関数 ",[41,243,228],{}," で履歴から最大値を抽出",[59,246,247],{},"タスクスケジューラの定期実行設定を実値に合わせ直し",[15,249,250,77,252],{},[52,251,76],{},[79,253,255],{"href":254},"/line-portfolio-max-value-card","LINE Flex Message の Bubble カードに『最高値比較』を足してポートフォリオの天井からの落差を毎日通知する",[84,257],{},[33,259,261],{"id":260},"_6-bofa-の2030年メモリー900b予測を積み上げ棒チャートで読み解いた","6. BofA の「2030年メモリー$900B」予測を積み上げ棒チャートで読み解いた",[15,263,264,265,271],{},"Xで流れてきた BofA の長期半導体予測（2030年に半導体市場",[41,266,270],{"className":267},[268,269],"language-math","math-inline","1.96T、うちメモリ","900B）を積み上げ棒チャートにして、各期間の CAGR を点線で区切って妥当性を眺めた。SVG で描画して、メモリの構成比率を右軸で重ねた。",[15,273,274,77,276],{},[52,275,76],{},[79,277,279,280,284],{"href":278},"/bofa-semi-forecast-2030-memory-stacked","BofA「半導体市場は2030年に",[41,281,283],{"className":282},[268,269],"1.96T、うちメモリだけで","900B」予測を積み上げ棒で読む — 妥当性チェック",[84,286],{},[19,288,289],{"id":289},"今日の試行錯誤",[291,292,293,315],"table",{},[294,295,296],"thead",{},[297,298,299,303,306,309,312],"tr",{},[300,301,302],"th",{},"#",[300,304,305],{},"テーマ",[300,307,308],{},"試したこと",[300,310,311],{},"結果",[300,313,314],{},"気づき",[316,317,318,336,355,372,389,406],"tbody",{},[297,319,320,324,327,330,333],{},[321,322,323],"td",{},"1",[321,325,326],{},"Nuxt ビルド20分",[321,328,329],{},"タグページ削除",[321,331,332],{},"成功（20分→13分40秒、32%減）",[321,334,335],{},"不要ルートの削除は確実に効く",[297,337,338,341,344,349,352],{},[321,339,340],{},"2",[321,342,343],{},"Nuxt ビルド",[321,345,346,348],{},[41,347,99],{}," で並列化",[321,350,351],{},"失敗（逆に遅くなった）",[321,353,354],{},"Nitro Issue #1447 で worker_threads 未対応と判明",[297,356,357,360,363,366,369],{},[321,358,359],{},"3",[321,361,362],{},"LINE Bubble にバーチャート",[321,364,365],{},"SVG をカードに埋め込む",[321,367,368],{},"失敗（300px幅で差が消える）",[321,370,371],{},"最高値比較カードに切替",[297,373,374,377,380,383,386],{},[321,375,376],{},"4",[321,378,379],{},"Cloudflare Pages のデプロイ",[321,381,382],{},"Phase 1 Step 0〜4 完走",[321,384,385],{},"404、ロールバックも失敗",[321,387,388],{},"Codex に原因解析を投げて翌日へ持ち越し",[297,390,391,394,397,400,403],{},[321,392,393],{},"5",[321,395,396],{},"BeatValuation 型",[321,398,399],{},"朝の点検で FCF フィールド欠落を発見",[321,401,402],{},"成功（型補完→テスト pass）",[321,404,405],{},"データだけ入って型が抜けるパターンは目視で拾うしかない",[297,407,408,411,414,417,420],{},[321,409,410],{},"6",[321,412,413],{},"Codex の scatter レビュー",[321,415,416],{},"4 ラウンド回した",[321,418,419],{},"致命指摘2件、軽微指摘多数",[321,421,422,424],{},[41,423,146],{}," フィールド流用の罠を未然に防げた",[84,426],{},[19,428,429],{"id":429},"今日の学び",[56,431,432,438,448,454,463],{},[59,433,434,437],{},[52,435,436],{},"増額ではなく構成変更で逃げる",": Cloudflare Pages の Worker bundle は $5 払っても 10 MiB。1MBで詰まったら有料化ではなくアーキテクチャを書き直すほうが筋がいい。",[59,439,440,443,444,447],{},[52,441,442],{},"並列化は前提条件を確認してから手をつける",": Nitro が worker_threads 未対応なら ",[41,445,446],{},"concurrency"," を上げても無意味。試す前に Issue を引くべきだった。",[59,449,450,453],{},[52,451,452],{},"HTML メモは設計判断に向く",": 構成図を SVG で挟みながら長文を書くなら、Markdown より HTML の方が見やすい。",[59,455,456,459,460,462],{},[52,457,458],{},"データだけ追加して型を放置すると朝に気づく",": 前日 Phase 4 で valuation データ4列を入れたのに ",[41,461,138],{}," 型を更新し忘れていた。朝の点検で発見できなければ scatter のプロットが壊れていた。",[59,464,465,468],{},[52,466,467],{},"Bubble カードに棒グラフは入らない",": LINE Flex の幅制約（300px弱）で、複数本の棒を比較するチャートは差が見えない。1スカラーの値+日付の方が伝わる。",[84,470],{},[19,472,473],{"id":473},"明日やること",[56,475,478,488,494,500],{"className":476},[477],"contains-task-list",[59,479,482,487],{"className":480},[481],"task-list-item",[483,484],"input",{"disabled":485,"type":486},true,"checkbox"," Cloudflare Pages の 404 原因を Codex の診断結果から特定して Phase 1 を完走",[59,489,491,493],{"className":490},[481],[483,492],{"disabled":485,"type":486}," beat-monitoring scatter の FCF 軸でユーザー検証の反応をチェック",[59,495,497,499],{"className":496},[481],[483,498],{"disabled":485,"type":486}," 本棚への取り込みを「資産運用」「ファイナンス」あたりの分野で継続",[59,501,503,505],{"className":502},[481],[483,504],{"disabled":485,"type":486}," LINE 最高値比較カードのテスト運用結果を翌朝確認",[84,507],{},[19,509,510],{"id":510},"関連記事",[56,512,513,517,521,525,529,533],{},[59,514,515],{},[79,516,82],{"href":81},[59,518,519],{},[79,520,123],{"href":122},[59,522,523],{},[79,524,180],{"href":179},[59,526,527],{},[79,528,216],{"href":215},[59,530,531],{},[79,532,255],{"href":254},[59,534,535],{},[79,536,279,537,284],{"href":278},[41,538,283],{"className":539},[268,269],{"title":541,"searchDepth":542,"depth":542,"links":543},"",2,[544,545,554,555,556,557],{"id":21,"depth":542,"text":21},{"id":31,"depth":542,"text":31,"children":546},[547,549,550,551,552,553],{"id":35,"depth":548,"text":36},3,{"id":88,"depth":548,"text":89},{"id":128,"depth":548,"text":129},{"id":185,"depth":548,"text":186},{"id":221,"depth":548,"text":222},{"id":260,"depth":548,"text":261},{"id":289,"depth":542,"text":289},{"id":429,"depth":542,"text":429},{"id":473,"depth":542,"text":473},{"id":510,"depth":542,"text":510},"diary","Cloudflare Pages の Worker bundle 1MB制限と Nuxt の20分ビルドにそれぞれ別プロジェクトで衝突した日。Aプランで撤退してドキュメントに残し、本棚は10冊単位で取り込み続け、scatter は FCF 軸を生やして完了させた。","md",{},null,"/2026-06-16-diary","daily-log",false,"2026-06-16T00:00:00.000Z",{"title":5,"description":559},"2026-06/2026-06-16/diary-2026-06-16",[570,571,572,573,574,575],"日記","Cloudflare Pages","Nuxt","Turso","LINE","beat-monitoring","POjMDsdKU78ENLbzXT3-Yv-rP3r4hhVnrhuUMFpcwcY",[],"https://log.eurekapu.com/og/blog/2026-06-16-diary.png?v=2026-06-16T00%3A00%3A00.000Z&title=2026%E5%B9%B46%E6%9C%8816%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20Cloudflare%20%E3%81%AE1MB%E5%A3%81%E3%81%A8Nuxt%E3%83%93%E3%83%AB%E3%83%8920%E5%88%86%E3%81%AE%E5%A3%81%E3%80%81%E4%B8%A1%E6%96%B9%E3%81%AB%E9%A0%AD%E3%82%92%E3%81%B6%E3%81%A4%E3%81%91%E3%81%9F%E6%97%A5&author=Kei%20Komatsu&sig=97fc67990bc444f4",1782176328790]