Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

React + Vite

最終更新 Markdown で表示Agent セットアップ

React は、ユーザーインターフェイスを作るフレームワークです。再利用できる UI コンポーネントを作り、アプリケーションの状態を効率よく管理できます。React でシングルページアプリケーション(SPA)を作り、Cloudflare Workers 上のバックエンド API と組み合わせてフルスタックアプリケーションにできます。

このガイドでは、React + Vite アプリケーションを Cloudflare Workers にデプロイします。create-cloudflare CLI(C3)で新規プロジェクトを作るか、既存の React + Vite プロジェクトを適応できます。

CLI から始める - React SPA、Cloudflare Workers API、高速な開発向けの Cloudflare Vite プラグイン を含むフルスタックアプリを足場にします。

npm create cloudflare@latest -- my-react-app --framework=react

またはすぐデプロイする - React、Workers API、Vite を使うフルスタックアプリを作成します。CI/CD とプレビューも用意されます。

Workers にデプロイ

  1. create-cloudflare CLI(C3)で新規プロジェクトを作成する

    npm create cloudflare@latest -- my-react-app --framework=react

    このプロジェクトの構成は?

    プロジェクトのファイルツリーを簡略化すると、次のとおりです。

    • my-react-app
      • src/
        • App.tsx
      • worker/
        • index.ts
      • index.html
      • vite.config.ts
      • wrangler.jsonc

    wrangler.jsoncWrangler 設定ファイル です。 このファイルでは:

    • mainworker/index.ts を指します。これが Worker で、バックエンド API として動きます。
    • assets.not_found_handlingsingle-page-application です。React SPA が扱うルートは Worker に届かず、課金されません。
    • Cloudflare の開発者プラットフォーム上のリソースへのバインディングを足す場合は、ここで設定します。バインディング を参照してください。

    vite.config.tsCloudflare Vite プラグイン を使うように設定されています。Worker を Cloudflare Workers ランタイムで実行し、ローカル開発環境を本番に近づけます。

    worker/index.ts はバックエンド API で、テキストレスポンスを返す /api/ エンドポイントが 1 つあります。 src/App.tsx では、React アプリがこのエンドポイントを呼び出してメッセージを取得し、表示します。

  2. Cloudflare Vite プラグイン でローカル開発する

    プロジェクトを作成したあと、プロジェクトディレクトリで次のコマンドを実行し、ローカル開発サーバーを起動します。

    npm run dev

    ローカル開発では何が起きている?

    このプロジェクトはローカル開発とビルドに Vite を使うため、ホットモジュールリプレースメント(HMR)を含む Vite の機能がすべて使えます。

    加えて、vite.config.ts は Cloudflare Vite プラグインを使うように設定されています。アプリケーションは本番と同じ Cloudflare Workers ランタイムで動き、バインディングのローカルエミュレーションにもアクセスできます。

  3. プロジェクトをデプロイする

    プロジェクトは、自分のマシンまたは任意の CI/CD(Cloudflare の Workers Builds を含む)から、*.workers.dev サブドメインまたは Custom Domain にデプロイできます。

    次のコマンドでビルドとデプロイを行います。CI を使う場合は、"デプロイコマンド" の設定を適切に更新してください。

    npm run deploy

