OGPの生成をcanvasベースに書き換えた
2022-08-16 05:14
Before
- OGP生成用のAPIを別に用意
- HTMLでレイアウトを組んでpuppeteer でスクショをとってpngイメージ化していた
Problem
- OGPの生成が遅くタイムアウトしてしまう
- puppeteerが入った Docker を用意するのが面倒
- DockerベースとはいえAPIをVercel外で管理することになる(つまりお金かかる)
After
- @napi-rs/canvas で canvas にテキストを描画するようにした
- https://www.npmjs.com/package/@napi-rs/canvas は node-canvas の alternative
- 使用感は node-canvas と同じ
Tips
- レイアウトはpngで準備して、canvasに合成、その上に ctx.fillText で描画
- テキスト折返しは自動で行われないので ctx.measureText を使って自前で計算して力技で描画
- 背景画像やフォントファイルなどのリソースファイルを参照するときに、Output File Tracing + path.resolve しないと、Vercelで動かしたときにうまく読み込みができなかった