対象
- OGP画像の動的生成をしたい
- ブログを無料で運用したい
- Vercelの
@vercel/og
から脱却したい - CloudFlareのCloud WorkerでOGP生成が難しいので、簡単にOGPを生成したい
目次
前提
- 既にSupabaseアカウントを作成している
- 既にSupabaseプロジェクトを作成している
- Supabaseプロジェクトの
Reference ID
わかる
実装
基本的にはSupabaseの公式ドキュメントに記載されているGenerating OG Imagesを参考に実装しました。
作業フォルダーを作成
mkdir og-image
cd og-image
Supabaseの初期化
Supabase init
Supabase Edge FunctionsをCLIを使って生成
supabase functions new og-image
supabase/functions/og-image/index.ts
というファイルが生成されます。
handler.tsxを作成
og-image
ディレクトリに移動して、handler.tsxを作成してください。
cd supabase/functions/og-image
touch handler.tsx
コードを貼り付ける
以下のコードは公式のドキュメントに貼られているコードになります。
handler.tsxは以下のようにコードを貼り付けてあげてください。
import React from 'https://esm.sh/[email protected]'
import { ImageResponse } from 'https://deno.land/x/[email protected]/mod.ts'
export default function handler(req: Request) {
return new ImageResponse(
(
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: 128,
background: 'lavender',
}}
>
Hello OG Image!
</div>
)
)
}
index.tsには以下のコードを貼り付けてください。
import { serve } from 'https://deno.land/[email protected]/http/server.ts'
import handler from './handler.tsx'
console.log('Hello from og-image Function!')
serve(handler)
SupabaseのContainerを起動
supabase start
初回実行だと起動までに数分かかることもあります。
サーバーの起動
supabase functions serve og-image --no-verify-jwt
以下のようなコンソールが表示されれば起動は成功です。
ブラウザで確認
http://localhost:54321/functions/v1/og-image にアクセスしてみてください。
以下のような画像が生成されたら成功です。
Supabaseにdeploy
以下のコマンドを実行してSupabaseのダッシュボードでEdge Functionsを確認すると画像のようにog-image
という関数が追加されていると思います。
supabase functions deploy og-image --project-ref [SupabaseのReferenceID] --no-verify-jwt
最後に
きっかけ
仕事の関係でSupabaseのEdge Funcitonsを読むことがありました。
その時に画像の赤枠ようにOpen Graph Image GenerationのExamplesがあったので実装してみることとしました。
目的
エンジニアだものブログはVercelに当初はdeployをしていたのですが、Vercelの無料枠では広告をつけられないという制約があるためhosting先をCloudFlareに変更しました。
@vercel/ogを使ってogp画像の表示の記事で手順を書いているのですがNextjsのApi Routeという機能を使ってserverを立ち上げなければならずCloudFlare Pageではこれがうまく動作しませんでした。
そこで、今回Supabase Edge Functionsを使って、jsxで簡潔に実装できそうだったので実装してみることにしました。
CloudFlare + Supabase | Vercel | |
---|---|---|
無料プランの広告掲載 | ⭕️ | ❌ |
OGP画像生成の難易度 | 難しい→易しい | 易しい |
最後までご覧いただきありがとうございます。