[{"data":1,"prerenderedAt":546},["ShallowReactive",2],{"content-/2026-04-08-diary":3,"all-pages-for-dir":544,"og-image-/2026-04-08-diary":545},{"id":4,"title":5,"body":6,"category":526,"description":527,"extension":528,"meta":529,"navigation":459,"path":530,"project_name":531,"published":532,"publishedAt":533,"seo":534,"stem":535,"tags":536,"todo":542,"updatedAt":542,"__hash__":543},"pages/2026-04/2026-04-08/diary-2026-04-08.md","2026年4月8日の開発日記 - Excel講座110セクション大移行とプライベートサイト分離",{"type":7,"value":8,"toc":511},"minimark",[9,14,18,22,27,30,33,36,42,61,72,75,79,94,98,117,125,127,131,142,146,166,174,176,180,195,203,205,208,418,420,423,443,445,448,488,490,493],[10,11,13],"h1",{"id":12},"_2026年4月8日の開発日記","2026年4月8日の開発日記",[15,16,17],"p",{},"朝5時からeurekapu-nuxt4のExcel講座移行に取りかかり、日が暮れる頃にはExcel講座60ファイル・110セクションの移行、CF精算表ワークシートの完全移植、Cloudflare Accessの限界に突き当たってプライベートサイトを別プロジェクトに切り出す判断まで、一気に駆け抜けた一日だった。",[19,20,21],"h2",{"id":21},"今日やったこと",[23,24,26],"h3",{"id":25},"_1-excel講座の大規模移行とui改善eurekapu-nuxt4","1. Excel講座の大規模移行とUI改善（eurekapu-nuxt4）",[15,28,29],{},"朝一番にCF精算表ワークシートの移植から着手。Piniaストア接続が通り、593件のテスト全パスを確認してからExcel講座本体の移行に突入した。60ファイル・110セクションをサブエージェント並列で変換し、Phase 0（メディアアセット）からPhase 7（検証）まで一気に完了。",[15,31,32],{},"TheaterViewerに4つの大きな改善を入れた: inlineTopicsモード（アコーディオン式トピック列統合）、stageHtml（概要テーブル+クリック遷移）、SyntaxCard（関数構文表示）、VideoSubtitlePlayer（字幕同期プレイヤー）。",[15,34,35],{},"UIバグも5件潰した。セクション戻りナビゲーションバグ、コンテンツ幅のmax-width、テキスト-画像間の空白、スクロール余白、プレースホルダー画像の誤配置。",[15,37,38],{},[39,40,41],"strong",{},"主な成果:",[43,44,45,49,52,55,58],"ul",{},[46,47,48],"li",{},"CF精算表ワークシート完全移植（29ファイル、8,622行追加、593テスト全パス）",[46,50,51],{},"Excel講座60ファイル・110セクション移行完了",[46,53,54],{},"TheaterViewer 4機能追加",[46,56,57],{},"演習ページ35件の移行計画策定",[46,59,60],{},"WordPress CDN動画の生存確認（curl日本語URLエンコーディング問題で404に見えたが実際は200 OK）",[15,62,63,66,67],{},[39,64,65],{},"詳細:"," ",[68,69,71],"a",{"href":70},"/eurekapu-excel-course-migration","Excel講座60ファイル・110セクションをNuxt4に移植した一日の全記録",[73,74],"hr",{},[23,76,78],{"id":77},"_2-cloudflare-accessとプライベートサイト分離mdx-playground","2. Cloudflare Accessとプライベートサイト分離（mdx-playground）",[15,80,81,85,86,89,90,93],{},[82,83,84],"code",{},"/private","以下にCloudflare Accessをかけたが、SSG + SPA遷移でアクセス制御をバイパスされる問題が発覚。ミドルウェアでフルページリロードを挟んだが、プリレンダリングされたHTMLにコンテンツが平文で含まれている以上、根本解決にならない。結局",[82,87,88],{},"apps/private","として別プロジェクトに分離し、",[82,91,92],{},"private.eurekapu.com","にデプロイした。",[15,95,96],{},[39,97,41],{},[43,99,100,103,108,114],{},[46,101,102],{},"SSGのセキュリティ特性を理解（プリレンダリング = 平文HTML公開）",[46,104,105,107],{},[82,106,88],{},"ミニマルNuxtアプリ構築（コンポーネント共有）",[46,109,110,113],{},[82,111,112],{},"private-eurekapu"," Cloudflare Pagesプロジェクト作成・デプロイ",[46,115,116],{},"トップページに鍵アイコン（opacity 0.4）で控えめな導線追加",[15,118,119,66,121],{},[39,120,65],{},[68,122,124],{"href":123},"/cloudflare-access-private-site","Cloudflare AccessとSSGの相性問題から別プロジェクト分離に至るまで",[73,126],{},[23,128,130],{"id":129},"_3-autohotkey-excel全ウィンドウ一括配置misc-dev","3. AutoHotkey Excel全ウィンドウ一括配置（misc-dev）",[15,132,133,134,137,138,141],{},"ウルトラワイドモニターで散らばるExcelウィンドウを、Stream Deckのボタン一発でモニター中央（1920x1080）に揃えるスクリプトを作成。バッチのhere-string問題、1プロセス複数ウィンドウの壁、",[82,135,136],{},"EnumWindows"," + XLMAINクラス列挙、",[82,139,140],{},"SW_SHOWNORMAL","によるリサイズ対応と、4段階の試行錯誤を経て完成。",[15,143,144],{},[39,145,41],{},[43,147,148,158,163],{},[46,149,150,153,154,157],{},[82,151,152],{},"excel-center.bat"," + ",[82,155,156],{},"excel-center.ps1"," 作成",[46,159,160,162],{},[82,161,136],{},"で全Excelウィンドウ（8個）を一括配置",[46,164,165],{},"Stream Deckから即実行可能",[15,167,168,66,170],{},[39,169,65],{},[68,171,173],{"href":172},"/autohotkey-excel-window-manager","Excel全ウィンドウをウルトラワイドモニター中央に一括配置するStream Deck用スクリプト",[73,175],{},[23,177,179],{"id":178},"_4-excel-viewerのhyperformulaエラー修正mdx-playground","4. Excel ViewerのHyperFormulaエラー修正（mdx-playground）",[15,181,182,183,186,187,190,191,194],{},"Excel ViewerでSheetJS + HyperFormulaの数式再計算が",[82,184,185],{},"#LIC!","エラーになる問題。",[82,188,189],{},"licenseKey: 'gpl-v3'","の明示指定で解消。配列数式（INDEX/MATCH等）が",[82,192,193],{},"#VALUE!","になるHyperFormulaの制約も確認。",[15,196,197,66,199],{},[39,198,65],{},[68,200,202],{"href":201},"/excel-viewer-hyperformula-errors","Excel Viewer: HyperFormulaで#LIC!と#VALUE!エラーが出る原因と対処",[73,204],{},[19,206,207],{"id":207},"今日の試行錯誤",[209,210,211,233],"table",{},[212,213,214],"thead",{},[215,216,217,221,224,227,230],"tr",{},[218,219,220],"th",{},"#",[218,222,223],{},"テーマ",[218,225,226],{},"試したこと",[218,228,229],{},"結果",[218,231,232],{},"気づき",[234,235,236,264,295,312,332,349,371,398],"tbody",{},[215,237,238,242,245,251,258],{},[239,240,241],"td",{},"1",[239,243,244],{},"セクション戻りバグ",[239,246,247,250],{},[82,248,249],{},"navigateToMajor","の遷移先を確認",[239,252,253,254,257],{},"常に",[82,255,256],{},"?ci=0","（先頭）に飛んでいた",[239,259,260,263],{},[82,261,262],{},"?last=1","パラメータで最後のスライドに飛ばす対応",[215,265,266,269,272,278,281],{},[239,267,268],{},"2",[239,270,271],{},"テキスト-画像間空白",[239,273,274,277],{},[82,275,276],{},"min-height: auto","に変更",[239,279,280],{},"解消せず",[239,282,283,286,287,290,291,294],{},[82,284,285],{},".theater","自体が",[82,288,289],{},"flex: 1","で全体を埋めていた。",[82,292,293],{},"flex: 0 1 auto","で解決",[215,296,297,300,303,306,309],{},[239,298,299],{},"3",[239,301,302],{},"プレースホルダー画像",[239,304,305],{},"旧ファイルと突き合わせ",[239,307,308],{},"旧ファイルにはテキストのみ、画像なし",[239,310,311],{},"AI移行時にExcel演習スクリーンショットを無関係なセクションに配置していた",[215,313,314,317,320,326,329],{},[239,315,316],{},"4",[239,318,319],{},"WordPress CDN 404",[239,321,322,325],{},[82,323,324],{},"curl","で動画URLを叩いた",[239,327,328],{},"404が返った",[239,330,331],{},"日本語URLのエンコーディング問題。英語パスやURLエンコード済みパスは200 OK",[215,333,334,337,340,343,346],{},[239,335,336],{},"5",[239,338,339],{},"SSGセキュリティ",[239,341,342],{},"ミドルウェアでフルリロード",[239,344,345],{},"SPA遷移は防げた",[239,347,348],{},"HTMLソース表示でコンテンツが丸見え。プリレンダリング=平文公開",[215,350,351,354,357,362,365],{},[239,352,353],{},"6",[239,355,356],{},"wranglerデプロイ失敗",[239,358,359],{},[82,360,361],{},"wrangler pages deploy dist",[239,363,364],{},"プロジェクト未作成エラー",[239,366,367,370],{},[82,368,369],{},"wrangler pages project create","が先に必要",[215,372,373,376,379,382,385],{},[239,374,375],{},"7",[239,377,378],{},"production branch不一致",[239,380,381],{},"デプロイがPreview環境に",[239,383,384],{},"本番URLで表示されない",[239,386,387,390,391,394,395,294],{},[82,388,389],{},"--production-branch main","だが実際は",[82,392,393],{},"master","。",[82,396,397],{},"--branch=main",[215,399,400,403,406,412,415],{},[239,401,402],{},"8",[239,404,405],{},"Codex使用制限",[239,407,408,411],{},[82,409,410],{},"codex exec","実行",[239,413,414],{},"レートリミットエラー",[239,416,417],{},"ChatGPT Plusサブスク期限切れが原因。更新で復活",[73,419],{},[19,421,422],{"id":422},"今日の学び",[43,424,425,428,437,440],{},[46,426,427],{},"SSGサイトでアクセス制御が必要なコンテンツは、同一プロジェクト内のルーティングで分けるのではなく、プロジェクトごと分離するのが最も確実",[46,429,430,432,433,436],{},[82,431,289],{},"が意図しない余白を生むパターン。レイアウトデバッグではまず",[82,434,435],{},"flex","の成長係数を疑う",[46,438,439],{},"AI（サブエージェント）にデータ変換を任せると、手元にある画像を「とりあえず入れておく」挙動をする。旧ファイルとの突き合わせ検証は必須",[46,441,442],{},"WordPress CDNのcurl確認で404が返っても、日本語URLエンコーディングの問題を疑う。ブラウザでは正常に表示される場合がある",[73,444],{},[19,446,447],{"id":447},"明日やること",[43,449,452,466,476,482],{"className":450},[451],"contains-task-list",[46,453,456,461,462,465],{"className":454},[455],"task-list-item",[457,458],"input",{"disabled":459,"type":460},true,"checkbox"," Excel講座: ",[82,463,464],{},"millerExcelFunctions.ts","のプレースホルダー画像を旧ファイルと突き合わせ修正",[46,467,469,471,472,475],{"className":468},[455],[457,470],{"disabled":459,"type":460}," Excel講座: 演習ページ35件の移行実装（",[82,473,474],{},"memo/2026-04-08/excel-exercises-migration-plan.md","）",[46,477,479,481],{"className":478},[455],[457,480],{"disabled":459,"type":460}," Excel講座: SyntaxCardコンポーネントの全セクション適用確認",[46,483,485,487],{"className":484},[455],[457,486],{"disabled":459,"type":460}," Codex: 復活したCodexでExcel講座移行計画を再レビュー",[73,489],{},[19,491,492],{"id":492},"関連記事",[43,494,495,499,503,507],{},[46,496,497],{},[68,498,71],{"href":70},[46,500,501],{},[68,502,124],{"href":123},[46,504,505],{},[68,506,173],{"href":172},[46,508,509],{},[68,510,202],{"href":201},{"title":512,"searchDepth":513,"depth":513,"links":514},"",2,[515,522,523,524,525],{"id":21,"depth":513,"text":21,"children":516},[517,519,520,521],{"id":25,"depth":518,"text":26},3,{"id":77,"depth":518,"text":78},{"id":129,"depth":518,"text":130},{"id":178,"depth":518,"text":179},{"id":207,"depth":513,"text":207},{"id":422,"depth":513,"text":422},{"id":447,"depth":513,"text":447},{"id":492,"depth":513,"text":492},"diary","eurekapu-nuxt4へのExcel講座60ファイル・110セクション移行、CF精算表ワークシート移植、Cloudflare Accessの限界に気づいてプライベートサイトを別プロジェクトに分離、AutoHotkeyでExcel一括配置スクリプト作成","md",{},"/2026-04-08-diary","daily-log",false,"2026-04-08T00:00:00.000Z",{"title":5,"description":527},"2026-04/2026-04-08/diary-2026-04-08",[537,538,539,540,541],"日記","eurekapu-nuxt4","Excel講座","Cloudflare Access","AutoHotkey",null,"MmVo5iG9C8cCpIglrwGwY0jGu8FwXqmAvxgL90pyaH8",[],"https://log.eurekapu.com/favicon.svg",1775680421388]