📜 要約
主題と目的
この調査の主題は、Cloudflare Workersを利用してReactやHTMLで構築されたウェブアプリケーションの実行環境を構築する方法です。目的は、最も基本的な静的サイトのホスティングから、サーバーサイドレンダリング(SSR)のような高度な環境構築、さらには開発ワークフローの効率化やパフォーマンス最適化に至るまで、包括的かつ実践的な手順と知識を提供することです。これにより、開発者は自身のプロジェクト要件に最適なアプローチを選択し、Cloudflare Workersの能力を最大限に活用できるようになることを目指します。
回答
Cloudflare Workersでウェブアプリを実行する魅力
Cloudflare Workersは、単なるサーバーレス関数プラットフォームから、高機能なウェブアプリケーション実行環境へと進化を遂げています。特筆すべきは、Cloudflare自身が新規プロジェクトにおいて、従来の静的ホスティングサービス「Cloudflare Pages」よりもWorkersの利用を推奨する方針を打ち出している点です。これは、Workersが持つ圧倒的な柔軟性、拡張性、そしてCloudflareの他のサービスとの統合性の高さが、現代のウェブ開発に不可欠であると認識されていることを示しています。
zenn.dev
本稿では、ReactやHTMLサイトをWorkers上で実行するための環境構築方法を、3つのステップに分けて具体的に解説します。
ステップ1:基本の静的サイトホスティング
最も手軽で一般的な方法が、ビルド済みの静的なHTML、CSS、JSファイルをホスティングする「Workers Sites」です。JAMstackアーキテクチャと非常に相性が良く、ブログやコーポレートサイトに最適です。
qiita.com
必要な準備
開発を始める前に、以下のツールを準備してください。
- Cloudflareアカウント: 公式サイトから無料でサインアップします。cloudflare.com
- Node.js: バージョン16.17.0以降をインストールします。cloudflare.com
- Wrangler CLI: Cloudflare Workers用のコマンドラインツールです。以下のコマンドでインストールします。howtogeek.com
npm install -g @cloudflare/wrangler
構築手順(パターン別)
-
パターン1: React製SPA(シングルページアプリケーション)をホストする 最も簡単な方法は、Cloudflareが提供する公式テンプレートを利用することです。cloudflare.com
npm create cloudflare@latest my-react-app -- --framework=react
既存のプロジェクトがある場合は、
ファイルに以下の設定を追加します。wrangler.toml
の設定により、React Routerなどのクライアントサイドルーティングが正しく機能しますnot_found_handling
。cloudflare.com# wrangler.toml name = "my-react-spa" compatibility_date = "2025-01-01" [assets] directory = "./build" # Reactアプリのビルド出力ディレクトリ not_found_handling = "single-page-application"
-
パターン2: シンプルなHTMLサイトをホストする 素のHTML、CSS、JavaScriptで構成されたサイトの場合、
ファイルを作成し、アセットのディレクトリを指定するだけで設定は完了ですwrangler.jsonc
。zenn.dev// wrangler.jsonc { "name": "my-static-site", "compatibility_date": "2025-05-06", "assets": { "directory": "./" } }
ローカル確認とデプロイ
- ローカルプレビュー:
を実行し、ローカルサーバーで動作を確認しますnpx wrangler dev
。cloudflare.com - デプロイ:
を実行し、サイトをCloudflareのグローバルネットワークに公開しますnpx wrangler deploy
。cloudflare.com
ステップ2:動的要素の導入と高度なレンダリング
静的サイトの高速性を維持しつつ、よりリッチでインタラクティブな体験を提供するための高度な手法を紹介します。
選択肢1: HTMLRewriter
によるエッジでの動的書き換え
HTMLRewriter
HTMLRewriter
は、オリジンサーバーから返されたHTMLや静的HTMLを、エッジ(ユーザーに最も近いサーバー)でストリーミングしながら書き換えるCloudflare Workers独自の強力なAPIですreffect.co.jp
- 仕組み: CSSセレクタでHTML要素をターゲットにし、内容や属性を動的に変更します。
- メリット: クライアントサイドのJavaScriptに頼ることなく、パーソナライズ(例:ログイン状態の表示切替)やA/Bテストを、パフォーマンスへの影響を最小限に抑えて実現できます。レンダリングブロックや表示の「ちらつき」も防げます。reffect.co.jp
選択肢2: サーバーサイドレンダリング (SSR)
初期表示速度の向上やSEO対策が重要なアプリケーションではSSRが不可欠です。モダンなツールを組み合わせることで、Workers上で本格的なSSR環境を構築できます。
ツール / フレームワーク | 特徴 | 最適な用途 |
---|---|---|
React Router (旧Remix) | Cloudflareが公式にサポートするフルスタックフレームワーク。 CLIで簡単に環境を構築可能1。 | 安定した公式サポートとCloudflareのエコシステムを最大限に活用したい本格的なアプリケーション。 |
Hono + Vite | 軽量で柔軟なWebフレームワークHono pixiv.blog zenn.dev | フレームワークの規約に縛られず、独自の構成で軽量なSSR環境を構築したい場合。 |
vite-plugin-ssr | SSRだけでなく静的サイト生成(SSG)もサポートする汎用的なViteプラグイン。Next.jsは大規模すぎると感じる場合に最適 zenn.dev | Next.jsの複雑さを避けつつ、SSR/SSGやファイルベースルーティングなどモダンな機能を使いたい場合。 |
ステップ3:開発効率とパフォーマンスの最大化
環境構築後の運用フェーズでは、開発効率とアプリケーション性能を高めるためのテクニックが重要になります。
効率的なデバッグ
- ローカル開発:
コマンドでローカルサーバーを起動し、即座にコードの変更をテストできますwrangler dev
。cloudflare.com - DevTools連携:
の実行中にターミナルでwrangler dev
キーを押すだけでChrome DevToolsが起動し、コンソールログの確認やパフォーマンスのプロファイリングが可能ですD
。cloudflare.com - ブレークポイント: VS Codeに特定の設定を追加することで、ブレークポイントを使った高度なデバッグが実現します。cloudflare.com
CI/CDによるデプロイ自動化
GitHub ActionsとCloudflare公式のを組み合わせることで、デプロイの完全自動化が可能です。
wrangler-action
github.com
- 認証情報: CloudflareのAPIトークンとアカウントIDは、GitHubリポジトリのSecrets機能を使って安全に管理します。cloudflare.com
- 機密情報管理: 機密情報を含む
ファイルはリポジトリに含めず、その内容全体をGitHub Secretsに保存し、ワークフロー実行時に動的にファイルを生成するアプローチが安全かつ効果的ですwrangler.toml
。zenn.dev
パフォーマンス最適化
- キャッシュ戦略: 動的に生成されたHTMLをキャッシュすることで、応答速度を劇的に改善できます。
キャッシュ方法 | 特徴 | 推奨ユースケース |
---|---|---|
Cache API | Workerが実行されたデータセンターにのみキャッシュを保存。高速だがグローバルな一貫性はない zenn.dev | 高速なレスポンスが最優先で、グローバルでの一貫性が厳密には不要な場合。 |
Workers KV | グローバルに分散されたKVS。世界中のどこからでも高速に読み取れる cloudflare.com | 高いキャッシュヒット率やグローバルな状態共有が求められる場合。Next.jsのISRなどで推奨 cloudflare.com |
- バンドルサイズ最適化: Cloudflare Pagesのファイルサイズ上限(25MiB)などを回避するため、バンドルサイズを小さく保つことが重要です。ビルドプロセスをGitHub Actions上で行い、生成された静的ファイルのみをデプロイする手法が有効ですdevelopersteve.com。developersteve.com
結果と結論
調査の結果、Cloudflare Workersは、単純な静的サイトホスティングから、
HTMLRewriter
による動的なHTML書き換え、さらにはReact RouterやHonoを用いた本格的なサーバーサイドレンダリング(SSR)まで、非常に多様なウェブアプリケーションの実行環境を構築できる、柔軟で強力なプラットフォームであることが明らかになりました。結論として、Cloudflare Workersは現代のウェブ開発において極めて魅力的な選択肢です。プロジェクトの要件に応じて、シンプルな静的ホスティングから始め、必要に応じてSSRへと段階的に進化させることができます。Wrangler CLIやViteプラグイン、DevTools連携といった充実した開発者ツールは優れた開発体験を提供し、CI/CDの導入や高度なキャッシュ戦略、バンドルサイズ最適化といった実践的なテクニックを組み合わせることで、スケーラブルで高性能、かつ運用性に優れたアプリケーションの構築が可能です。この柔軟性と拡張性こそが、Cloudflare Workersを際立たせる最大の強みと言えるでしょう。
コード実行
import React from 'react';
const App = () => {
const approaches = [
{
name: '静的サイト (SPA)',
description: 'ビルド済みのHTML、CSS、JSファイルをデプロイする最もシンプルな方法です。',
useCase: '基本的なWebサイト、ポートフォリオ、ドキュメントサイトなど、コンテンツの更新が少ない場合に最適です。',
difficulty: '易しい',
tools: 'Wrangler CLI, create-react-appなど',
ref: 'https://developers.cloudflare.com/workers/static-assets/',
ref_text: 'Static Assets - Workers Docs'
},
{
name: 'HTMLRewriter API',
description: '配信するHTMLをエッジで動的に書き換えます。',
useCase: 'A/Bテスト、ユーザーごとのコンテンツパーソナライズ、動的なOGP設定など、静的コンテンツに動的要素を加えたい場合に有効です。',
difficulty: '中程度',
tools: 'HTMLRewriter API',
ref: 'https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/',
ref_text: 'HTMLRewriter - Workers Docs'
},
{
name: 'サーバーサイドレンダリング (SSR)',
description: 'Reactアプリケーションをエッジサーバー上で直接レンダリングします。',
useCase: '初期表示速度の向上やSEO対策が重要なWebアプリケーション、動的なデータが多いサービスに適しています。',
difficulty: '難しい',
tools: 'React Router, Hono, Viteなど',
ref: 'https://developers.cloudflare.com/workers/framework-guides/web-apps/react-router/',
ref_text: 'React Router - Workers Docs'
}
];
const ssrTools = [
{
tool: 'React Router v7 + Vite Plugin',
feature: 'Cloudflare公式推奨のフルスタック構成。`create-cloudflare` CLIで簡単に環境を構築可能。開発サーバーがWorkersランタイムで動作するため、本番環境との差異が少ないです。',
recommendation: '安定した公式サポートを求め、フルスタックな機能を活用したい開発者。',
reference_text: 'React Router Docs',
reference_url: 'https://developers.cloudflare.com/workers/framework-guides/web-apps/react-router/'
},
{
tool: 'Hono + Vite',
feature: '軽量で柔軟なWebフレームワークHonoを使用。大規模フレームワークに頼らず、ほぼ「素のReact」でSSRを構築可能です。`renderToReadableStream`でストリーミングにも対応。',
recommendation: 'フレームワークの規約に縛られず、独自の構成で軽量なSSR環境を構築したい開発者。',
reference_text: 'Zenn Article',
reference_url: 'https://zenn.dev/sora_kumo/articles/hono-ssr-react'
},
{
tool: 'vite-plugin-ssr',
feature: '汎用性が高いViteプラグイン。SSRだけでなく、SSGやSPAなど、1つのコードベースで多様なレンダリングモードをサポートします。',
recommendation: '複数のレンダリング戦略(SSR/SSG/SPA)を柔軟に使い分けたい、またはミニマムな構成から始めたい開発者。',
reference_text: 'vite-plugin-ssr Docs',
reference_url: 'https://vite-plugin-ssr.com/cloudflare-workers'
}
];
const cacheStrategies = [
{
method: 'Cache API',
feature: 'Workerが動作したデータセンターにのみキャッシュを保存。データセンター間の同期はありません。',
useCase: '高速なローカルキャッシュが必要で、グローバルな一貫性が厳密には求められない場合。',
ref_text: 'zenn.dev',
ref_url: 'https://zenn.dev/chimame/articles/7570c71d1e6c38'
},
{
method: 'Workers KV',
feature: 'グローバルに分散されたキーバリューストア。書き込みには少し時間がかかるが、どこからでも読み取り可能です。',
useCase: '高いキャッシュヒット率が求められる場合や、Next.jsのISRのように状態をグローバルに共有したい場合。Cloudflareも推奨。',
ref_text: 'Cloudflare Docs',
ref_url: 'https://developers.cloudflare.com/pages/framework-guides/nextjs/ssr/caching/'
}
];
return (
<div className="bg-gray-900 text-white min-h-screen font-sans p-4 sm:p-6 md:p-8">
<div className="max-w-7xl mx-auto">
<header className="text-center mb-12">
<h1 className="text-4xl md:text-5xl font-bold mb-2 bg-clip-text text-transparent bg-gradient-to-r from-orange-400 to-orange-600">Cloudflare Workers 実行環境構築ガイド</h1>
<p className="text-lg text-gray-400">React & HTMLアプリケーションのホスティング方法</p>
</header>
<section id="approaches" className="mb-16">
<h2 className="text-3xl font-bold mb-8 text-center">構築アプローチの選択肢</h2>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{approaches.map((approach, index) => (
<div key={index} className="bg-gray-800 rounded-lg p-6 border border-gray-700 hover:border-orange-500 transition-all duration-300 transform hover:-translate-y-1">
<h3 className="text-2xl font-semibold mb-3 text-orange-400">{approach.name}</h3>
<p className="text-gray-300 mb-4">{approach.description}</p>
<p className="text-sm text-gray-400 mb-4"><strong>ユースケース:</strong> {approach.useCase}</p>
<div className="text-sm text-gray-400 mb-4">
<p><strong>構築難易度:</strong> <span className={`font-bold ${approach.difficulty === '易しい' ? 'text-green-400' : approach.difficulty === '中程度' ? 'text-yellow-400' : 'text-red-400'}`}>{approach.difficulty}</span></p>
<p><strong>主要ツール:</strong> {approach.tools}</p>
</div>
<a href={approach.ref} target="_blank" rel="noopener noreferrer" className="text-blue-400 hover:text-blue-300 underline text-sm">{approach.ref_text}</a>
</div>
))}
</div>
</section>
<section id="ssr-tools" className="mb-16">
<h2 className="text-3xl font-bold mb-8 text-center">SSR実現のためのツールスタック比較</h2>
<div className="overflow-x-auto">
<table className="w-full text-left border-collapse">
<thead>
<tr>
<th className="border-b-2 border-gray-700 p-4 bg-gray-800">ツール/フレームワーク</th>
<th className="border-b-2 border-gray-700 p-4 bg-gray-800">特徴</th>
<th className="border-b-2 border-gray-700 p-4 bg-gray-800">推奨される開発者</th>
<th className="border-b-2 border-gray-700 p-4 bg-gray-800">参考文献</th>
</tr>
</thead>
<tbody>
{ssrTools.map((tool, index) => (
<tr key={index} className="bg-gray-800/50 hover:bg-gray-700/50 transition-colors">
<td className="border-b border-gray-700 p-4 font-semibold text-orange-400">{tool.tool}</td>
<td className="border-b border-gray-700 p-4 text-gray-300">{tool.feature}</td>
<td className="border-b border-gray-700 p-4 text-gray-300">{tool.recommendation}</td>
<td className="border-b border-gray-700 p-4"><a href={tool.reference_url} target="_blank" rel="noopener noreferrer" className="text-blue-400 hover:text-blue-300 underline">{tool.reference_text}</a></td>
</tr>
))}
</tbody>
</table>
</div>
</section>
<section id="workflow" className="mb-16">
<h2 className="text-3xl font-bold mb-8 text-center">開発からデプロイまでのワークフロー</h2>
<div className="grid md:grid-cols-3 gap-8 text-center">
<div className="bg-gray-800 p-6 rounded-lg border border-gray-700">
<h3 className="text-2xl font-semibold mb-3 text-orange-400">1. ローカル開発 & デバッグ</h3>
<ul className="text-left list-disc list-inside text-gray-300 space-y-2">
<li><code className="bg-gray-700 text-sm p-1 rounded">wrangler dev</code>でローカル実行 <a href="https://developers.cloudflare.com/workers/development-testing/" target="_blank" rel="noopener noreferrer" className="text-blue-500 underline hover:text-blue-700">[ref]</a></li>
<li>ブラウザDevToolsでデバッグ <a href="https://developers.cloudflare.com/workers/observability/dev-tools/" target="_blank" rel="noopener noreferrer" className="text-blue-500 underline hover:text-blue-700">[ref]</a></li>
<li>VS Codeでブレークポイントデバッグ <a href="https://developers.cloudflare.com/workers/observability/dev-tools/breakpoints/" target="_blank" rel="noopener noreferrer" className="text-blue-500 underline hover:text-blue-700">[ref]</a></li>
</ul>
</div>
<div className="bg-gray-800 p-6 rounded-lg border border-gray-700">
<h3 className="text-2xl font-semibold mb-3 text-orange-400">2. CI/CDによる自動化</h3>
<p className="text-gray-300 mb-4">GitHub Actionsでビルドとデプロイを自動化します。</p>
<a href="https://developers.cloudflare.com/workers/ci-cd/external-cicd/github-actions/" target="_blank" rel="noopener noreferrer" className="text-blue-400 hover:text-blue-300 underline text-sm">GitHub Actions連携ガイド</a>
</div>
<div className="bg-gray-800 p-6 rounded-lg border border-gray-700">
<h3 className="text-2xl font-semibold mb-3 text-orange-400">3. パフォーマンス最適化</h3>
<p className="text-gray-300 mb-4">キャッシュ戦略とバンドルサイズ最適化で応答速度を向上させます。</p>
<a href="https://speakerdeck.com/yoshiitaka/new-options-for-caching-dynamic-content-with-cloudflare-workers" target="_blank" rel="noopener noreferrer" className="text-blue-400 hover:text-blue-300 underline text-sm">動的コンテンツのキャッシュ</a>
</div>
</div>
<div className="bg-gray-800 rounded-lg p-6 mt-8 border border-gray-700">
<h4 className="text-xl font-semibold mb-4">GitHub Actions ワークフロー例</h4>
<pre className="bg-gray-900 text-left text-sm text-white p-4 rounded-md overflow-x-auto">
<code>
{`name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${\{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${\{ secrets.CLOUDFLARE_ACCOUNT_ID }}
`}
</code>
</pre>
<p className="text-xs text-gray-500 mt-2">出典: <a href="https://developers.cloudflare.com/workers/ci-cd/external-cicd/github-actions/" target="_blank" rel="noopener noreferrer" className="underline">Cloudflare Docs</a></p>
</div>
</section>
<section id="optimization" className="mb-16">
<h2 className="text-3xl font-bold mb-8 text-center">パフォーマンス最適化手法</h2>
<div className="grid md:grid-cols-2 gap-8">
<div className="bg-gray-800 p-6 rounded-lg border border-gray-700">
<h3 className="text-2xl font-semibold mb-4 text-orange-400">キャッシュ戦略</h3>
<div className="overflow-x-auto">
<table className="w-full text-left border-collapse">
<thead>
<tr>
<th className="border-b-2 border-gray-700 p-3 bg-gray-900">方法</th>
<th className="border-b-2 border-gray-700 p-3 bg-gray-900">特徴</th>
<th className="border-b-2 border-gray-700 p-3 bg-gray-900">ユースケース</th>
<th className="border-b-2 border-gray-700 p-3 bg-gray-900">出典</th>
</tr>
</thead>
<tbody>
{cacheStrategies.map((strategy, index) => (
<tr key={index} className="bg-gray-800/50 hover:bg-gray-700/50 transition-colors">
<td className="border-b border-gray-700 p-3 font-semibold">{strategy.method}</td>
<td className="border-b border-gray-700 p-3 text-gray-300">{strategy.feature}</td>
<td className="border-b border-gray-700 p-3 text-gray-300">{strategy.useCase}</td>
<td className="border-b border-gray-700 p-3"><a href={strategy.ref_url} target="_blank" rel="noopener noreferrer" className="text-blue-400 hover:text-blue-300 underline text-sm">{strategy.ref_text}</a></td>
</tr>
))}
</tbody>
</table>
</div>
<p className="text-sm text-gray-400 mt-4">stale-while-revalidate (SWR) 戦略もWorkerでカスタム実装可能です。<a href="https://gist.github.com/wilsonpage/a4568d776ee6de188999afe6e2d2ee69" target="_blank" rel="noopener noreferrer" className="text-blue-500 underline hover:text-blue-700">[実装例]</a></p>
</div>
<div className="bg-gray-800 p-6 rounded-lg border border-gray-700">
<h3 className="text-2xl font-semibold mb-4 text-orange-400">バンドルサイズの最適化</h3>
<p className="text-gray-300 mb-4">Cloudflareプラットフォームにはファイルサイズ制限があるため、バンドルを小さく保つことが重要です。<a href="https://blog.developersteve.com/overcoming-the-cloudflare-asset-file-limit-using-github-actions-145a87215004" target="_blank" rel="noopener noreferrer" className="text-blue-500 underline hover:text-blue-700">[制限回避例]</a></p>
<ul className="list-disc list-inside text-gray-300 space-y-2">
<li>
<strong>ツリーシェイキング (Tree Shaking):</strong> 未使用のコードを最終的なバンドルから削除します。ES6モジュールでインポートすることで効果を発揮します。<a href="https://docs.sentry.io/platforms/javascript/guides/cloudflare/configuration/tree-shaking/" target="_blank" rel="noopener noreferrer" className="text-blue-500 underline hover:text-blue-700">[Sentryの例]</a>
</li>
<li>
<strong>ビルドプロセスの分離:</strong> GitHub Actionsなどでビルドを行い、生成された静的アセットのみをデプロイすることで、Cloudflare環境の制限を回避します。
</li>
</ul>
</div>
</div>
</section>
</div>
</div>
);
}
export default App;
このレポートが参考になりましたか?
あなたの仕事の調査業務をワンボタンでレポートにできます。
🔍 詳細
🏷静的から動的、SSRまで:Cloudflare Workersでの実行パターン3選
はい、承知いたしました。
Deskrexの多機能AIアシスタントとして、ご依頼のレポートセクションを作成します。
#### 静的から動的、SSRまで:Cloudflare Workersでの実行パターン3選
Cloudflare Workersは、単なるサーバーレス関数プラットフォームにとどまらず、ReactやプレーンなHTMLで構築されたウェブアプリケーションを実行するための強力な環境を提供します。その実行パターンは、プロジェクトの要件や規模に応じて、シンプルな静的サイトのホスティングから、エッジでの動的なHTML書き換え、さらには本格的なサーバーサイドレンダリング(SSR)まで、多岐にわたります。
注目すべきは、Cloudflare自身が、新規プロジェクトにおいて従来のCloudflare PagesよりもWorkersの利用を推奨する方針を打ち出している点です。これは、Workersが持つ柔軟性と拡張性が、現代のウェブ開発において中心的な役割を担うことを示唆しています。
zenn.dev
ここでは、あなたのReactアプリケーションをCloudflare Workers上で実行するための、代表的な3つのアプローチを、それぞれの特徴と最適なユースケースと共に詳しく解説します。
パターン1: 静的サイトホスティング - 最もシンプルで高速な配信
これは最も手軽で一般的な方法です。
create-react-app
やViteなどでビルドして生成された静的なHTML、CSS、JavaScriptファイル群を、Cloudflare Workersの機能である「Workers Sites」を利用してデプロイします。▼仕組みとメリット
このアプローチでは、静的アセットはCloudflareのグローバルに分散したキーバリューストア「Workers KV」に保存されます。ユーザーからのリクエストは、地理的に最も近いエッジロケーションで処理され、KVから直接コンテンツが配信されるため、極めて低遅延で高速な表示が可能です。実際に、Netlifyのような他のホスティングサービスからWorkers Sitesへ移行したことで、パフォーマンスが2倍に向上したという報告もあります。
qiita.com
qiita.com
この方法は、いわゆるJAMstackアーキテクチャと非常に相性が良く、ブログやポートフォリオサイト、企業のコーポレートサイトなど、コンテンツの更新頻度がそれほど高くない場合に最適です。
qiita.com
▼構築方法
構築はCloudflareのCLIツール
wrangler
を使えば驚くほど簡単です。- Reactアプリケーションをビルドします (
)。npm run build
(またはwrangler.jsonc
) に、ビルドされたアセットのディレクトリを指定しますwrangler.toml
。zenn.dev
コマンドを実行するだけで、デプロイが完了しますwrangler deploy
。qiita.com
さらに、GitHub Actionsと連携させることで、リポジトリへのプッシュをトリガーにした自動デプロイ(CI/CD)も簡単に実現できます、。
qiita.com
accelia.net
パターン2: HTMLRewriter
による動的コンテンツ挿入 - 静的と動的のハイブリッド
HTMLRewriter
静的サイトの高速性を維持しつつ、一部のコンテンツを動的に変更したい場合に非常に強力なのが、
HTMLRewriter
APIです。これは、エッジでHTMLをストリーミングしながら内容を書き換えることができる、Cloudflare Workers独自の機能です。▼仕組みとメリット
HTMLRewriter
は、オリジンサーバーから返されたHTMLや、Workers上で生成した静的なHTMLに対して、CSSセレクタを使って特定の要素を捕捉し、その内容や属性をプログラムで変更します。この手法の最大の利点は、クライアントサイドのJavaScriptに頼ることなく、ユーザーごとにパーソナライズされたコンテンツを表示したり、A/Bテストを実施したりできる点です。サーバーへのリクエストは一度きりで、エッジで動的な処理が完結するため、パフォーマンスへの影響を最小限に抑えられます。
洞察:は、静的サイトの「静的」という制約を、パフォーマンスを犠牲にすることなく乗り越えるためのエレガントな解決策と言えます。例えば、認証状態に応じてヘッダーの表示を変えたり、ユーザーの地域に基づいてキャンペーンバナーを差し替えたりといった処理を、オリジンサーバーやクライアントに負荷をかけずに実現できるのです。HTMLRewriter
パターン3: サーバーサイドレンダリング (SSR) - フルスタックなエッジアプリケーション
初期表示速度の向上やSEO対策が重要なアプリケーションでは、サーバーサイドレンダリング(SSR)が不可欠です。Cloudflare Workersは、Reactアプリケーションをエッジサーバー上で直接レンダリングし、完成したHTMLをユーザーに返す本格的なSSR環境の構築を可能にします。
SSRを実現するには、Viteのようなモダンなビルドツールと、HonoやRemixといったフレームワークを組み合わせるのが一般的です。どのツールスタックを選ぶかは、プロジェクトの要件や開発者の好みに大きく依存します。
▼主要なSSRツールスタック比較
ツール / フレームワーク | 特徴 | こんな用途に最適 | 参考文献 |
---|---|---|---|
Hono + Vite | 軽量で柔軟なWebフレームワーク。Next.jsなどに依存せず、ほぼ「素のReact」に近い感覚でSSRを構築可能。自由度が高く、コンポーネント内での非同期データ取得も柔軟に行える。 | フレームワークの規約に縛られず、独自の構成で軽量なSSR環境を構築したい場合。 | zenn.dev zenn.dev |
vite-plugin-ssr | 汎用的なViteプラグイン。SSRだけでなく静的サイト生成(SSG)もサポート。Next.jsは大規模すぎると感じる小規模アプリやプロトタイプに最適。 | Next.jsの複雑さを避けつつ、SSR/SSGやファイルベースルーティングなどモダンな機能を使いたい場合。 | zenn.dev zenn.dev |
Remix + Cloudflare | Cloudflareが公式にサポートするフルスタックフレームワーク。 CLIで簡単に環境を構築でき、Cloudflareの各種サービスとの連携もスムーズ。 | 安定した公式サポートとCloudflareのエコシステムを最大限に活用したい本格的なフルスタックアプリケーション。 | kokeshing.com kokeshing.com |
▼SSRとキャッシュによるパフォーマンス最適化
SSRの真価は、キャッシュ戦略と組み合わせることでさらに発揮されます。例えば、RemixアプリケーションをCloudflare Pages Functions(実体はWorkers)で動かす場合、Cloudflareの。
Cache API
を利用して、一度レンダリングした結果をサーバーサイドでキャッシュできますkokeshing.com
具体的には、Remixの。この実装により、レスポンスタイムを劇的に改善することが可能です。
entry.server.tsx
ファイルをカスタマイズし、リクエストを処理する際にまずキャッシュを確認し、ヒットすれば即座にキャッシュされたレスポンスを返します。キャッシュがない場合のみレンダリングを行い、その結果を次のリクエストのためにキャッシュに保存しますkokeshing.com
kokeshing.com
実行可能な洞察: Cloudflare WorkersでReactを実行する環境を選ぶ際は、「静的か、動的か」という二元論で考える必要はありません。まずは最もシンプルな静的サイトホスティングから始め、必要に応じて**で動的要素を加え、さらなるパフォーマンスや機能性が求められるようになった段階でSSR**へと移行する、という段階的なアプローチが可能です。この柔軟性こそが、Cloudflare WorkersをReact開発のプラットフォームとして非常に魅力的なものにしているのです。HTMLRewriter
調査のまとめ
Cloudflare Workers上でReactやHTMLのコードを実行する環境を構築するには、静的サイトとしてデプロイする方法から、エッジで動的にHTMLを書き換える方法、さらにはサーバーサイドレ...
🏷まずはここから!ReactやHTMLを静的サイトとして高速配信する基本手順