すでに React + Vite アプリケーションがある場合は、Cloudflare Vite プラグインで Cloudflare Workers 向けに適応できます。既存のコードを保ったまま、静的アセットと任意の API Worker 付きで Cloudflare のエッジネットワークにデプロイできます。

  1. プロジェクトディレクトリを開く

    既存の React + Vite プロジェクトを、使っているエディターで開きます。まだない場合は、先に Vite で新規プロジェクトを足場にします。

    npm create vite@latest -- my-react-app --template react-ts

    次に、my-react-app ディレクトリをエディターで開きます。

  2. Cloudflare Vite プラグインを追加する

    Cloudflare の依存関係を追加する

    npm i -D @cloudflare/vite-plugin wrangler

    プロジェクトに Cloudflare Vite プラグインを追加する

    vite.config.ts で、フレームワークのプラグインのあとに Cloudflare Vite プラグインを追加します。

    vite.config.tsts
    import { defineConfig } from "vite";
    import react from "@vitejs/plugin-react";
    import { cloudflare } from "@cloudflare/vite-plugin";
    
    export default defineConfig({
    	plugins: [react(), cloudflare()],
    });

    Cloudflare Vite プラグインは、既定では設定不要です。アプリケーションのルートにある wrangler.jsoncwrangler.json、または wrangler.toml を探します。

    設定オプションは API リファレンス を参照してください。

  3. Wrangler 設定ファイルを追加する

    Worker の設定ファイルを作成する

    プロジェクトのルートに wrangler.jsonc ファイルを作成します。

    {
      "$schema": "./node_modules/wrangler/config-schema.json",
      "name": "my-app",
      // Set this to today's date
      "compatibility_date": "2026-09-20",
      "assets": {
        "not_found_handling": "single-page-application"
      }
    }
    name = "my-app"
    # Set this to today's date
    compatibility_date = "2026-09-20"
    
    [assets]
    not_found_handling = "single-page-application"

    not_found_handling の値は single-page-application に設定しています。 存在しないパスへのリクエストはすべて index.html を返します。React Router など、クライアントサイドルーティングのソリューションではこの設定が必要です。

    Cloudflare プラグインでは、Vite のデフォルト動作の代わりに assets のルーティング設定を使います。 これにより、開発中も本番へデプロイしたときも、アプリケーションの ルーティング設定 は同じように動きます。

    Vite でアセットを設定する場合、directory フィールドは使いません。 出力設定の directory は、クライアントのビルド出力を自動的に指します。 詳しくは 静的アセット を参照してください。

  4. .gitignore ファイルを更新する

    .gitignore ファイルを更新する

    Workers を開発する際、Git に保存すべきでない追加ファイルが使われたり生成されたりします。 次の行を .gitignore ファイルに追加します。

    .gitignoretxt
    .wrangler
    .dev.vars*
  5. ローカルで開発する

    開発サーバーを起動する

    フレームワークの開発コマンドを実行し、Vite の開発サーバーを起動して、アプリケーションが想定どおりに動くことを確認します。

    npm run dev

    フロントエンドのみのアプリケーションであれば、このあとビルド、プレビュー、デプロイできます。 以降のセクションでは、さらに進めて API Worker を追加する方法を説明します。

  6. プロジェクトをビルドしてデプロイする

    アプリケーションをビルドする

    ビルドコマンドを実行して、アプリケーションをビルドします。

    npm run build

    dist ディレクトリには、クライアントのビルド出力が client サブディレクトリに入り、Worker のコードと出力された wrangler.json 設定ファイルが同じ場所に置かれます。

    アプリケーションをプレビューする

    preview コマンドを実行して、アプリケーションが想定どおりに動作することを確認します。

    npm run preview

    このコマンドは、ビルド出力をローカルの Workers ランタイムで実行します。本番環境での動作に近い形で確認できます。

    Cloudflare へデプロイする

    デプロイコマンドを実行して、アプリケーションを Cloudflare へデプロイします。

    npx wrangler deploy

    このコマンドは、ビルド出力に含まれる wrangler.json を自動的に使います。

既存プロジェクトに API Worker を追加する

