OGPの生成をcanvasベースに書き換えた

2022-08-16 05:14

Before

  • OGP生成用のAPIを別に用意
  • HTMLでレイアウトを組んでpuppeteer でスクショをとってpngイメージ化していた

Problem

  • OGPの生成が遅くタイムアウトしてしまう
  • puppeteerが入った Docker を用意するのが面倒
  • DockerベースとはいえAPIをVercel外で管理することになる(つまりお金かかる)

After

Tips

  • レイアウトはpngで準備して、canvasに合成、その上に ctx.fillText で描画
  • テキスト折返しは自動で行われないので ctx.measureText を使って自前で計算して力技で描画
  • 背景画像やフォントファイルなどのリソースファイルを参照するときに、Output File Tracing + path.resolve しないと、Vercelで動かしたときにうまく読み込みができなかった