[{"data":1,"prerenderedAt":55},["ShallowReactive",2],{"tag-articles-r2":3},[4,9,14,19,25,30,35,40,45,50],{"title":5,"description":6,"path":7,"publishedAt":8,"updatedAt":8},"QQQ銘柄 動画バッチ生成・R2配信計画","100銘柄の財務アニメーション動画を事前生成し、Cloudflare R2から配信する計画","/video-batch-generation-plan","2025-12-16T00:00:00.000Z",{"title":10,"description":11,"path":12,"publishedAt":13,"updatedAt":13},"OGP画像 Worker + R2キャッシュ 実装完了","ブログ記事のOGP画像をCloudflare Workerでオンデマンド生成し、R2にキャッシュする実装（完了）","/ogp-worker-cache-implementation-plan","2025-12-31T00:00:00.000Z",{"title":15,"description":16,"path":17,"publishedAt":18,"updatedAt":18},"R2カスタムドメインが不要な理由（OG画像配信構成）","OG画像配信でR2バケットにカスタムドメインを設定する必要がない理由の解説","/r2-custom-domain-not-needed","2026-01-01T00:00:00.000Z",{"title":20,"description":21,"path":22,"publishedAt":23,"updatedAt":24},"Cloudflare R2カスタムドメイン × Web Audio API: ブラウザのメディアキャッシュが引き起こすCORS地獄","R2カスタムドメインからクロスオリジン音声をWeb Audio APIで処理する際、ブラウザのメディアキャッシュがcors/no-corsリクエストを分離せずCORSエラーを起こす問題と、3段階CORS検証 + キャッシュバスターによる解決策","/cloudflare-r2-cors-web-audio-api","2026-03-17T00:00:00.000Z",null,{"title":26,"description":27,"path":28,"publishedAt":29,"updatedAt":24},"Cloudflare R2の動画が再生できない原因はWordPress時代のShift_JISファイル名だった話とCDNキャッシュバスター対応","本番環境で4本の動画が再生できないとユーザーから報告。HTTP 200は返るのに中身が49KBの404 HTMLになっていた。原因はWordPressからの移行時、Shift_JIS（%8eQ%8f%c6...）でエンコードされた日本語ファイル名のURLをUTF-8で叩いて404 HTMLを掴み、それをそのまま.mp4としてR2に上げていたこと。実体MP4を再取得してR2に再アップロードし、Cloudflare CDNが古いHTMLを返してくる対策に動画URLへ`?v=2`を付けてキャッシュバスターした。","/r2-video-shiftjis-corruption","2026-05-04T00:00:00.000Z",{"title":31,"description":32,"path":33,"publishedAt":34,"updatedAt":24},"ずんだもん音声解説を財務3表コクピットに組み込む：132ステップ一括生成とR2デプロイ","VOICEVOXのずんだもん（speaker_id=3）で財務3表コクピットの全解説音声132ステップを一括生成。読み誤りを繰り返し修正しながらR2にデプロイするまでの記録。","/voicevox-zundamon-audio-r2","2026-05-06T00:00:00.000Z",{"title":36,"description":37,"path":38,"publishedAt":39,"updatedAt":24},"Eurekapuのデプロイが9.3分に伸びた話：R2リダイレクト移行と、Codexに3回ダメ出しされた計画書","Eurekapu-NUXT4のデプロイ時間が9.3分まで伸び、dist/総量248MB・5195ファイルまで肥大化していた。R2画像移行→dynamic importの順で計画を立てたら、Codexレビューに『順序が逆』『dynamic importは Worker バンドルから消えない』『$fetch('/content/...')はSSRで404』と3点まとめて致命傷を指摘され、計画を全面改訂。最終的に _redirects 方式でR2にリダイレクトする形に落として、wrangler pages deployだけで完結する流れに揃えた。最後、ビルド中にファイルを編集してapp-styles.B3Vj9TBQのハッシュ不整合に引っかかった反省も書いておく。","/deploy-optimization-r2-redirects","2026-05-13T00:00:00.000Z",{"title":41,"description":42,"path":43,"publishedAt":44,"updatedAt":24},"Piper TTSで英単語3,859語の音声を無料生成 ― GPUより効いたバッチモード11倍速と自動発音モード","英単語レッスンサイトの単語と例文にローカルTTSで音声を付けた記録。生成の遅さの原因はGPU不足ではなくモデル読み直しのオーバーヘッドで、バッチ入力モードへの切り替えで11倍速に。PCレイアウトの余白調整とページ遷移時の自動発音モードも実装した。","/vocab-lesson-tts-and-ui-modes","2026-07-19T00:00:00.000Z",{"title":46,"description":47,"path":48,"publishedAt":49,"updatedAt":24},"語源英単語コースの挿絵を全語洗い直しした記録","自作の語源英単語学習コンテンツで、例文と噛み合わない挿絵をまとめて洗い直した一日の記録。R2反映不良と思い込んだ誤診断、159枚の画像復元、原因だった『人物を描かない』プロンプト制約までの経緯。","/etymology-course-image-rework","2026-07-24T00:00:00.000Z",{"title":51,"description":52,"path":53,"publishedAt":54,"updatedAt":24},"語源英単語コースの挿絵洗い直しを完走した記録 - Codex週次リミットの切り分けからR2全数検証まで","語源英単語コースの挿絵再生成1,576枚の後半戦。深夜の毎時監視でCodexの週次リミットを切り分け、朝のBefore/Afterレビューを挟んで残り539枚を完走。R2アップロード1,837枚と全数バイト突き合わせまでの記録。","/etymology-image-rework-completion","2026-07-25T00:00:00.000Z",1785654927072]