[{"data":1,"prerenderedAt":241},["ShallowReactive",2],{"content-/eurekapu-ogp-image-repair":3,"all-pages-for-dir":219,"related-/eurekapu-ogp-image-repair":220,"og-image-/eurekapu-ogp-image-repair":240},{"id":4,"title":5,"body":6,"category":200,"concepts":201,"description":202,"extension":203,"meta":204,"navigation":205,"ogImage":201,"path":206,"project_name":207,"published":208,"publishedAt":209,"seo":210,"source":211,"stem":212,"tags":213,"todo":201,"unpublished":208,"updatedAt":201,"__hash__":218},"pages/2026-08/2026-08-16/eurekapu-ogp-image-repair.md","eurekapu.comのOG画像が表示されない問題の修理とDependabot警告25件の棚卸し",{"type":7,"value":8,"toc":189},"minimark",[9,14,29,37,40,43,47,63,66,69,73,84,88,91,94,109,112,131,138,141,148,154,167,170],[10,11,13],"h1",{"id":12},"直したサイトと直してほしかったサイト","直したサイトと、直してほしかったサイト",[15,16,17,24,25,28],"p",{},[18,19,23],"a",{"href":20,"rel":21},"http://www.eurekapu.com",[22],"nofollow","www.eurekapu.com"," の記事OG画像が403で表示されない問題を Claude Code に修理させた。\n前セッションで403は実測済みだったので、再調査はさせず、署名まわりの確認から入らせた。\n修理は通った。\n「一旦これで修復全部完了ってことですよね」と言った直後に、あれ、と思った。\n直してほしかったのは eurekapu-nuxt4（info-accounting.com）のOGP、記事を共有したときの表示のほうではなかったか。\n聞くと、前セッションからの引き継ぎ指示が ",[18,26,23],{"href":20,"rel":27},[22]," の修理で、直っていたのはそちらだった。\nwww の403も実害だから修理は無駄ではない。\nただ、本命は手つかずのままだった。",[30,31,33,36],"h2",{"id":32},"wwweurekapucom-のog画像403の修理",[18,34,23],{"href":20,"rel":35},[22]," のOG画像403の修理",[15,38,39],{},"Worker側（mdx-playground）とサイト側（wordpress-migration）の署名ロジックを読み比べさせ、対照実験として log.eurekapu.com のOG URLが通るかも確かめさせた。\nシークレット自体は設定されている。\nそれでも403が出る。\nデプロイ履歴を調べさせると、最終デプロイは2026-08-02、macOS移行日と重なっていた。\n7月27日の稼働確認のあとに何かが変わった可能性が高い、という推定になった。",[15,41,42],{},"復元は、値を画面に出さないやり方でやらせた。\n抽出スクリプトからパイプで wrangler に直接流す。\n問題のURLは 200 + image/png を返すようになり、画像にはロゴ、記事タイトル、著者名がそろって描画されていた。\n他の記事2本と log 側も通って、修理は完了した。",[30,44,46],{"id":45},"本命だった-eurekapu-nuxt4-のogp設定","本命だった eurekapu-nuxt4 のOGP設定",[15,48,49,50,54,55,58,59,62],{},"eurekapu-nuxt4 側はそもそも未設定で、修理ではなく配線からやることになった。\n",[51,52,53],"code",{},"runtimeConfig"," に ",[51,56,57],{},"ogSecret"," を足し、署名ユーティリティとコンポーザブルを作らせ、",[51,60,61],{},"app.vue"," にサイト共通のデフォルトを置く。\nホストごとの扱いは分けた。\ntakken は R2 上に記事別の静的OG画像が実在したので、維持して key 化と twitter:card の追加だけにした。\ncashflow はツール固定タイトル、fs-textbook は章タイトルで動的生成。\nトップページは title が未設定だったので、ブランド共通の「動く図解で学ぶ会計・簿記」の文言でデフォルト画像を Worker に生成させた。",[15,64,65],{},"本番反映は、Worker の再デプロイ、Pages のシークレット設定、サイトのデプロイと対外操作が3つ続くので、実行前に確認を取らせて進めた。\nWorker の再デプロイで info-accounting.com のルートが有効になり、www と log に影響が出ていないことも点検させた。",[15,67,68],{},"デプロイ後の検証で、/lessons/* が軒並み403を返した。\n最初は有料コンテンツのアクセス制御かと疑ったが、無料ページも403。\n追いかけると、108ページが共通のコンポーザブル（useContentMeta）を使っていて、そこを直せば一括で整合すると分かった。\nzeimu ホストは中央修正で足り、独自実装だった bookkeeping ホストだけ個別に直した。\n直したのは合計3ファイル。\n再デプロイして、本番の動的OG画像そのものを取得し、描画まで確認した。",[30,70,72],{"id":71},"mac側がクローンしたときに気づける導線","Mac側がクローンしたときに気づける導線",[15,74,75,76,79,80,83],{},"セッションを閉じる前に積み残しを聞くと、2リポジトリの変更が未コミットだと返ってきた。\n学習ゲートはスキップを指示し、理由付きの ",[51,77,78],{},"LEARN_SKIP=1"," でコミットさせた。\nもうひとつ頼んだのは、Mac側の Claude Code がクローンしたときにチェックできる仕組みだ。\ngit追跡される導線として ",[51,81,82],{},".claude/issues/"," とプロジェクト CLAUDE.md に記録させ、eurekapu-nuxt4 の CLAUDE.md にはOG画像の恒久ドキュメントを足してもらった。\nコミット前には2台運用のルールどおり、origin との差分も確認させている。",[30,85,87],{"id":86},"push-したら-dependabot-警告25件が届いた","push したら Dependabot 警告25件が届いた",[15,89,90],{},"push 時に GitHub から、eurekapu-nuxt4 の依存パッケージに Dependabot 警告25件（critical 1件、high 16件）が出ているという通知が来た。\n今回の変更とは無関係の既存アラートだが、出ているものは気になる。\n棚卸しを指示した。",[15,92,93],{},"critical の cryptography は、講座教材のスナップショット内の lockfile にあり、サイト本体では未使用だった。\n本体の pnpm 依存を更新すると nuxt が 4.5.2 に上がり、ここから玉突きが始まる。",[15,95,96,97,100,101,104,105,108],{},"まずテストが13件落ちた。\n更新前の状態では38件すべて合格したから、原因は依存更新だと確定した。\nnuxt 4.5 で ",[51,98,99],{},"$fetch"," の解決方法が変わったらしく、",[51,102,103],{},"vi.stubGlobal('$fetch')"," で立てていたスタブが死んでいた。\n",[51,106,107],{},"mockNuxtImport"," に置き換えて解決し、同じ死んだスタブを持つテストにも横展開させた。",[15,110,111],{},"次はビルドが JSON パースエラーで落ちた。\nrolldown のエラーはモジュール名を出さないので、@nuxtjs/i18n と vite 8 の既知の非互換を GitHub issue で当たらせた。\n修正は上流の unplugin-vue-i18n に入っていたが、@nuxtjs/i18n 9.x の依存レンジでは届かない。\n10.x に上げ、v10 で削除されたオプションを使っている箇所がないことも調べさせた。",[15,113,114,115,118,119,123,124,127,128,130],{},"ビルドは2.3分で通った。\nvite 8 と rolldown への移行で、従来の6.5分から縮んだ、はずだった。\nところが Worker バンドルの計測CSVに今回の行がない。\n",[51,116,117],{},"dist/_worker.js"," の中身が空で、",[120,121,122],"strong",{},"ビルドは実際には失敗していた","。\n失敗が ",[51,125,126],{},"deploy.ps1"," の判定をすり抜けて、built と表示されていた。\nraw ログからエラー本文を掘らせると、app 側から相対パスで shared/ を import している箇所が原因だった。\n直して再ビルドするとクリーンに通った。\n",[51,129,126],{}," の誤報告は issue に残させた。",[15,132,133,134,137],{},"表示確認では、途中で ",[51,135,136],{},"pnpm dev | head -40"," の既知の罠（head がパイプを閉じてサーバーごと落とす）を踏んだが、1回目のサーバーは生きていた。\nホームの左上が空白に見えたのはフォントの読込タイミングで、見出しは DOM に存在していた。\n/en の404も既存仕様だった。\nSVG は行数ではなく出現数で数え直させ、図の SSR も更新前の本番ビルドと比較した。",[30,139,140],{"id":140},"並行セッションと譲り合いながら28件を閉じる",[15,142,143,144,147],{},"修正した12ファイルをコミットして push し、本番デプロイまで通した。\npush で25件中22件が閉じ、lockfile の再スキャンで、元の25件に無かった3件（sharp / esbuild ×2）が新たに表面化した。\n3件とも dev ツール経由の推移的依存で、レンジ外のパッチだったので ",[51,145,146],{},"overrides"," で対応する。",[15,149,150,151,153],{},"検証中に、デフォルトOG画像が404を返しているのを見つけた。\nR2 への302までは設計どおりだったが、リダイレクト先に実体が無かった。\nこれは並行セッションの作業途中分がデプロイに乗ったものだった。\nOGまわりは向こうで進行中なので、手を出さずに待った。\n掴んでいるエラーの内容は別セッションに渡したかったので、そのまま貼れる引き継ぎプロンプトを出させた。\n",[51,152,146],{}," の変更は検証済みのままローカルに置き、コミットは保留。",[15,155,156,157,159,160,162,163,166],{},"別セッションが終わったのを見て再開した。\n差分が ",[51,158,146],{}," の3行だけであることを確かめてから、コミットして push した。\nGitHub の未解決アラートは0件になった。\n当初の25件と再スキャンで出た3件、計28件を解消した。\n最後に、28件の内訳と ",[51,161,146],{}," を外すときの注意をまとめたメモを ",[51,164,165],{},"memo/2026-08-16/dependabot-25-alerts-fix.md"," に残させた。",[30,168,169],{"id":169},"学び",[171,172,173,177,180,186],"ul",{},[174,175,176],"li",{},"「シークレットが設定されている」ことと「値が合っている」ことは別。デプロイ履歴の日付（macOS移行日）との突き合わせが原因推定の足がかりになった",[174,178,179],{},"依存更新でテストが落ちたら、まず更新前の状態で全緑を確かめる。ベースラインが取れれば原因は一発で確定する",[174,181,182,183,185],{},"built の表示を信じない。成果物（",[51,184,117],{},"）の実体まで見る",[174,187,188],{},"同じリポジトリを触る並行セッションがいるときは、待って、引き継いで、自分の差分だけをコミットする",{"title":190,"searchDepth":191,"depth":191,"links":192},"",2,[193,195,196,197,198,199],{"id":32,"depth":191,"text":194},"www.eurekapu.com のOG画像403の修理",{"id":45,"depth":191,"text":46},{"id":71,"depth":191,"text":72},{"id":86,"depth":191,"text":87},{"id":140,"depth":191,"text":140},{"id":169,"depth":191,"text":169},"dev",null,"www.eurekapu.comの記事OG画像403をシークレット復元で修理したら、本命はeurekapu-nuxt4のOGP未設定だった。署名付きOG画像を各ホストに配線し、push時に届いたDependabot警告25件を再スキャン分3件も含めて解消するまでの記録。","md",{},true,"/eurekapu-ogp-image-repair","eurekapu-nuxt4",false,"2026-08-16T00:00:00.000Z",{"title":5,"description":202},"make-diary","2026-08/2026-08-16/eurekapu-ogp-image-repair",[214,215,216,217],"OGP","Dependabot","Nuxt","Cloudflare","LOh8QAjVZTyHFDDw5NtCoCXpY7ocSzWg2qVaXAIrBj0",[],[221,225,229,233,237],{"title":222,"path":223,"publishedAt":224},"Nitroプリセット変更: cloudflare-pages-static → cloudflare-pages","/nitro-preset-change","2025-12-24T00:00:00.000Z",{"title":226,"path":227,"publishedAt":228},"PVが測れていないサイトにGA4を入れ、ドメイン別の計測対応表を作った","/ga4-analytics-inventory","2026-08-12T00:00:00.000Z",{"title":230,"path":231,"publishedAt":232},"移行サイトのSEO・AI-SEO改善を1日で回した — 画像altを480件、記事の要点を203本、OG画像を署名付きに","/wordpress-nuxt-ai-seo-phase-c","2026-07-27T00:00:00.000Z",{"title":234,"path":235,"publishedAt":236},"Cloudflare PagesとWorkers Static Assetsの違い、エッジキャッシュが効く仕組み","/cloudflare-pages-workers-static-assets","2026-07-22T00:00:00.000Z",{"title":238,"path":239,"publishedAt":236},"eurekapu-nuxt4の積み残し解消：lint・依存脆弱性ゼロ化から語源単語ページ再構成まで","/eurekapu-nuxt4-maintenance-catchup","https://log.eurekapu.com/favicon.svg",1787053849501]