2023/01/24 Serverless Frontend Meetup #1 「Cloudflare Workers」のLT枠で発表した資料です。 https://serverless-frontend.connpass.com/event/271894/
© 2023 Ateam Inc.Cloudflare Workersで動くOG画像生成器!Serverless Frontend Meetup #1
View Slide
名前: Aiji Uejima職業: Webエンジニア(アプリケーションエンジニア)分野: Cloudflare, Nodejs, TypeScriptReact, Next.js, Remix, AWS, GCP所属: Ateam Lifedesign Inc.twitter: @aiji42_devGitHub: aiji42Who am I ?
© 2023 Ateam Inc.昨年11月エイチームグループでテックブログを開設しました4https://techblog.a-tm.co.jp/
© 2023 Ateam Inc. 5早速自分も寄稿https://techblog.a-tm.co.jp/entry/2023/01/05/165133
© 2023 Ateam Inc. 6OG画像の作成が面倒くさい!
© 2023 Ateam Inc. 7SNS等でシェアするときになどに使われる! みたいな画像
© 2023 Ateam Inc. 8テックブログ用OG画像の作成フロー(弊社)1. OG画像用テンプレートがあるGoogleスライドを開く!2. 背景のパターンを選んでスライドをコピー1. タイトルを書く2. 画像としてダウンロード"3. はてなブログにアップロードしてOG画像として登録#
© 2023 Ateam Inc. 9こう思いましたテックブログなのにテックっぽくねーじゃん!<
© 2023 Ateam Inc. 10こう思いましたもう少し簡単にOG画像作れるようにしよう"<
© 2023 Ateam Inc. 11昨年10月にVercelがEdgeFunctions上で動くOG生成ライブラリ(@vercel/og)を公開Introducing OG Image Generation: Fast, dynamic social card images at the Edgehttps://vercel.com/blog/introducing-vercel-og-image-generation-fast-dynamic-social-card-images
© 2023 Ateam Inc. 12内部ではsatoriと@resvg/resvg-jsを使用し、HTMLをPNG化しているhttps://og-playground.vercel.app/OG Image Playground
© 2023 Ateam Inc. 13内部ではsatoriと@resvg/resvg-jsを使用し、HTMLをPNG化しているHello, World
© 2023 Ateam Inc. 14satoriも@resvg-jsもWASMが提供されているsatori @resvg/resvg-js
© 2023 Ateam Inc. 15ということはCF Workers上でも動くはず"(そもそもVercel Edge Functions は CF Workersをベースにしているので、Edge Functions で動くものは、大体 CF Workers でも動く)
© 2023 Ateam Inc. 16先に動かしている方がいらっしゃった"https://zenn.dev/uzimaru0000/articles/satori-workerssatoriとresvg-jsをCF Workers上で動かす手順について書かれている記事
© 2023 Ateam Inc. 17記事を参考に、背景画像など社内ルールに合うように構築R2 背景画像は予めR2に保存しておくhttps://example.workers.dev?t=新規サービスに__Remixを導入したぜ&p=1?t={タイトル}&p={背景画像番号} をつけてリクエストbackgroud-image: url(...)で背景画像を適応し、パターン別に文字列の位置を調整satori + @resvg/resvg-js
© 2023 Ateam Inc. 18あとはこのURLをmetaタグに設定すればOK
© 2023 Ateam Inc. 19実演#
© 2023 Ateam Inc. 20補足- 生成する画像のサイズによってはUnboundタイプにしないと実行時間が足りない- 生成後はKVもしくはR2に保存してキャッシュすることで高速化するとよい
© 2023 Ateam Inc. 21おまけ
© 2023 Ateam Inc. 22ということはCF Workers上でも動くはず"(そもそもVercel Edge Functions は CF Workersをベースにしているので、Edge Functions で動くものは、大体 CF Workers でも動く)
© 2023 Ateam Inc. 23こう思いましたパッチ当てたら、CF Workers上で@vercel/og 直接動かせるんじゃね?<
© 2023 Ateam Inc. 24結論から言うと動きます動くけど、結構パッチ当てないといけない$$$1. wasmのimport周り2. フォントファイルのローダー3. init処理(async)が2回以上走らないようにするフラグ管理 (パッチというかほぼ書き換え)
© 2023 Ateam Inc. 25ありがたいことに、絵文字のtwimoji変換とかが動いてくれる実演#
© 2023 Ateam Inc. 26おわり