まずはここから!ReactやHTMLを静的サイトとして高速配信する基本手順
Cloudflare WorkersでReactやHTMLのアプリケーションを動かす最初のステップとして、まずは静的サイトとしてコンテンツを配信する方法をマスターしましょう。これは、驚くほど簡単でありながら、Cloudflareのグローバルネットワークがもたらす圧倒的なパフォーマンスとセキュリティを享受できる、非常に強力な手法です。
近年のJAMstackアーキテクチャの普及に伴い、静的サイトのホスティング需要は高まっています 。Cloudflare Workersは、もともとサーバーレスでコードを実行するプラットフォームでしたが、2024年9月に静的アセットのネイティブサポートが導入されたことで、その役割は大きく進化しました 。これにより、ReactやVueのようなシングルページアプリケーション(SPA)や、シンプルなHTMLサイトのホスティングが劇的に簡素化されたのです。
qiita.com
thomasgauvin.com
注目すべきは、Cloudflare自身が、新規プロジェクトにおいては、従来の静的サイトホスティングサービスであるCloudflare Pagesよりも、この新しいWorkersの利用を推奨している点です 。これは、Workersが持つ高い柔軟性と、レート制限やDurable Objectsといった他のCloudflareサービスとの優れた統合性を評価してのことでしょう 。
zenn.dev
thomasgauvin.com
それでは、具体的な手順を見ていきましょう。
開発を始める前の準備
まず、開発環境を整える必要があります。必要なツールは以下の3つです。
- Cloudflareアカウント: まだお持ちでない場合は、公式サイトから無料でサインアップできます 。cloudflare.com
- Node.js: バージョン16.17.0以降が必要です。バージョン管理ツール(Voltaやnvmなど)の利用が推奨されています 。cloudflare.com
- Wrangler CLI: Cloudflare Workersのプロジェクト管理に不可欠なコマンドラインツールです。以下のコマンドでインストールできます 。howtogeek.com
npm install -g @cloudflare/wrangler
【パターン別】ReactやHTMLサイトの構築手順
ホストしたいサイトの種類に応じて、いくつかの簡単な構築パターンがあります。
パターン1: React製SPA(シングルページアプリケーション)をホストする
React Routerなどを用いたモダンなSPAをホストする場合、Cloudflareが提供するテンプレートを使うのが最も手軽で確実な方法です。
-
テンプレートからプロジェクトを作成 ターミナルで以下のコマンドを実行するだけで、React用のプロジェクトひな形が自動で生成されます。cloudflare.com
npm create cloudflare@latest my-react-app -- --framework=react
このコマンドは、ViteとCloudflareのプラグインがセットアップされたReactプロジェクトを作成します。デプロイに必要な設定も含まれているため、開発にすぐに集中できます。cloudflare.com -
手動で設定する場合(SPAのみ) もし既存のReactプロジェクトがある場合や、APIサーバーなしで純粋なSPAのみをホストしたい場合は、
(またはwrangler.toml
)という設定ファイルに数行追記するだけで対応できます。wrangler.jsonc
まず、Reactプロジェクトをビルドし、静的ファイル(通常は
やdist
フォルダに生成されます)を用意します。次に、プロジェクトのルートにbuild
を作成し、以下のように設定します。wrangler.toml
# wrangler.toml name = "my-react-spa" compatibility_date = "2025-01-01" # プロジェクト作成日に合わせてください [assets] directory = "./build" # Reactアプリのビルド出力ディレクトリを指定 not_found_handling = "single-page-application"
ここで重要なのが
という一行ですnot_found_handling = "single-page-application"
。これを設定することで、cloudflare.com
のような存在しないパスへのリクエストがあった場合でも、https://example.com/users/123
を返す代わりに、SPAのエントリーポイントである404 Not Found
を返します。これにより、React Routerなどのクライアントサイドのルーティングが正しく機能するようになります。index.html
パターン2: シンプルなHTML+CSS+JSサイトをホストする
Reactなどのフレームワークを使わない、素のHTML、CSS、JavaScriptで構成されたWebサイトも非常に簡単に公開できます 。
zenn.dev
-
ファイル構成
、index.html
、style.css
などのファイルを一つのフォルダにまとめます。script.js
-
設定ファイルの作成 プロジェクトのルートに
という名前で以下の設定ファイルを作成します。wrangler.jsonc
にdirectory
を指定することで、カレントディレクトリ全体が配信対象のアセットとして扱われます./
。zenn.dev// wrangler.jsonc { "name": "my-static-site", "compatibility_date": "2025-05-06", "assets": { "directory": "./" } }
-
(任意)配信しないファイルを指定
と同じように、.gitignore
ファイルを作成して、配信したくないファイルを指定できます。例えば、設定ファイル自体を配信対象から除外できます.assetsignore
。zenn.dev# .assetsignore wrangler.jsonc /.*
ローカルでの確認と世界への公開
サイトの準備ができたら、いよいよデプロイです。その前に、ローカル環境で正しく表示されるか確認しましょう。
- ローカルプレビュー: ターミナルで
を実行すると、ローカルサーバーが起動します。http://localhost:8787 にアクセスしてサイトの動作を確認できますnpx wrangler dev
。cloudflare.com - デプロイ: 準備ができたら
コマンドで、サイトをCloudflareのグローバルネットワークに公開しますnpx wrangler deploy
。デプロイは瞬時に完了し、世界中のユーザーに最も近いデータセンターからコンテンツが配信されるようになりますcloudflare.com。cloudflare.com
さらに、GitHubリポジトリと連携すれば、コードをプッシュするたびに自動でデプロイするCI/CDパイプラインも簡単に構築できます , 。
zenn.dev
qiita.com
このように、Cloudflare Workersの静的アセット機能を使えば、ほんの数ステップで、ReactアプリやHTMLサイトを世界最高クラスのインフラ上で公開できます。これは、単なる静的ホスティングにとどまりません。この基盤の上に、サーバーサイドレンダリング(SSR)や動的なAPIを追加していくことで、アプリケーションをさらに高度化させていくための、まさに最初の、そして最も重要な一歩となるのです。
調査のまとめ
Cloudflare Workersを利用して、ReactやVueのようなシングルページアプリケーション(SPA)や、シンプルなHTMLサイトの実行環境を構築する方法について、調査結果を基に解説します...
🏷高速化とSEOを実現:ViteやHonoを活用したSSR環境構築と動的HTML操作

