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 おわり