既存の React + Vite プロジェクトに API Worker を追加する場合は、次の手順も実施します。

  1. Worker コード用に TypeScript を設定する

    Workers の TypeScript 型を追加する

    npm i -D @cloudflare/workers-types

    Node の TypeScript 設定を継承し、Workers の型を追加する tsconfig.worker.json を作成します。

    tsconfig.worker.jsonjsonc
    {
    	"extends": "./tsconfig.node.json",
    	"compilerOptions": {
    		"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.worker.tsbuildinfo",
    		"types": ["@cloudflare/workers-types/2023-07-01", "vite/client"],
    	},
    	"include": ["worker"],
    }

    次に、ルートの tsconfig.json から、この新しい設定を参照します。

    tsconfig.jsonjsonc
    {
    	"files": [],
    	"references": [
    		{ "path": "./tsconfig.app.json" },
    		{ "path": "./tsconfig.node.json" },
    		{ "path": "./tsconfig.worker.json" },
    	],
    }
  2. 設定に Worker のエントリポイントを追加する

    設定に Worker のエントリポイントを追加する

    Wrangler 設定ファイルを更新し、Worker のエントリポイントを指す main フィールドを追加します。

    {
      "$schema": "./node_modules/wrangler/config-schema.json",
      "name": "my-app",
      // Set this to today's date
      "compatibility_date": "2026-09-20",
      "main": "./worker/index.ts",
      "assets": {
        "not_found_handling": "single-page-application"
      }
    }
    name = "my-app"
    # Set this to today's date
    compatibility_date = "2026-09-20"
    main = "./worker/index.ts"
    
    [assets]
    not_found_handling = "single-page-application"

    main フィールドは、Worker コードのエントリファイルを指定します。

  3. API Worker を追加する

    API Worker を追加する

    次の内容で worker/index.ts ファイルを作成します。

    worker/index.tsts
    export default {
    	fetch(request) {
    		const url = new URL(request.url);
    
    		if (url.pathname.startsWith("/api/")) {
    			return Response.json({
    				name: "Cloudflare",
    			});
    		}
    
    		return new Response(null, { status: 404 });
    	},
    } satisfies ExportedHandler;

    前のコードブロックで定義した Worker は、静的アセットに一致しないナビゲーション以外のリクエストで呼び出されます。 pathname/api/ で始まる場合は JSON レスポンスを返し、それ以外は 404 レスポンスを返します。

  4. クライアントから API を呼び出す

    React コンポーネントから API を呼べます。たとえば src/App.tsx では:

    src/App.tsxtsx
    import { useState } from "react";
    
    function App() {
    	const [name, setName] = useState("unknown");
    
    	return (
    		<div className="card">
    			<button
    				onClick={() => {
    					fetch("/api/")
    						.then((res) => res.json() as Promise<{ name: string }>)
    						.then((data) => setName(data.name));
    				}}
    			>
    				Name from API is: {name}
    			</button>
    		</div>
    	);
    }
    
    export default App;

アセットのルーティング

React を SPA として使う場合は、Wrangler 設定ファイルで not_found_handling = "single-page-application" を設定します。

デフォルトでは、Cloudflare はまずリクエストパスを静的アセットのパスと照合します。このパスは、アップロードしたアセットディレクトリのファイル構造に基づきます。対象は、Wrangler 設定の assets.directory で指定したディレクトリ、または Cloudflare Vite plugin の場合はクライアントビルドの出力ディレクトリです。一致しない場合は、Worker があれば呼び出します。Worker がない場合、または Worker がアセットバインディングを使う場合、Cloudflare は not_found_handling で設定した動作にフォールバックします。

静的アセットでのルーティングの仕組みと、この動作のカスタマイズについては、ルーティングのドキュメント を参照してください。

React でバインディングを使う

プロジェクトには ./worker/index.ts の Worker も含められます。React アプリケーションのバックエンド API として使えます。React アプリケーションから Workers バインディングへ直接アクセスはできませんが、この Worker 経由でやり取りできます。React アプリケーションから Worker へ fetch() リクエスト を送り、Worker がリクエストを処理してバインディングを使います。Workers バインディングの設定 を参照してください。

バインディングを使うと、アプリケーションを Cloudflare Developer Platform と完全に統合でき、コンピュート、ストレージ、AI などへアクセスできます。

役に立ちましたか?