高速化とSEOを実現:ViteやHonoを活用したSSR環境構築と動的HTML操作
Cloudflare WorkersでReactアプリケーションを動かすことは、もはや単に静的なHTMLファイルをホスティングするだけにはとどまりません。最新の開発ツールとWorkersの強力な機能を組み合わせることで、ユーザー体験とSEO効果を最大化するサーバーサイドレンダリング(SSR)環境の構築や、エッジでの動的なHTML操作が可能になります。このセクションでは、特に
Vite
やHono
といったモダンなツールスタックを活用した、先進的な環境構築の方法を深掘りしていきます。ViteとHono:エッジ開発を加速させるモダンなツール
現代のフロントエンド開発において、ビルドツール。このプラグインの最大の魅力は、開発サーバー内でCloudflare Workersのランタイムである。
Vite
の存在は欠かせません。その高速な開発サーバーと効率的なビルドプロセスは多くの開発者に支持されています。Cloudflareもこの流れを汲み、公式にCloudflare Viteプラグインをリリースしましたissoh.co.jp
workerd
を直接実行できる点にあります。これにより、開発環境と本番環境の挙動の差異が最小限に抑えられ、「ローカルでは動いたのにデプロイしたら動かない」といった問題を未然に防ぐことができますissoh.co.jp
一方、。Next.jsやRemixのような多機能なフレームワークも強力ですが、よりシンプルで柔軟な構成を求める場合、Honoは最高の選択肢となります。実際に、HonoとViteを組み合わせることで、フレームワークの規約に縛られずに「ほぼ素のReact」でSSR環境を構築するアプローチが注目されています。
Hono
はCloudflare Workersのようなエッジ環境に最適化された、超高速で軽量なWebフレームワークですpixiv.blog
zenn.dev
この組み合わせの具体例として、。このプラグインは開発サーバーをHonoアプリケーションに接続し、シームレスな開発体験を提供します。
@hono/vite-dev-server
というViteプラグインを利用した開発が挙げられますzenn.dev
ツール | 役割と特徴 |
---|---|
Vite | 高速な開発サーバーとビルドツール。Cloudflare公式プラグインにより、Workersランタイムとの高い親和性を実現 issoh.co.jp |
Hono | エッジ環境向けに設計された軽量・高速なWebフレームワーク。ReactのSSRやAPIエンドポイントの作成に利用 pixiv.blog |
vite-plugin-ssr | SSR、SSG、SPAなど多様なレンダリング方式をサポートするViteプラグイン。小規模アプリやミニマムな構成を求める場合に有力な選択肢 cloudflare.com |
ある開発者は、中〜大規模アプリケーションにはNext.jsが適しているとしつつも、小規模なプロジェクトやプロトタイピングにおいては、。これは、プロジェクトの規模や要件に応じて適切なツールを選択することの重要性を示唆しています。
vite-plugin-ssr
のようなミニマムなツールがRemixに代わる第一候補になり得ると考察していますcloudflare.com
SSR環境の構築:選択肢と実装パターン
Cloudflare Workers上でSSRを実現するには、いくつかの優れた選択肢が存在します。
-
React Router (旧Remix) を活用する公式推奨ルート Cloudflareは、React Router v7(旧Remix)をフルスタックフレームワークとして公式にサポートしています。pixiv.blog
CLIを使えば、SSRが有効化されたReact Routerプロジェクトをわずか数コマンドで構築できます。create-cloudflare
npm create cloudflare@latest my-react-router-app -- --framework=react-router
このコマンドで生成されるプロジェクトでは、
ファイルにreact-router.config.ts
が設定され、ViteとCloudflareプラグインが連携してSSRを実現しますssr: true
。これは、最も手軽で安定したSSR環境構築の方法と言えるでしょう。pixiv.blog -
Hono + Viteで構築する軽量カスタムルート より柔軟性を求めるなら、HonoとViteを基盤にSSR環境を自前で構築するアプローチが有効です。この方法の核心は、サーバーサイドのエントリーポイント(例:zenn.dev
)でReactのsrc/server.ts
関数を使用することですrenderToReadableStream
。この関数はReactコンポーネントをストリーミング可能な形式に変換し、コンポーネント内での非同期データ取得が完了するのを待ってからレンダリングを再開する機能を持っています。zenn.devこの機能を利用してSSRを実現しています。zenn.devクライアントサイドでは、サーバーから送られてきたHTMLにReactコンポーネントを「ハイドレート」することで、インタラクティブなアプリケーションとして機能させます。このアプローチは、フレームワークの裏側で何が起きているかを理解し、細部まで制御したい開発者に最適です。zenn.dev -
React Edge:Cloudflare特化の次世代フレームワーク さらに進んだ選択肢として、Next.jsの複雑さやVercelの料金体系に課題を感じた開発者によって生み出された「React Edge」というフレームワークがあります。これはCloudflare Workersの能力を最大限に引き出すために設計されており、以下のような革新的な機能を備えています。codegrid.net
- 型安全なRPC: サーバーサイドの関数をクライアントから直接、型安全に呼び出せる。
- 統一されたデータフェッチ (
): SSR時のデータプリロードとクライアントでの自動ハイドレーションをシームレスに実現。app.useFetch
- 自動多重化: 複数のコンポーネントからの同一APIコールを単一のリクエストにまとめる。
すでにブラジルの大手不動産会社で本番採用されるなど、その実用性は証明されており、Cloudflare上で高性能なアプリケーションを構築するための強力な選択肢となり得ます。codegrid.net
HTMLRewriter:エッジでHTMLを動的に書き換える魔法
SSRが初回ページの生成に焦点を当てているのに対し、HTMLRewriterは既存のHTMLをエッジで動的に書き換えるための強力なAPIです。これは、Cloudflare Workersの最もユニークで革新的な機能の一つと言えるでしょう。
reffect.co.jp
HTMLRewriterは、jQueryライクなCSSセレクタを使ってHTMLの特定の部分をターゲットにし、その内容を追加、変更、削除することができます。
cloudflare.com
// 特定の要素(#client-quote)にランダムなコンテンツを挿入する例
class quoteHandler {
async element(element) {
const item = quotes[Math.floor(Math.random() * quotes.length)];
// setInnerContentでHTMLを動的に設定
element.setInnerContent(`<blockquote>${item.quote}</blockquote><figcaption>${item.client}</figcaption>`, {
html: true,
});
}
}
async function handleRequest(req) {
const res = await fetch(req); // オリジンからレスポンスを取得
const rewritter = new HTMLRewriter().on('#client-quote', new quoteHandler());
return rewritter.transform(res); // レスポンスを書き換えて返す
}
このコードは、静的なウェブサイトの特定箇所に、ページをリクエストするたびに異なる顧客の声を動的に挿入する実装例です。注目すべきは、この処理がすべてエッジ(ユーザーに最も近いCloudflareのサーバー)で行われ、クライアントサイドのJavaScriptを一切必要としない点です。
cloudflare.com
この技術の利点は計り知れません。
- パフォーマンス向上: クライアントの処理負荷を軽減し、レンダリングブロックや表示の「ちらつき」を防ぎます。reffect.co.jp
- キャッシュ効率の最大化: 商品一覧のような「ほぼ静的」なページの大部分をキャッシュしつつ、ショッピングカートの表示のようなユーザー固有の部分だけをエッジで動的に挿入できます。reffect.co.jp
- A/Bテストとパーソナライゼーション: ユーザーの属性(Cookieや地域など)に応じて、エッジでHTMLを書き換え、パーソナライズされたコンテンツを提供できます。
SSRとHTMLRewriterは競合する技術ではなく、むしろ相補的な関係にあります。SSRで生成されたHTMLに対して、さらにHTMLRewriterでパーソナライズや動的な変更を加える、といったハイブリッドなアプローチも可能です。これにより、高速な初期表示、優れたSEO、そしてリッチで動的なユーザー体験という、現代のWebアプリケーションに求められる要件を高いレベルで満たすことができるのです。
🏷開発効率と性能を最大化する実践テクニック:デバッグ、CI/CD、最適化

