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