最終更新日:2020-08-01
こんにちは。
今日、HTMLから画像を生成するAPIを作成したので、それについての記事を書いていきます。
https://blog.ojisan.io/jsx-preview
このブログを見て、サーバーサイドでdom-to-imageのようなことをやるのはどうすればいいかなと思い、学習のために作ってみました。
特に真新しい技術は使っていません。
ただ、よく使われるnode-canvasは使っていません。
Node.js上でHeadless Chromeを動かせるPuppeteerというライブラリを使い、HTMLをChromium上にレンダリングさせて、それのスクリーンショットを撮っているという形です。
そのスクリーンショットをCloud Storageにアップロードして永続化しています。
最初はVercel上にデプロイしようと思いましたが、Vercelの裏側のLambdaではaws-lambda-chromeというライブラリを入れないとHeadless Chromeを動かすことができませんでした。またこのライブラリが相当重く、追加で日本語フォントなどを入れるとVercelのサイズ制限に引っかかりそうだったので、Vercelはやめて、Cloud Functionsにデプロイすることにしました。
お金がないので、nodejs8を使うことで無料で動かしています。
また、独自ドメインでの運用のために、Firebase Hostingも使用しています。
余談ですが、Cloud Functions for Firebaseのnodejs8って、サポートがもうちょっとで終わるからなのか、コンソールからいきなり消えたりしますね。どうやらFirebaseのコンソールから消えても、関数自体が消えているわけではなさそうです。
https://ogp.dai.gd/api/ogp/
に、POSTリクエストを送ります。
リクエストボディーは以下のような感じです。
{ html:"画像化したいHTML" }
正常に画像への変換に成功すると、以下のようなレスポンスが得られます。
{ success:true, URL:"https://storage.googleapis.com/create-ogp.appspot.com/一意なID.png" }
このURLから、作成された画像を参照することができます。
お読みいただきありがとうございました。
Firebase