2026年4月8日の開発日記
朝5時からeurekapu-nuxt4のExcel講座移行に取りかかり、日が暮れる頃にはExcel講座60ファイル・110セクションの移行、CF精算表ワークシートの完全移植、Cloudflare Accessの限界に突き当たってプライベートサイトを別プロジェクトに切り出す判断まで、一気に駆け抜けた一日だった。
今日やったこと
1. Excel講座の大規模移行とUI改善(eurekapu-nuxt4)
朝一番にCF精算表ワークシートの移植から着手。Piniaストア接続が通り、593件のテスト全パスを確認してからExcel講座本体の移行に突入した。60ファイル・110セクションをサブエージェント並列で変換し、Phase 0(メディアアセット)からPhase 7(検証)まで一気に完了。
TheaterViewerに4つの大きな改善を入れた: inlineTopicsモード(アコーディオン式トピック列統合)、stageHtml(概要テーブル+クリック遷移)、SyntaxCard(関数構文表示)、VideoSubtitlePlayer(字幕同期プレイヤー)。
UIバグも5件潰した。セクション戻りナビゲーションバグ、コンテンツ幅のmax-width、テキスト-画像間の空白、スクロール余白、プレースホルダー画像の誤配置。
主な成果:
- CF精算表ワークシート完全移植(29ファイル、8,622行追加、593テスト全パス)
- Excel講座60ファイル・110セクション移行完了
- TheaterViewer 4機能追加
- 演習ページ35件の移行計画策定
- WordPress CDN動画の生存確認(curl日本語URLエンコーディング問題で404に見えたが実際は200 OK)
詳細: Excel講座60ファイル・110セクションをNuxt4に移植した一日の全記録
2. Cloudflare Accessとプライベートサイト分離(mdx-playground)
/private以下にCloudflare Accessをかけたが、SSG + SPA遷移でアクセス制御をバイパスされる問題が発覚。ミドルウェアでフルページリロードを挟んだが、プリレンダリングされたHTMLにコンテンツが平文で含まれている以上、根本解決にならない。結局apps/privateとして別プロジェクトに分離し、private.eurekapu.comにデプロイした。
主な成果:
- SSGのセキュリティ特性を理解(プリレンダリング = 平文HTML公開)
apps/privateミニマルNuxtアプリ構築(コンポーネント共有)private-eurekapuCloudflare Pagesプロジェクト作成・デプロイ- トップページに鍵アイコン(opacity 0.4)で控えめな導線追加
詳細: Cloudflare AccessとSSGの相性問題から別プロジェクト分離に至るまで
3. AutoHotkey Excel全ウィンドウ一括配置(misc-dev)
ウルトラワイドモニターで散らばるExcelウィンドウを、Stream Deckのボタン一発でモニター中央(1920x1080)に揃えるスクリプトを作成。バッチのhere-string問題、1プロセス複数ウィンドウの壁、EnumWindows + XLMAINクラス列挙、SW_SHOWNORMALによるリサイズ対応と、4段階の試行錯誤を経て完成。
主な成果:
excel-center.bat+excel-center.ps1作成EnumWindowsで全Excelウィンドウ(8個)を一括配置- Stream Deckから即実行可能
詳細: Excel全ウィンドウをウルトラワイドモニター中央に一括配置するStream Deck用スクリプト
4. Excel ViewerのHyperFormulaエラー修正(mdx-playground)
Excel ViewerでSheetJS + HyperFormulaの数式再計算が#LIC!エラーになる問題。licenseKey: 'gpl-v3'の明示指定で解消。配列数式(INDEX/MATCH等)が#VALUE!になるHyperFormulaの制約も確認。
詳細: Excel Viewer: HyperFormulaで#LIC!と#VALUE!エラーが出る原因と対処
今日の試行錯誤
| # | テーマ | 試したこと | 結果 | 気づき |
|---|---|---|---|---|
| 1 | セクション戻りバグ | navigateToMajorの遷移先を確認 | 常に?ci=0(先頭)に飛んでいた | ?last=1パラメータで最後のスライドに飛ばす対応 |
| 2 | テキスト-画像間空白 | min-height: autoに変更 | 解消せず | .theater自体がflex: 1で全体を埋めていた。flex: 0 1 autoで解決 |
| 3 | プレースホルダー画像 | 旧ファイルと突き合わせ | 旧ファイルにはテキストのみ、画像なし | AI移行時にExcel演習スクリーンショットを無関係なセクションに配置していた |
| 4 | WordPress CDN 404 | curlで動画URLを叩いた | 404が返った | 日本語URLのエンコーディング問題。英語パスやURLエンコード済みパスは200 OK |
| 5 | SSGセキュリティ | ミドルウェアでフルリロード | SPA遷移は防げた | HTMLソース表示でコンテンツが丸見え。プリレンダリング=平文公開 |
| 6 | wranglerデプロイ失敗 | wrangler pages deploy dist | プロジェクト未作成エラー | wrangler pages project createが先に必要 |
| 7 | production branch不一致 | デプロイがPreview環境に | 本番URLで表示されない | --production-branch mainだが実際はmaster。--branch=mainで解決 |
| 8 | Codex使用制限 | codex exec実行 | レートリミットエラー | ChatGPT Plusサブスク期限切れが原因。更新で復活 |
今日の学び
- SSGサイトでアクセス制御が必要なコンテンツは、同一プロジェクト内のルーティングで分けるのではなく、プロジェクトごと分離するのが最も確実
flex: 1が意図しない余白を生むパターン。レイアウトデバッグではまずflexの成長係数を疑う- AI(サブエージェント)にデータ変換を任せると、手元にある画像を「とりあえず入れておく」挙動をする。旧ファイルとの突き合わせ検証は必須
- WordPress CDNのcurl確認で404が返っても、日本語URLエンコーディングの問題を疑う。ブラウザでは正常に表示される場合がある
明日やること
- Excel講座:
millerExcelFunctions.tsのプレースホルダー画像を旧ファイルと突き合わせ修正 - Excel講座: 演習ページ35件の移行実装(
memo/2026-04-08/excel-exercises-migration-plan.md) - Excel講座: SyntaxCardコンポーネントの全セクション適用確認
- Codex: 復活したCodexでExcel講座移行計画を再レビュー