TL;DR
- SVG to PNG の変換は shape だとビルドエラーになり、@resvg/resvg-js を使った
- Vite内部のなんらかのエラーでデバッグも難しくこれ以上の深掘りは諦めた
- satoriに読み込ませるフォントファイルはウェイトごとにそれぞれ分ける
- Google Fontsのクエリパラメータの
wght@400;700
は最初の一つしか機能しなかった
- Google Fontsのクエリパラメータの
やったこと
- satori, @resvg/resvg-js のインストール
-
npx astro add react
- satoriに食わせるJSXを書くため
- astro.config.js への変更もやってくれるので astro add を使うのが楽でよい
-
[slug].png.ts
エンドポイントの作成- ブログ記事ごとに対応したPNG画像を返却するためのエンドポイント
- SVGを生成してPNGに変換して返す
- satori + @resvg/resvg-js
- @resvg/resvg-js が内部で
.node
ファイルをロードするところでastro dev
コマンドが死んでしまったので、Astroの設定ファイルでvite: { optimizeDeps: { exclude: ['@resvg/resvg-js'] } }
を加えてViteの最適化対象から外した
結果
こんな感じの画像をビルド時に生成するようになった。ところで、Twitter Cardは最近は7日間キャッシュされるらしく、しばらくは反映が遅れそうだ。OGPの動作確認はDiscordに貼り付けるのが楽でよい。