• #Nuxt
  • #Cloudflare
  • #Nitro
  • #OGP

Nitroプリセット変更

変更内容

nuxt.config.tsのNitroプリセットを変更:

// Before
nitro: {
  preset: "cloudflare-pages-static",
}

// After
nitro: {
  preset: "cloudflare-pages",
}

変更理由

日本語作文クイズの結果をシェアする際に、動的にOGP画像を生成する必要があった。

例: /api/og/japanese-quiz?category=particles&correct=8&total=10

完全に静的なサイトを生成するcloudflare-pages-staticでは、サーバーサイドAPIルートが動作しない。 cloudflare-pagesに変更することで、静的プリレンダリングを維持しつつAPIルートをCloudflare Functionsとして動作させることができる。

2つのプリセットの違い

項目cloudflare-pages-staticcloudflare-pages
静的ページ✅ プリレンダリング✅ プリレンダリング
サーバーAPIルート❌ 不可✅ Cloudflare Functions
ビルド成果物HTMLファイルのみHTML + _worker.js
ユースケース完全静的サイト静的 + 動的API

なぜ静的ページに影響がないのか

nuxt.config.tsにはprerender設定が含まれている:

nitro: {
  preset: "cloudflare-pages",
  prerender: {
    crawlLinks: true,  // リンクを辿って自動的にページを静的生成
    routes: ['/blog', '/']  // 明示的にプリレンダリングするルート
  }
}

この設定により:

  • crawlLinks: true - ビルド時にサイト内のリンクを辿り、発見したページを全て静的HTMLとして生成
  • routes: ['/blog', '/'] - 起点となるルートを明示的に指定

cloudflare-pagesプリセットは、この静的ファイル群に加えてCloudflare Functionsを生成する。 静的ページの生成ロジック自体は-staticの有無に関係なく、prerender設定によって制御される。

影響範囲

影響なし

  • 既存のコンテンツページ(/2025-xx-xx/...)
  • ブログ一覧ページ
  • コーディング規約ビューア
  • 静的アセット(画像、フォント等)

新たに可能になること

  • サーバーサイドAPIルート(server/api/
  • 動的OGP画像生成
  • その他のサーバーサイド処理

ビルドコマンドの変更

GitHub Actionsのデプロイワークフローも変更が必要:

# Before
- name: Generate static site
  run: pnpm generate

# After
- name: Build application
  run: pnpm build

generate vs buildの違い:

コマンド動作
nuxt generate完全静的サイト生成(サーバールート無視)
nuxt buildフルビルド(サーバールート含む)

cloudflare-pagesプリセットでサーバーAPIを使うにはbuildコマンドが必要。

nuxt-og-image の設定変更

nuxt-og-imageモジュールもCloudflare Workers向けに設定変更が必要:

ogImage: {
  runtimeCacheStorage: false,
  compatibility: {
    runtime: {
      // Cloudflare Workers向け: WASMベースのレンダラーを使用
      chromium: false,
      satori: 'wasm',
      resvg: 'wasm'
    },
    prerender: {
      // ビルド時はNode.jsを使用
      satori: 'node',
      resvg: 'node'
    }
  }
}

理由:

  • Cloudflare WorkersはNode.jsネイティブモジュールをサポートしない
  • WASMベースのレンダラーを使うことでエッジ環境でも動作可能
  • プリレンダリング時はNode.js環境なので高速なネイティブを使用

関連ファイル

  • nuxt.config.ts - プリセット設定、nuxt-og-image設定
  • .github/workflows/deploy.yml - デプロイワークフロー
  • server/api/og/japanese-quiz.ts - 動的OGP画像生成API(workers-og使用)