[{"data":1,"prerenderedAt":265},["ShallowReactive",2],{"content-/ogworkerrefactoring-plan":3,"all-pages-for-dir":263,"og-image-/ogworkerrefactoring-plan":264},{"id":4,"title":5,"body":6,"category":245,"description":246,"extension":247,"meta":248,"navigation":54,"path":249,"project_name":250,"published":251,"publishedAt":252,"seo":253,"stem":254,"tags":255,"todo":260,"updatedAt":261,"__hash__":262},"pages/2026-01/2026-01-10/OGWorkerREFACTORING-PLAN.md","OG Worker リファクタリング計画",{"type":7,"value":8,"toc":236},"minimark",[9,13,17,25,28,38,41,151,154,157,160,216,219],[10,11,5],"h1",{"id":12},"og-worker-リファクタリング計画",[14,15,16],"h2",{"id":16},"現状",[18,19,20,24],"p",{},[21,22,23],"code",{},"src/index.ts"," に全ての処理が集約されており、ファイルが肥大化している（約565行）。\n機能追加・修正時にファイル全体を把握する必要があり、メンテナンス性が低い。",[14,26,27],{"id":27},"目標構造",[29,30,35],"pre",{"className":31,"code":33,"language":34},[32],"language-text","apps/workers/og/src/\n├── index.ts                 # エントリーポイント（ルーティングのみ）\n├── types.ts                 # 共通型定義\n├── handlers/\n│   ├── blog.ts              # ブログOGP\n│   ├── japanese-quiz.ts     # 日本語クイズOGP（シェアページ含む）\n│   ├── coding-standards.ts  # コーディング規約OGP\n│   ├── jleague.ts           # JリーグOGP\n│   ├── general.ts           # 汎用ページOGP\n│   └── design-principles.ts # デザイン原則OGP ✅ 完了\n└── utils/\n    ├── signature.ts         # 署名生成・検証\n    ├── sanitize.ts          # テキストサニタイズ\n    └── font.ts              # フォント読み込み・キャッシュ\n","text",[21,36,33],{"__ignoreMap":37},"",[14,39,40],{"id":40},"完了済み",[42,43,46,61,70,79,88,97,106,115,124,133,142],"ul",{"className":44},[45],"contains-task-list",[47,48,51,56,57,60],"li",{"className":49},[50],"task-list-item",[52,53],"input",{"checked":54,"disabled":54,"type":55},true,"checkbox"," ",[21,58,59],{},"handlers/design-principles.ts"," - デザイン原則OGP（2026-01-10）",[47,62,64,56,66,69],{"className":63},[50],[52,65],{"checked":54,"disabled":54,"type":55},[21,67,68],{},"types.ts"," - Envインターフェース（2026-01-10）",[47,71,73,56,75,78],{"className":72},[50],[52,74],{"checked":54,"disabled":54,"type":55},[21,76,77],{},"utils/signature.ts"," - 署名生成・検証（2026-01-10）",[47,80,82,56,84,87],{"className":81},[50],[52,83],{"checked":54,"disabled":54,"type":55},[21,85,86],{},"utils/sanitize.ts"," - テキストサニタイズ（2026-01-10）",[47,89,91,56,93,96],{"className":90},[50],[52,92],{"checked":54,"disabled":54,"type":55},[21,94,95],{},"utils/font.ts"," - フォントキャッシュ（2026-01-10）",[47,98,100,56,102,105],{"className":99},[50],[52,101],{"checked":54,"disabled":54,"type":55},[21,103,104],{},"handlers/blog.ts"," - ブログOGP（2026-01-10）",[47,107,109,56,111,114],{"className":108},[50],[52,110],{"checked":54,"disabled":54,"type":55},[21,112,113],{},"handlers/japanese-quiz.ts"," - 日本語クイズOGP（2026-01-10）",[47,116,118,56,120,123],{"className":117},[50],[52,119],{"checked":54,"disabled":54,"type":55},[21,121,122],{},"handlers/coding-standards.ts"," - コーディング規約OGP（2026-01-10）",[47,125,127,56,129,132],{"className":126},[50],[52,128],{"checked":54,"disabled":54,"type":55},[21,130,131],{},"handlers/jleague.ts"," - JリーグOGP（2026-01-10）",[47,134,136,56,138,141],{"className":135},[50],[52,137],{"checked":54,"disabled":54,"type":55},[21,139,140],{},"handlers/general.ts"," - 汎用ページOGP（2026-01-10）",[47,143,145,56,147,150],{"className":144},[50],[52,146],{"checked":54,"disabled":54,"type":55},[21,148,149],{},"index.ts"," - ルーティングのみに簡素化（48行）（2026-01-10）",[14,152,153],{"id":153},"未着手",[18,155,156],{},"なし - 全フェーズ完了",[14,158,159],{"id":159},"実装時の注意点",[161,162,163,185,198],"ol",{},[47,164,165,169],{},[166,167,168],"strong",{},"署名検証の整合性",[42,170,171,178],{},[47,172,173,174,177],{},"Worker側とNuxt側 (",[21,175,176],{},"usePageOgSignature.ts",") で同じロジックを使用",[47,179,180,181,184],{},"テスト (",[21,182,183],{},"apps/web/tests/og-signature.test.ts",") で整合性を検証",[47,186,187,190],{},[166,188,189],{},"フォントキャッシュ",[42,191,192,195],{},[47,193,194],{},"フォントデータのPromiseキャッシュは共有が必要",[47,196,197],{},"シングルトンパターンで実装",[47,199,200,203],{},[166,201,202],{},"型定義",[42,204,205,211],{},[47,206,207,210],{},[21,208,209],{},"Env"," インターフェースは複数ファイルで使用",[47,212,213,215],{},[21,214,68],{}," で一元管理",[14,217,218],{"id":218},"優先度",[161,220,221,227,233],{},[47,222,223,224,226],{},"高: ",[21,225,77],{}," - セキュリティ関連で重要",[47,228,229,230,232],{},"中: ",[21,231,104],{}," - 最も使用頻度が高い",[47,234,235],{},"低: その他のハンドラー - 必要に応じて順次対応",{"title":37,"searchDepth":237,"depth":237,"links":238},2,[239,240,241,242,243,244],{"id":16,"depth":237,"text":16},{"id":27,"depth":237,"text":27},{"id":40,"depth":237,"text":40},{"id":153,"depth":237,"text":153},{"id":159,"depth":237,"text":159},{"id":218,"depth":237,"text":218},"dev","Cloudflare Workers OGP画像生成のモジュール分割計画。565行のindex.tsを機能別ハンドラーと共通ユーティリティに分離","md",{},"/ogworkerrefactoring-plan","blog-platform",false,"2026-01-10T00:00:00.000Z",{"title":5,"description":246},"2026-01/2026-01-10/OGWorkerREFACTORING-PLAN",[256,257,258,259],"Cloudflare Workers","OGP","リファクタリング","モジュール化","done",null,"pQfF8Vlw3XXFmvenwkru71T9DNhaXzqD9pIbCPY9wwk",[],"https://log.eurekapu.com/favicon.svg",1775770050608]