はい、承知いたしました。
Cloudflare WorkersでReactやHTMLのコードを実行できる環境を構築した後の、開発効率と性能を最大化するための実践的なテクニックについて、調査結果を基にレポートを作成します。
#### 開発効率と性能を最大化する実践テクニック:デバッグ、CI/CD、最適化
Cloudflare WorkersでReactやHTMLアプリケーションの環境を構築した先には、より洗練された開発ワークフローとパフォーマンスの追求が待っています。単にコードを動かすだけでなく、開発の生産性を高め、ユーザーに最高の体験を届けるためには、デバッグ、CI/CD、そしてパフォーマンス最適化という3つの柱が不可欠です。ここでは、これらの要素を最大限に活用するための実践的なテクニックを、具体的なツールやコード例を交えて深く掘り下げていきます。
ローカル開発とデバッグ:手元で問題を迅速に解決する
クラウド環境での開発は、デバッグの難しさが生産性のボトルネックになりがちです。しかしCloudflare Workersは、ローカル環境で快適に開発・デバッグを行うための強力なツールを提供しています。
-
ローカルサーバーでの実行とテスト:
コマンドは、ローカルマシン上でWorkerを起動し、本番に近い環境で動作をテストすることを可能にしますwrangler dev
cloudflare.com。これにより、デプロイを待たずにコードの変更を即座に確認でき、開発サイクルが劇的に高速化します。cloudflare.com -
ブラウザDevToolsとのシームレスな連携: 注目すべきは、
の実行中にターミナルでwrangler dev
キーを押すだけで、Chrome DevToolsが起動する機能ですD
cloudflare.com。これにより、お馴染みのコンソールでcloudflare.com
の出力を確認したり、パフォーマンスプロファイリングを行ったりできます。Viteプラグインを使用している場合でも、console.log
実行後にvite dev
という特別なパスにアクセスすることで、同様にDevToolsを活用できます/__debug
cloudflare.com。cloudflare.com -
VS Codeでのブレークポイントデバッグ: より高度なデバッグには、VS Codeのようなエディタでのブレークポイント設定が有効です。
ファイルに特定の設定を追加することで、ローカル開発サーバーにデバッガをアタッチし、コードの実行を一行ずつ追いながら変数の状態を確認できます.vscode/launch.json
cloudflare.comcloudflare.com。cloudflare.com// .vscode/launch.json の設定例 { "configurations": [ { "name": "<WORKER名>", "type": "node", "request": "attach", "websocketAddress": "ws://localhost:9229/<WORKER名>", "sourceMaps": true } ] }
この設定により、複雑なロジックや予期せぬ挙動の原因究明が格段に容易になります。
これらのデバッグ機能を使いこなすことは、クラウドネイティブなアプリケーション開発における課題を克服し、ローカルでの開発体験を飛躍的に向上させる鍵と言えるでしょう。
CI/CDによるデプロイ自動化:信頼性と一貫性を高める
開発が進むと、手動でのデプロイ作業はミスを誘発し、時間もかかります。CI/CD(継続的インテグレーション/継続的デプロイ)パイプラインを導入することは、もはやベストプラクティスです。特にGitHub Actionsとの連携は非常に強力です。
cloudflare.com
-
Wrangler GitHub Actionの活用: Cloudflareが公式に提供する
を利用すれば、GitHubリポジトリの特定ブランチ(例:cloudflare/wrangler-action
)へのプッシュをトリガーに、ビルドからデプロイまでを完全に自動化できますmain
github.com。cloudflare.com -
安全な認証情報管理: CI/CD環境では、
のような対話的な認証は使えません。代わりに、CloudflareのAPIトークンとアカウントIDを、GitHubリポジトリのSecrets機能を使ってwrangler login
、CLOUDFLARE_API_TOKEN
として安全に設定しますCLOUDFLARE_ACCOUNT_ID
cloudflare.com。これにより、認証情報がコードリポジトリに漏洩するリスクを防ぎます。accelia.net -
の取り扱い:wrangler.toml
ファイルには、D1データベースのIDなど、公開すべきでない機密情報が含まれることがありますwrangler.toml
。このような場合、zenn.dev
をwrangler.toml
に追加し、リポジトリに含めない運用が推奨されます。しかし、そうするとCI/CD環境でファイルが見つからずデプロイに失敗します.gitignore
。 この問題に対するエレガントな解決策は、accelia.net
の内容全体をGitHub Secretsに保存し、ワークフロー実行時に動的にファイルを生成する手法ですwrangler.toml
zenn.dev。zenn.dev# GitHub Actionsワークフローでのwrangler.toml生成例 name: Deploy on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Wrangler.toml run: printf "%s" '${{ secrets.WRANGLER_TOML }}' > wrangler.toml # Secretsからファイルを生成 - name: Deploy uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
このアプローチは、セキュリティと自動化を両立させるための非常に実践的なテクニックです。
パフォーマンス最適化:ユーザー体験を極限まで高める
アプリケーションの応答速度は、ユーザー満足度に直結します。Cloudflare Workersの真価は、そのパフォーマンスを最大限に引き出す最適化手法にあります。
キャッシュ戦略:動的コンテンツを静的に近づける
SSR(サーバーサイドレンダリング)などで動的に生成されるHTMLも、賢くキャッシュすることで劇的に高速化できます。Cloudflareでは主に2つのキャッシュストレージを選択できます。
speakerdeck.com
キャッシュ方法 | 特徴 | 推奨ユースケース |
---|---|---|
Cache API | Workerが実行されたデータセンターにのみキャッシュを保存。グローバルな同期はないため、他のデータセンターではキャッシュミスになる可能性がある zenn.dev | 高速なレスポンスが最優先で、グローバルでの一貫性が厳密には不要な場合。RemixのSSRキャッシュ実装例も存在します kokeshing.com |
Workers KV | グローバルに分散されたKVS。書き込みには若干の遅延があるが、一度書き込まれれば世界中のどのデータセンターからでも高速に読み取り可能 cloudflare.com | 高いキャッシュヒット率が求められる場合や、Next.jsのISRのように状態をグローバルに共有したい場合。Cloudflareもこの方法を推奨しています cloudflare.com |
さらに、。これは、まず古いキャッシュデータをユーザーに即座に返し、その裏で新しいコンテンツを非同期に取得・更新する手法です。ユーザーの体感速度を大幅に向上させることができますが、KVストアの結果整合性により、タイミングによっては古いデータが新しいデータを上書きしてしまう競合状態の可能性も指摘されており、トレードオフの理解が必要です。
stale-while-revalidate
(SWR) という高度なキャッシュ戦略をWorkerで実装することも可能ですcloudflare.com
github.com
バンドルサイズの最適化:制限の回避とロード時間の短縮
Cloudflare Pagesには単一ファイルのサイズに25MiBの上限があるなど、プラットフォームには制約が存在します。バンドルサイズを小さく保つことは、これらの制限をクリアし、ロード時間を短縮する上で極めて重要です。
developersteve.com
cloudflare.com
-
ツリーシェイキング (Tree Shaking): これは、ビルド時に実際には使われていないコード(Dead Code)を最終的なバンドルから削除する技術です。Sentry SDKのような多くのモダンなライブラリは、ES6モジュール形式でインポートすることでツリーシェイキングが最大限に機能するように設計されていますsentry.io。不要な依存関係を減らす最も基本的ながら効果的な最適化です。arcxp.com
-
ビルドプロセスの分離: 大規模なNext.jsアプリケーションなどでファイルサイズ制限が問題になる場合、非常に有効な解決策があります。それは、ビルドプロセスをGitHub Actions上で行い、生成された静的なアウトプット(例:
ディレクトリ)のみをWranglerを使ってCloudflare Pagesにデプロイする方法ですout
。これにより、ビルド時に生成される中間ファイルや巨大なdevelopersteve.com
がデプロイ対象から外れ、サイズ制限を回避できます。node_modules
これらのテクニックを駆使することで、Cloudflare Workersという強力なプラットフォームの上で、開発効率とアプリケーション性能の両方を最大化する、プロフェッショナルな開発ワークフローを確立できるのです。
調査のまとめ
Cloudflare WorkersでReactやHTMLのコードを実行する環境を構築した後の、より実践的で高度な開発ワークフローやパフォーマンス最適化手法について、調査結果を基に解説します。ローカル...
🖍 考察
調査の本質:単なる技術手順を超えた、最適なアーキテクチャ選定への道標
ユーザーの皆様からの「Cloudflare WorkersでReactやHTMLのコードを実行できる環境を作る方法」というご依頼は、単に技術的な手順を求めるものではありません。その根底には、「現代のウェブ開発において、高速でスケーラブル、かつコスト効率の良いアプリケーションを構築するための最適なプラットフォームは何か?」という、より本質的で戦略的な問いが存在します。
したがって、私たちが提供すべき価値は、手順の羅列にとどまらず、プロジェクトの性質や将来の成長を見据え、なぜCloudflare Workersが有力な選択肢となり得るのか、そしてどのような状況で、どのアーキテクチャ(静的サイト、動的HTML、SSR)を選択すべきかという明確な意思決定の指針を示すことです。
本考察の目的は、調査結果を深く分析し、技術的な選択がビジネスやプロジェクトの成功にどう結びつくのかを解き明かし、皆様が自信を持って次のステップに進むための具体的な洞察とアクションプランを提供することにあります。
分析と発見事項:エッジコンピューティングへのパラダイムシフト
調査結果を多角的に分析すると、いくつかの重要な発見と、ウェブ開発における大きなトレンドが見えてきます。
発見事項1:静的ホスティングからプログラマブルなエッジへの主役交代
最も注目すべきは、Cloudflare自身が新規プロジェクトにおいて、従来の静的ホスティングサービス。これは、ウェブホスティングのパラダイムが、単にファイルを配置する「静的」なモデルから、エッジサーバーでコードを実行する「動的・プログラマブル」なモデルへと移行していることを明確に示しています。Workersは静的アセットのホスティング機能を内包しつつ、APIの構築や動的な処理など、はるかに高い柔軟性と拡張性を提供します。
Cloudflare Pages
よりも、サーバーレス環境であるCloudflare Workers
の利用を推奨しているという事実ですzenn.dev
発見事項2:3つの実行パターンが示す「スケーラブルな進化の道筋」
Cloudflare WorkersでのReact/HTML実行方法は、大きく3つのパターンに分類できます。これらは単なる選択肢ではなく、プロジェクトの成長に合わせて進化できる、一連の道筋として捉えることができます。
実行パターン | 特徴 | 最適なユースケース |
---|---|---|
1. 静的サイトホスティング | 最もシンプルで高速。ビルド済みのHTML/CSS/JSを配信。 | ブログ、ポートフォリオ、コーポレートサイト、ドキュメント |
2. による動的挿入 | 静的サイトの速度を維持しつつ、エッジでHTMLを部分的に書き換え。 | ユーザー認証による表示切り替え、A/Bテスト、地域別コンテンツ |
3. サーバーサイドレンダリング (SSR) | エッジでReactをレンダリングし、SEOと初期表示速度を最大化。 | Eコマースサイト、メディアサイト、複雑なWebアプリケーション |
この段階的なアプローチは、初期段階ではシンプルかつ低コストで始め、ビジネスの成長や機能要件の高度化に伴って、シームレスにより高度なアーキテクチャへ移行できることを意味します。
発見事項3:開発者体験(DX)を重視したエコシステムの成熟
調査結果からは、Cloudflareが本番運用だけでなく、開発プロセス全体の効率化を重視していることが伺えます。
- ローカルデバッグ:
とブラウザのDevToolsを連携させ、ブレークポイントデバッグまで可能な環境が提供されていますwrangler dev
cloudflare.com。cloudflare.com - CI/CDの自動化: GitHub Actionsとの公式連携により、安全かつ自動化されたデプロイパイプラインの構築が容易になっています。cloudflare.com
- モダンツールとの連携: ViteやHonoissoh.co.jp、Remixpixiv.blogといった現代の開発者に人気のツールとの親和性が高く、スムーズな開発体験を実現しています。pixiv.blog
これらの発見は、Cloudflare Workersがもはや実験的なプラットフォームではなく、本格的なアプリケーション開発のための成熟したエコシステムを形成していることを示しています。
より深い分析と解釈:「なぜ」を掘り下げて本質を探る
表面的な事実の背後にある「なぜ」を掘り下げることで、より本質的な意味を解き明かします。
なぜCloudflareは静的サイトにまで「Workers」を推奨するのか?
これは、Cloudflareが開発者を自社のエコシステムに深く取り込むための戦略と解釈できます。
- 初期接点の獲得: まずは最も手軽な静的サイトホスティングで開発者を呼び込みます。
- シームレスな拡張: プロジェクトが成長し、動的な機能(例: データベース接続、認証)が必要になった際、開発者はプラットフォームを乗り換える必要がありません。Workersを基盤として、KV(KVS)、D1(SQLデータベース)、Durable Objects(ステートフル)といったCloudflareの他のサービスを簡単に追加できます。
- 将来性の提示: 「今は静的サイトでも、将来的にはフルスタックアプリにまで成長できる」という安心感と拡張性を提供することで、VercelやNetlifyといった競合に対する強力な差別化要因としています。
つまり、
Workers
の推奨は、単なる技術的な優位性だけでなく、開発者のライフサイクル全体をサポートするというビジネス戦略の現れなのです。なぜ「HTMLRewriter」はゲームチェンジャーとなり得るのか?
HTMLRewriter
の価値は、静的サイトと動的サイトの「良いとこ取り」を実現する点にあります。- パフォーマンスの維持: 従来の動的サイトは、サーバーでの処理待ちがボトルネックになりがちでした。
は、キャッシュされた静的HTMLをベースに、ユーザーに最も近いエッジで瞬時に変更を加えるため、体感速度をほとんど損ないません。HTMLRewriter
- Core Web Vitalsへの貢献: クライアントサイドJavaScriptでDOMを操作する場合に発生しがちな「表示のちらつき(レイアウトシフト)」を防ぎ、Googleが重視するユーザー体験指標上有利になります。
- アーキテクチャの簡素化: A/Bテストやパーソナライゼーションのために、複雑なバックエンドロジックやクライアントサイドの状態管理を構築する必要がなくなります。これにより、開発と運用のコストを大幅に削減できる可能性があります。
HTMLRewriter
は、これまでトレードオフの関係にあった「速度」と「動的機能」を両立させる、エッジコンピューティングならではの革新的なソリューションと言えます。戦略的示唆:プロジェクトを成功に導くための実践的アクションプラン
これらの分析と解釈から、皆様が取るべき具体的なアクションを提案します。
提案1:プロジェクト要件に基づくアーキテクチャ選定フレームワーク
技術選定で迷わないために、以下のフレームワークでプロジェクトの要件を整理し、最適な実行パターンを選択してください。
提案2:段階的進化(Progressive Enhancement)戦略の採用
「最初から完璧なSSR環境を構築しなければ」と考える必要はありません。以下の段階的アプローチを推奨します。
- Phase 1: Start Simple (MVP)
- まずは静的サイトホスティングで迅速にサービスを立ち上げます。
コマンドを使えば数分で完了しますcreate-cloudflare
。同時に、GitHub ActionsによるCI/CDパイプラインを構築し、開発の基盤を固めますcloudflare.com。cloudflare.com
- まずは静的サイトホスティングで迅速にサービスを立ち上げます。
- Phase 2: Add Dynamics (機能拡張)
- ユーザー認証やA/Bテストといった動的機能が必要になったら、**
**を導入します。既存の静的サイトの構成を大きく変えることなく、低リスクで機能を追加できます。HTMLRewriter
- ユーザー認証やA/Bテストといった動的機能が必要になったら、**
- Phase 3: Go Full-Stack (スケールアップ)
- ビジネスが拡大し、より高度なインタラクティビティやSEO対策が求められるようになった時点で、SSRへの移行を検討します。この段階では、RemixやHonopixiv.blogといったフレームワークの導入が視野に入ります。キャッシュ戦略(Cache APIやKVzenn.dev)を組み合わせることで、パフォーマンスを最大化します。cloudflare.com
- ビジネスが拡大し、より高度なインタラクティビティやSEO対策が求められるようになった時点で、SSRへの移行を検討します。この段階では、Remix
この戦略により、初期投資を抑えつつ、将来のスケールアップにも柔軟に対応できる技術的負債の少ない開発が可能になります。
今後の調査:継続的な改善と未来への展望
今回の分析を一過性のものとせず、継続的な改善につなげるために、以下のテーマについて追加調査を行うことを推奨します。
- 実践的なパフォーマンスベンチマーク:
- 静的サイト、
利用時、SSR利用時のTTFB(Time to First Byte)およびLCP(Largest Contentful Paint)を実測し、定量的に比較評価する。HTMLRewriter
- Cache APIとWorkers KVをキャッシュバックエンドとして使用した場合の、レスポンスタイムとグローバルな伝播速度の違いを検証する。
- 静的サイト、
- コスト対効果の分析:
- 各アーキテクチャ(静的、SSRなど)における、トラフィック量に応じたCloudflareの利用料金をシミュレーションし、TCO(総所有コスト)を比較する。
- 競合プラットフォームとの比較分析:
- Vercel、Netlify、AWS Amplifyといった主要な競合サービスと、Cloudflare Workersを「開発者体験」「パフォーマンス」「料金体系」「エコシステムの拡張性」の4つの軸で詳細に比較する。
- セキュリティアーキテクチャの検討:
- SSRや
を導入する際に考慮すべき具体的なセキュリティ脅威(例:XSS、CSRF、機密情報の漏洩)と、Cloudflareの機能を活用した緩和策を調査・整理する。HTMLRewriter
- SSRや
このレポートが参考になりましたか?
あなたの仕事の調査業務をワンボタンでレポートにできます。
📖 レポートに利用された参考文献
検索結果: 38件追加のソース: 0件チャット: 3件
259件の参考文献から41件の情報を精査し、約205,000語の情報を整理しました。あなたは約18時間の調査時間を削減したことになります🎉
調査された文献
259件
精査された情報
41件
整理された情報量
約205,000語
削減された時間
約18時間
🏷 静的から動的、SSRまで:Cloudflare Workersでの実行パターン3選
調査のまとめ
Cloudflare Workers上でReactやHTMLのコードを実行する環境を構築するには、静的サイトとしてデプロイする方法から、エッジで動的にHTMLを書き換える方法、さらにはサーバーサイドレ...
🏷 まずはここから!ReactやHTMLを静的サイトとして高速配信する基本手順
Cloudflare Workers | サーバーレスアプリケーションを構築
React Router、OpenNext、またはViteプラグインで静的ファイルをネイティブにサポートするHTML、CSS、クライアントサイドJSをアップロードし配信します。 詳細を見る.
Cloudflare Workersで静的コンテンツのhostingを試す - Qiita
CFWのCLIツールであるWranglerを使って、作成した静的サイトをKV(storage)に直接アップロードすることができます。リクエストがWorker Siteにヒットすると ...
GitHub × Cloudflare WorkersでHTML+CSS+JSだけの静的サイトを ...
.assetsignore はアセットとして配信しないファイルを指定するためのファイルらしいです。 指定方法は .gitignore と同じ。ただ否定が使えなさそう ...
Get started - CLI · Cloudflare Workers docs
Set up and deploy your first Worker with Wrangler, the Cloudflare Developer Platform CLI. This guide will instruct you through setting up and deploying your ...
How to Use CloudFlare Workers and KV to Serve a Static Site
To create a site deployment, CloudFlare has created the Wrangler command-line tool. Wrangler requires installation via either NPM (NodeJS ...
Static Assets - Workers - Cloudflare Docs
You can upload static assets (HTML, CSS, images and other files) as part of your Worker, and Cloudflare will handle caching and serving them to web browsers.
How to host React, Angular, Vue and other single-page applications ...
Cloudflare Workers introduced support for static assets in September 2024 as part of the effort to unify Cloudflare Workers and Pages.
GitHub - cloudflare/react-workers-template: Example project ...
#### Cloudflare WorkersでのReactアプリケーションデプロイ概要
「GitHub - cloudflare/react-workers-template」は、Cloudflare Workers上でReactアプリケーションをデプロイする具体的な方法を示すサンプルプロジェクトです。これは、Cloudflare WorkersでReactのコードを実行できる環境を構築したいユーザーにとって、実践的な出発点となる情報を提供しています。
#### プロジェクトの技術的特徴
このプロジェクトは、`create-react-app`ツールを使用して生成された標準的なReactアプリケーションです。デプロイにはCloudflareの`Workers Sites`機能が利用されています。`Workers Sites`は、Cloudflare Workersのグローバルなエッジネットワークを活用し、静的なウェブサイト(この場合はReactアプリケーション)を高速かつ効率的にホストするための機能です。
#### 学習リソース
自身のウェブサイトをCloudflare Workersにデプロイする方法を習得するために、このプロジェクトには対応するビデオチュートリアルとテキストチュートリアルが提供されています。これらは、ReactアプリケーションをCloudflare Workersの環境に展開する具体的な手順とベストプラクティスを学ぶための貴重なリソースとなります。
調査のまとめ
Cloudflare Workersを利用して、ReactやVueのようなシングルページアプリケーション(SPA)や、シンプルなHTMLサイトの実行環境を構築する方法について、調査結果を基に解説します...
🏷 高速化とSEOを実現:ViteやHonoを活用したSSR環境構築と動的HTML操作
Cloudflare Workers + Hono + Vite + React で SSR を実現する - Zenn
React で SSR を行う場合は Next.js や Remix などのフロントエンドフレームワークを使うのが一般的です。しかし今回は Vite 用の Hono プラグインを ...
React Router (formerly Remix) - Workers - Cloudflare Docs
React Router v7 is a full-stack React framework for building web apps, using the Cloudflare Vite plugin and running in the Workers runtime.
From Next.js to React Edge with Cloudflare Workers - Felipe Rohde
Preloads data on the server during SSR. Automatically hydrates data on the client without flicker. Maintains full typing between client and ...
vite-plugin-ssrt使ってReactとCloudflare WorkersでSSR Streaming ...
公式のexampleがあるが、不要なライブラリや設定が含まれていて、ピュアな最小構成とは言えないので、参考にしつつ自分でベアボーンを作成してみる。
Cloudflare Workers - vite-plugin-ssr
We use wrangler publish to deploy our worker to Cloudflare Workers. See the setup of the examples. Universal fetch(). When using Node.js for development and ...
"Just use Vite”… with the Workers runtime - The Cloudflare Blog
By using the new Environment API, released experimentally in Vite 6, your Worker code can now run inside the native Cloudflare Workers runtime (workerd).
Vitedge: SSR at the edge using Vite and Cloudflare Workers : r/vuejs
#### Vitedgeの概要
このコンテキストは、Redditのr/vuejsコミュニティにおける「Vitedge: SSR at the edge using Vite and Cloudflare Workers」というタイトルの投稿について言及しています。これは、ユーザーが求めている「Cloudflare WorkersでReactやHTMLのコードを実行できる環境を作る方法」の中でも、特にサーバーサイドレンダリング(SSR)に焦点を当てた情報として関連性が高いです。このタイトルから、`Vitedge`は、ビルドツールである`Vite`とエッジコンピューティングプラットフォームである`Cloudflare Workers`を組み合わせて、エッジロケーションでのサーバーサイドレンダリングを実現するプロジェクトであることが示唆されます。これにより、コンテンツの配信速度向上と低レイテンシが期待されます。
#### 投稿情報
このReddit投稿は`Gialfen`というユーザーによって共有されました。投稿先のコミュニティは`r/vuejs`であり、Vue.jsを使用する開発者がエッジでのSSRの実装に関心を持つ場合に有益な情報源となる可能性があります。
#### 詳細情報への示唆
コンテキストには、このプロジェクトに関する詳細情報が`github.com`で提供されていることが示唆されています。通常、GitHubリポジトリでは、プロジェクトのソースコード、具体的な実装方法、セットアップ手順、関連ドキュメント、および実際のコード例などが公開されています。しかし、提供されたコンテキストには、`github.com`というドメインの記述があるのみで、具体的なGitHubリポジトリのURLは含まれていません。
#### コンテキストの限界
提供されたコンテキストは、Redditの投稿のタイトルと、それがGitHubに関連しているという情報に限定されています。`Vitedge`プロジェクトの具体的な機能、技術的な詳細、サーバーサイドレンダリングの具体的な実装アプローチ、チュートリアル、デプロイ手順、または実践的なコード例といった、ユーザーが探している詳細な情報はこのコンテキストからは得られません。これらの詳細については、`github.com`上の該当するプロジェクトリポジトリを直接参照する必要があります。
Aslemammad/vite-plugin-cloudflare
Wrangler. Update your wrangler config to be compatible with the build ... vite-ssr-worker" main = "./dist/worker.js" compatibility_date = "2022-08-10 ...
yusukebe/hono-vite-react-stack
... wrangler dev dist-server/index.js", "deploy": "$npm_execpath run build ... npm uninstall hono-vite-react-stack npm i -D vite-ssr-components. Update your ...
cloudflare/vite-plugin doesn't allow optimizeDeps.exclude ...
error when starting dev server: Error: The following environment configurations are incompatible with the Cloudflare Vite plugin: - "ssr" environment: ` ...
SSR not working with the new Vite Cloudflare template on ...
SSR not working with the new Vite Cloudflare template on Cloudflare Pages #8911 ... npm run deploy which seems to do wrangler pages deploy ...
HTMLRewriter · Cloudflare Workers docs
The HTMLRewriter class allows developers to build comprehensive and expressive HTML parsers inside of a Cloudflare Workers application.
Introducing the HTMLRewriter API to Cloudflare Workers
With the HTMLRewriter within Cloudflare Workers, the API calls for dynamic content, (or even calls directly to Workers KV for user-specific ...
Dynamic page content with Cloudflare Workers - Fershad Irani
A brief guide on how Cloudflare Workers can allow you to add random content to your website without client-side JavaScript.
🏷 開発効率と性能を最大化する実践テクニック:デバッグ、CI/CD、最適化
GitHub Actions - Workers - Cloudflare Docs
Cloudflare provides an official action for deploying Workers. Refer to the following example workflow which deploys your Worker on push to the main branch.
Deploy to Cloudflare Workers with Wrangler · Actions - GitHub
Add wrangler-action to the workflow for your Workers/Pages application. The below example will deploy a Worker on a git push to the main branch.
gr2m/cloudflare-worker-github-app-example
The worker.js file is a Cloudflare Worker which is continuously deployed using GitHub Actions (see .github/workflows/deploy.yml). The worker does 2 things.
CI/CD · Cloudflare Workers docs
CI/CD for Cloudflare Workers can be set up using the integrated Workers Builds or external providers like GitHub Actions or GitLab CI/CD.
wrangler.tomlとの付き合い方を考える - Zenn
GitHubActionsでデプロイのCDを書いていきます。 結論としてはwrangler.tomlを丸ごとsecretsで渡します。 GHAのsecretsにWRANGLER_TOMLを作成しwrangler.
【CloudflareのWorkers】wranglerのCI/CDを試してみました
Workersのドキュメントを眺めていたところ、CI/CDの記述を見つけました。気になったのでGUTHUB ACTIONを使用して実際に試してみました。
Next.jsのISRを独自に構築する ~ Cloudflare Workers編(Cache API ...
そもそもCloudflare WorkersのCache APIは同一キーでもキャッシュがヒットしない場合がある。 キャッシュヒット率を考えるなら fetch だったり、 ...
Cloudflare Pagesで動かしているRemixでサーバーサイドキャッシュ ...
Cloudflare Pages (+ Functions) で動かしている Remix でサーバーサイドキャッシュする手法をご紹介します。 サーバーサイドキャッシュの ...
Cloudflare Workersで動的コンテンツをキャッシュする際の新たな ...
動的コンテンツのキャッシュ • 例えば、SSR/ISRの様にその時々で ... 他のキャッシュとしての選択肢 • Cache API • KVストア • Upstash • etc…
Caching and data revalidation in your Next.js app - Cloudflare Docs
You can configure your Next.js app to write cache entries to and read from either Workers KV or the Cache API. Workers KV (recommended).
An implementation of stale-while-revalidate for Cloudflare Workers
A. Req 1 gets old data and triggers a cache refresh. B. Req 2 gets same old data and triggers a cache refresh. C. Req 2 gets the fresh data triggered by Req ...
How to serve stale-while-revalidate using a worker?
Hi there, Since Cloudflare doesn't support stale-while-revalidate, we are trying to make this work using the Cache API + Worker.
Debugging - Workers - Cloudflare Docs
With this set up, you can run vite dev or vite preview and then select Debug Workers at the top of the Run & Debug panel to start debugging. Was ...
Debug, profile, and view logs for your Worker in Chrome Devtools ...
Workers - Debug, profile, and view logs for your Worker in Chrome Devtools — now supported in the Cloudflare Vite plugin · Debug code by setting ...
Overcoming the Cloudflare Asset File Limit Using GitHub Actions
Optimize the Build: We attempted to reduce the size of the problematic asset through code splitting, tree shaking, and other build optimizations ...
Build Failure Due to Pages Functions Bundle Size Exceeding Limit
Remove any dependencies you don't need, if you can tree shake a specific one better do that, try to find less heavy dependencies. Alternatively ...
調査のまとめ
Cloudflare WorkersでReactやHTMLのコードを実行する環境を構築した後の、より実践的で高度な開発ワークフローやパフォーマンス最適化手法について、調査結果を基に解説します。ローカル...
📖 レポートに利用されていない参考文献
検索結果: 141件追加のソース: 0件チャット: 0件
Cloudflare WorkersのHTMLRewriter を使って超簡単に他サイトの ...
Cloudflare WorkersのHTMLRewriter を使って超簡単に他サイトのOGPを取得し自ブログに表示してみた! 2023/06/04 に公開.
Cloudflare Workersを利用した静的配信ページへの動的なOGP ...
実現には様々な方法が考えられますが、今回はCloudflare WorkersのHTML Rewriterを用いて実現することにしました。以下のような形で実現します。 HTML ...
第5回 Webサイトのホスティングと、HTMLの書き換え - CodeGrid
Cloudflare Workersを使ってWebサイトをホスティングする方法を解説します。HTMLをストリーミングで書き換えることのできるHTMLRewriterを利用することで ...
そこまで静的でもなく...Cloudflare WorkersへのHTMLRewriter API ...
Cloudflare Workersをすでに使用している場合は、ドキュメント(サインアップなどは必要ありません)を参照するだけで、HTMLRewriterを使い始めることができ ...
サーバーレス入門。初めてでもわかるCloudflare Workersの書き方 ...
本文書では初めてCloudflare Workersを使う人を対象にアカウントの作成からデプロイの方法、シンプルなコードを使ってCloudflareの基本的な利用方法の説明 ...
Cloudflare Workersとは?サーバーレスで動作するJavaScript実行 ...
Cloudflare Workersは主にJavaScriptおよびTypeScriptで記述されることを想定して設計されています。Web標準のService Worker APIに似た記述方法を採用し ...
Cloudflare Workersのチュートリアルをやってみた - DevelopersIO
Cloudflare Workers では、リクエストを fetch イベントで受け取り、ハンドラ関数でレスポンスを返すと言った流れです。下記の構成だと、リクエストを受け取った後、Body ...
Workersを使って誰もがCloudflare上でJavaScriptを実行できるように ...
Workers KVを使って、cdnjsをサーバーレスに移行する
フロントエンド、バックエンド、データベースが1つのCloudflare Workerに
第10回:Cloudflareの紹介と運用のポイント - CADDi Tech Blog
Cloudflare Workersのユースケースと開発方法 - Speaker Deck
Commands - Wrangler · Cloudflare Workers docs
Folder of static assets to be served. Replaces Workers Sites. Visit assets for more information. --site string optional deprecated, use `--assets`.
Deploy a Static website on Cloudflare Workers and Pages - Medium
Step 2: Install Wrangler. To manage Cloudflare Workers from your local machine, you'll need Wrangler, the CLI tool for Cloudflare Workers.
Hosting a Static Website with Cloudflare Worker - github - Tenten AI
To host a static website with Cloudflare Workers, start by signing up for a Cloudflare account at cloudflare.com. Install the Wrangler CLI using ...
Hosting a static website for free in 15 minutes with Cloudflare ...
Missing: CLI tutorial
Hide Your API Keys on a Static Site with Cloudflare Workers
A step‑by‑step guide for GitHub Pages (or any static host). TL;DR — A static site can't keep secrets. Ship them to a Cloudflare Worker ...
Deploying a Static Site - Vite
Install Wrangler CLI. · Authenticate Wrangler with your Cloudflare account using wrangler login . · Run your build command. · Deploy using npx wrangler pages ...
Deploying a static site to Cloudflare Pages - Coding with Jesse
Cloudflare Pages works easiest with a static website. It's very possible to run websites with server-side code using Cloudflare Workers.
Deploy your Astro Site to Cloudflare | Docs
Install Wrangler CLI. Terminal window · If your site uses on demand rendering, install the @astrojs/cloudflare adapter. · Create a Wrangler configuration file.
Deploying Pages Functions with wrangler cli - Cloudflare Pages ...
Workers Sites: Extending the Workers platform with our own ...
Cloudflare Pages: FREE Hosting for Any Static Site | FOSS Engineer
GitHub - cloudflare/wrangler-action: ♀️ easily deploy ...
Not able to publish the static sites using the cloudflare workers ...
Your frontend, backend, and database — now in one Cloudflare ...
In September 2024, we introduced beta support for hosting, storing, and serving static assets for free on Cloudflare Workers — something that ...
Workers & Pages Pricing - Cloudflare
$0/mo ; Workers features. Includes 100k requests per day. Max 10ms CPU time per request ; Key-value storage features. 100,000 read operations per day. 1,000 write ...
Store and retrieve static assets · Cloudflare Workers KV docs
By storing static assets in Workers KV, you can retrieve these assets globally with low-latency and high throughput. You can then serve these assets directly.
Building a mimimal static site with Cloudflare Workers
Cloudflare recently announced static assets for workers. You can now deploy static files with a worker, instead of shipping worker code in your ...
Static Assets on Worker : r/CloudFlare - Reddit
What am I doing wrong ? I setup and uploaded the static assets in the worker and have "not" put the "run worker first" in the wrangler.jsonc ...
Workers for Platforms now supports Static Assets - Changelog
Static Sites: Host and serve HTML, CSS, JavaScript, and media files directly from Cloudflare's network, ensuring fast loading times worldwide.
Hosting Static Page Using Cloudflare Workers
simplest static asset hosting - Cloudflare Developers
Full-stack (SSR) · Cloudflare Pages docs
An open-source React.js framework for building full-stack applications. This section helps you deploy a full-stack Next.js project to Cloudflare Pages.
Cloudflare WorkersでSSRができると何が嬉しいか - Zenn
ほとんどのWebサービスはSSRなしでSPAとしてビルドし、Cloudflare PagesやGitHub Pagesに静的ファイルをのせて動かせば十分だと思います。 例えば僕が先日 ...
Cloudflare Workers + react router v7 でサクサクWebアプリを作る。
なお以下は、Cloudflare Workers + React Router v7 におけるリクエスト・レスポンスの大まかな流れ(SSR)です。 気になる方は見てみてください。
vite-plugin-ssr使ってReactとCloudflare WorkersでSSR Streamingする
>Cloudflare Workers micro-frontend のソースを色々弄って、フラグメントをQwikからReactに書き換える過程で、小規模でCloudflare WorkersでSSR StreamingできるReactのビ ...
React Router v7(Remix)&Cloudflare Workersで多国語(i18n ... - Qiita
Cloudflare Workers CLIを使って、React Router v7ベースのプロジェクトをテンプレートから簡単に生成します。 □ Note Cloudflareの登録過程、Deploy時の ...
Rendering React on the Edge with Flareact and Cloudflare Workers
Flareact is a new open-source React framework built for Cloudflare Workers. It allows you to render your React apps at the edge rather than ...
Deploy your React App to Cloudflare Workers #tutorial
A Beginner's Guide to Serverless React using Cloudflare Workers ...
How to Implement Server-Side Rendering (SSR) in React
Using with a Workers SSR React app · Issue #164 · cloudflare ...
GitHub - bbg/hono-react-cloudflare: Example project showing how to ...
Vite Environments · Cloudflare Workers docs
The Vite Environment API, released in Vite 6, is the key feature that enables the Cloudflare Vite plugin to integrate Vite directly with the Workers runtime.
Cloudflare Pages - vite-plugin-ssr
Pre-rendering with vite-plugin-ssr allows deployment to Cloudflare Pages. You can build locally, use GitHub actions, or let Cloudflare Pages build your app.
travis-r6s/vite-plugin-ssr-cloudflare-pages - GitHub
When adding your site to Cloudflare Pages, make sure to set the Build command to npm run build , and the Build output directory to /dist/assets .
パフォーマンスの高みを目指せ! CDNのエッジサーバーでSSR
Viteには『vite-plugin-ssr』というSSR用のプラグインがあります。ドキュメント内の「DEPLOY - Cloudflare Pages」の手順に従いましょう。今回は「Example ...
SSR web worker build with `noExternal: true` omit dynamic imports ...
cloudflare/workers-types examples - CodeSandbox
vite-plugin-cloudflare-workers · Issue #223 · vikejs/vike · GitHub
Vite 2.7.0-beta.4 regression when building for SSR targeting ...
How does server the deployment work in Cloudflare remix ...
... SSR. So...how. One additional question, it was quite nice having ... I believe Wrangler will load the server assets from the functions folder by ...
🚀 Feature Request: implement Vite plugin for Wrangler's ...
To support this, we should implement a Vite plugin that mimics Wrangler's ... SSR build via Vite and the second as part of wrangler deploy ). If ...
vite/docs/guide/static-deploy.md at main
SSR refers to front-end frameworks that support running the same application ... Authenticate Wrangler with your Cloudflare account using wrangler login .
Vite plugin has race condition with HMR - A hanging ...
... [vite] (ssr) page reload app/welcome/welcome.tsx. Oh! I should ... I upgraded all vite and cloudflare/wrangler and react router deps to ...
[@hono/vite-dev-server] feature request: Support wrangler. ...
I am considering switching from Wrangler to Vite + dev-Server. However, since my wrangler ... ssr: { external: ['__STATIC_CONTENT_MANIFEST ...
Cloudflare Vite Plugin for React Router v7 [Auxiliary workers ...
HTMLRewriter dynamic text replacement on all elements
The proper fix here is for Cloudflare to update the HTMLRewriter such that it only passes text chunks to the client after lastInTextNode is true.
How to replace the content of an element using HTMLRewriter
I am writing a script that replaces the content of an element with new (static) text. Nothing fancy. I am new to working with Workers and HTMLRewriter.
Move content with HTMLRewriter delete and append? - Workers
I am dynamically showing and hiding content using HTMLRewriter. Now I am trying to move content from the top of the page to the bottom. Is that possible?
Access nested elements in HTMLRewriter - Cloudflare Workers
I have to access a nested element using HTMLRewriter in a Cloudflare worker. Example <div data-code="ABC"> <div class="title"> ...
HTML Rewriter : If element contains text - do something with attributes
Please share an example with HTMLRewriter - if element contains text, for example <a> or <p> then do something with attributes.
HTMLRewriter dynamic text replacement on all elements - Page 2
Try using text.replace(content, { html: true }) . The { html: true } option tells HTMLRewriter not to escape any of the new content, but instead to insert it ...
Turn any page into a JSON API with Cloudflare Workers - Mike Street
The original purpose of the HTMLRewriter is to modify the response - you could use it to add some dynamic content to a static page, for example.
Asynchronous HTMLRewriter for Cloudflare Workers
A History of HTML Parsing at Cloudflare: Part 2
Localizing applications with Cloudflare Workers' new streaming ...
Serverless Rendering with Cloudflare Workers
Localize a website with HTMLRewriter · Cloudflare Pages docs
HTMLRewriter escaping ampersand when using text() method ...
Cloudflare Workers プロジェクト作成から GitHub Actions 自動 ...
Cloudflare Workers プロジェクト作成から GitHub Actions 自動デプロイまで最速でやる ... Cloudflare の公式ドキュメントはこちら。 External CI/CD · ...
Cloudflare Workers + Github Actionsで一つのリポジトリから環境毎 ...
Cloudflare Workers で Github Actions を使用して環境毎にデプロイする方法で少し詰まったのでその際のメモです。
GitHub ActionsでCloudflare Workersをデプロイする - ひよこまめ
このページで紹介する方法は、Cloudflare WorkersのStatic Assets機能を利用したワーカーをデプロイすることを想定します。 デプロイするワーカーの設定 ...
GitHub Actionsを使ってCloudflare Workersを自動にデプロイする
1. Cloudflare Workers プロジェクトとGitHub リポジトリを作成 · 2. CloudflareのAPI TokenとAccount IDを取得 · 3. GitHub Actionsを設定 · 4. Workflowを ...
Deploy a GitHub Application to Cloudflare Workers - DEV Community
Create a new GitHub actions secret named CF_API_TOKEN , get its value from Cloudflare's create a new token using the "Edit Cloudflare Workers" ...
Deploy to Cloudflare pages from Github actions - Ana's Dev Scribbles
In this article, I'll walk you through two methods for setting up deployments on Cloudflare Pages. The first uses Cloudflare's built-in automatic deployments.
Deploy to Cloudflare buttons · Cloudflare Workers docs
Deploying Workers with GitHub Actions + Serverless
A Full CI/CD Pipeline for Cloudflare Workers with Github Actions ...
Introducing Deploy Buttons
How to Deploy a Hugo Site to Cloudflare Workers Sites with GitHub ...
Versions & Deployments · Cloudflare Workers docs
Cloudflare Workers の wrangler.toml に環境変数を書かないで管理する
wrangler secret put <key> で設定することもできます。デプロイ先とローカルで同じ API キーを使う場合はこちらで設定する方が良いと思います。 挙動を ...
Configuration - Wrangler · Cloudflare Workers docs
Use a configuration file to customize the development and deployment setup for your Worker project and other Developer Platform products.
How to handle the wrangler.toml configuration file? #7115 - GitHub
I am using Cloudflare Workers to build open source projects, but every time I have a question, what do I do with the wrangler.toml file?
Cloudflare Workersの自動デプロイの失敗を解決した #GitHub - Qiita
GitHub Actionsでインストールされて動作するWrangler (v3.90.0)は wrangler.toml がないとエラーが発生されます。 これが、今回の自動デプロイ失敗の原因 ...
Allow to include secrets in wrangler's automatically generated type ...
Currently, there is no way to let wrangler know about secrets so that it can include them in the automatically generated type definitions ( wrangler types ...
How I Set Up CI/CD Pipeline for Cloudflare Worker - Jerry Ng
Guide on how to set up full Cloudflare Worker CI/CD using GitHub Actions. Run smoke and integration tests on CI/CD using k6 and wrangler ...
Cloudflare Workersでサーバレス開発 part2 GitHub ActionsによるCI ...
今回はGitHub ActionsとWranglerによるCI/CD対応についてデプロイ周りの補足説明をします。 Wrangler GitHub Action. WranglerによるGitHub Action用の ...
wrangler.toml Secrets · Issue #17 · cloudflare/wrangler-action ...
include secrets in wrangler publish · Issue #911 · cloudflare ...
feature request: secrets publishing · Issue #19 · cloudflare ...
GitHub - eidam/gitlab-wrangler-action: ✨ Zero-config Cloudflare ...
BUG: wrangler should fail if secrets put is used in a pages ...
Announcing Pages support for monorepos, wrangler.toml, database ...
Using the Cache API - Workers - Cloudflare Docs
Check whether the value is already available in the cache. If not, you will need to fetch it from origin, and store it in the cache.
Cache - Workers - Cloudflare Docs
The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
How the Cache works · Cloudflare Workers docs
The cache can provide ephemeral, data center-local storage, as a convenient way to frequently access static or dynamic content.
New Options for Caching Dynamic Content with Cloudflare Workers
Cache dynamic content • For example, there are patterns such as SSR/ISR where the content changes each time it is accessed, or where the ...
Simple Caching with Cloudflare Workers - YouTube
KV Architecture: https://developers.cloudflare.com/workers/learning/how-kv-works/ KV in Workers: ...
Introducing the Workers Cache API: Giving you control over how ...
Customize cache behavior with Workers · Cloudflare Cache (CDN) docs
Cloudflare Workers as an API gateway
Serving our single page application using Cloudflare Workers | by ...
Custom caching strategy using Cloudflare Workers | by Akash ...
Support for stale-while-revalidate - Cloudflare Community
With the stale-while-revalidate directive, your users no longer need to wait for responses from origins, because stale content is rapidly served ...
Revalidation and request collapsing - Cache / CDN - Cloudflare Docs
For stale (expired TTL) content, Cloudflare will send a revalidation request to the origin. If the stale content is still valid Cloudflare will ...
How to get stale-while-revalidate to work with Cloudflare cache rules?
However, on returning to page after 30 minutes, I am getting cache MISS response. So how do I make stale-while-revalidate work as expected?
Stale-while-revalidate Does not work at all - Cloudflare Community
Cloudflare is not serving staled content while revalidating expired cached request, since it is serving the updated php output.
How to disallow STALE content being served when origin is down?
What Cloudflare does for stale-while-revalidate is it will only serve a stale asset on revalidation when there are concurrent requests to the ...
HTTP Cache: Finding a performance improvement on frameworks ...
Stale while revalidate. Sometimes, it's okay to serve a stale cache of the resource. For that, there is stale-while-revalidate : HTTP/1.1 200 ...
Origin Cache Control · Cloudflare Cache (CDN) docs
stale-while-revalidate=<seconds> — When present in an HTTP response, indicates caches may serve the response in which it appears after it becomes stale, up to ...
Does Cloudflare support stale-while-revalidate?
How to disallow STALE content being served when origin is down ...
workbox-strategies | Modules | Chrome for Developers
Keeping things fresh with stale-while-revalidate | Articles | web.dev
DevTools - Workers - Cloudflare Docs
Run your Worker locally, by running wrangler dev; Press the D key from your terminal to open DevTools in a browser tab. Vite. Run your Worker ...
Development & testing · Cloudflare Workers docs
You can build, run, and test your Worker code on your own local machine before deploying it to Cloudflare's network. This is made possible through Miniflare.
Breakpoints - Workers - Cloudflare Docs
When developing a Worker locally using Wrangler or Vite, you can debug via breakpoints in your Worker. Breakpoints provide the ability to ...
Containers don't work with @cloudflare/vite-plugin #9793 - GitHub
Containers don't work in local development with the @cloudflare/vite-plugin. When a container endpoint is attempted to be fetched one gets ...
Debugging - Workers - Cloudflare Docs
Select Debug Workers tests at the top of the Run & Debug panel to open an inspector with Vitest and attach a debugger to the Workers runtime.
Debugging a deploy issue in a Remix + Vite Project - Answer Overflow
Running pages dev locally is a great way to debug issues. Just off the top of my head tho, one thing I encountered when migrating to Vite ...
How to put breakpoints and debug Cloudflare Workers?
At present (March 2022), breakpoints are not yet supported by Cloudflare Workers. We'd like to support them eventually.
Vite - Remix
To configure bindings for Cloudflare resources: For local development with Vite or Wrangler, use wrangler.toml; For deployments, use the Cloudflare dashboard.
Attaching a Debugger · Cloudflare Workers docs
Better debugging for Cloudflare Workers, now with breakpoints
BUG: @cloudflare/vite-plugin fails to run project with Stripe ...
Tanstack Start] Tanstack Start has updated to use vite directly ...
My journey through the ESM Tree Shaking forest - Pixelastic
First, I realized that the bundle size was way too big for what my function was actually doing. I had ~100 lines of code at most, but my bundle ...
TypeScript support, build too large · Issue #19 - GitHub
When I use bundle optimize helper it says a bunch of deps are not tree shakeable because they're not using ES modules.
Tree Shaking | Sentry for Cloudflare
Learn how to reduce Sentry bundle size by tree shaking unused code. The Sentry SDK supports tree shaking in various ways. To fully utilize the tree shaking ...
Optimize your client-side bundle size by tree shaking your ... - Arc XP
Tree shaking only works for your modules including ES6 entry point and uses ES6 imports. When your imports are referring to a module that is ...
Limits · Cloudflare Workers docs
Missing: tree shaking
Tree-shaking, the horticulturally misguided algorithm (2023)
- Use brotli compression for serving wasm bundles to the browser, and make sure your web server is setup to use the brotli compressed files. ( ...
Pages Functions bundle size is over the limit of 25.0 MiB
Barely change bundle size based on Cloudflare ... Sumup of solution: Load specific things from packages if package support tree shaking.
Optimize your Bundle Size with SWC and GraphQL Codegen | Hive
This plugin uses the SWC compiler to optimize the generated code, reducing the bundle size for all your SWC projects!
Tree shaking in JavaScript (Optimize the bundle size of your application) | Complete Example + Setup
Tree shaking · Issue #151 · supabase/supabase-js · GitHub
Optimize your bundle size by eliminating dead code / tree-shaking ...
Ant Design Bundle Size Optimization: The Tree Shaking Approach ...
📊 ドメイン統計
参照ドメイン数: 55引用済み: 14総文献数: 259
1
引用: 14件/ 総数: 99件
引用率: 14.1%
2
引用: 8件/ 総数: 52件
引用率: 15.4%
3
引用: 5件/ 総数: 12件
引用率: 41.7%
4
引用: 1件/ 総数: 7件
引用率: 14.3%
5
引用: 1件/ 総数: 4件
引用率: 25.0%
6
引用: 1件/ 総数: 4件
引用率: 25.0%
7
引用: 1件/ 総数: 4件
引用率: 25.0%
8
引用: 1件/ 総数: 3件
引用率: 33.3%
9
引用: 1件/ 総数: 3件
引用率: 33.3%
10
引用: 1件/ 総数: 2件
引用率: 50.0%
11
引用: 1件/ 総数: 1件
引用率: 100.0%
12
引用: 1件/ 総数: 1件
引用率: 100.0%
13
引用: 1件/ 総数: 1件
引用率: 100.0%
14
引用: 1件/ 総数: 1件
引用率: 100.0%
15
引用: 0件/ 総数: 6件
引用率: 0.0%
16
引用: 0件/ 総数: 4件
引用率: 0.0%
17
引用: 0件/ 総数: 4件
引用率: 0.0%
18
引用: 0件/ 総数: 4件
引用率: 0.0%
19
引用: 0件/ 総数: 3件
引用率: 0.0%
20
引用: 0件/ 総数: 2件
引用率: 0.0%
21
引用: 0件/ 総数: 2件
引用率: 0.0%
22
引用: 0件/ 総数: 2件
引用率: 0.0%
23
引用: 0件/ 総数: 2件
引用率: 0.0%
24
引用: 0件/ 総数: 2件
引用率: 0.0%
25
引用: 0件/ 総数: 2件
引用率: 0.0%
26
引用: 0件/ 総数: 2件
引用率: 0.0%
27
引用: 0件/ 総数: 2件
引用率: 0.0%
28
引用: 0件/ 総数: 1件
引用率: 0.0%
29
引用: 0件/ 総数: 1件
引用率: 0.0%
30
引用: 0件/ 総数: 1件
引用率: 0.0%
31
引用: 0件/ 総数: 1件
引用率: 0.0%
32
引用: 0件/ 総数: 1件
引用率: 0.0%
33
引用: 0件/ 総数: 1件
引用率: 0.0%
34
引用: 0件/ 総数: 1件
引用率: 0.0%
35
引用: 0件/ 総数: 1件
引用率: 0.0%
36
引用: 0件/ 総数: 1件
引用率: 0.0%
37
引用: 0件/ 総数: 1件
引用率: 0.0%
38
引用: 0件/ 総数: 1件
引用率: 0.0%
39
引用: 0件/ 総数: 1件
引用率: 0.0%
40
引用: 0件/ 総数: 1件
引用率: 0.0%
41
引用: 0件/ 総数: 1件
引用率: 0.0%
42
引用: 0件/ 総数: 1件
引用率: 0.0%
43
引用: 0件/ 総数: 1件
引用率: 0.0%
44
引用: 0件/ 総数: 1件
引用率: 0.0%
45
引用: 0件/ 総数: 1件
引用率: 0.0%
46
引用: 0件/ 総数: 1件
引用率: 0.0%
47
引用: 0件/ 総数: 1件
引用率: 0.0%
48
引用: 0件/ 総数: 1件
引用率: 0.0%
49
引用: 0件/ 総数: 1件
引用率: 0.0%
50
引用: 0件/ 総数: 1件
引用率: 0.0%
51
引用: 0件/ 総数: 1件
引用率: 0.0%
52
引用: 0件/ 総数: 1件
引用率: 0.0%
53
引用: 0件/ 総数: 1件
引用率: 0.0%
54
引用: 0件/ 総数: 1件
引用率: 0.0%
55
引用: 0件/ 総数: 1件
引用率: 0.0%
このレポートが参考になりましたか?
あなたの仕事の調査業務をワンボタンでレポートにできます。