Skip to content

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

カスタムドメインでプレビュー URL を設定する

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

ワイルドカード DNS、ルート、TLS を設定し、exposePort() のプレビュー URL を自分のドメインで使えるようにします。Worker とサンドボックスイメージのデプロイは Sandbox アプリケーションをデプロイする を参照してください。

プレビュー URL にはワイルドカード DNS が必要です。公開したポートごとに、https://8080-abc123.yourdomain.com のような一意のサブドメインが付くためです。

.workers.dev ドメインはワイルドカードサブドメインに対応していません。ローカル開発以外の公開ホスト名でプレビュー URL に到達する必要がある場合は、カスタムドメインが必要です。

前提条件

  • ドメイン付きの有効な Cloudflare ゾーン
  • exposePort() を使う Worker
  • Wrangler CLI がインストール済み
  • サンドボックスアプリがすでに デプロイ可能(Worker + イメージ)

セットアップ

ワイルドカード DNS レコードを作成する

Cloudflare ダッシュボードでドメインを開き、A レコードを作成します。

  • Type: A
  • Name: *(ワイルドカード)
  • IPv4 address: 192.0.2.0
  • Proxy status: Proxied(オレンジの雲)

これで、すべてのサブドメインが Cloudflare のプロキシ経由になります。IP アドレス 192.0.2.0 は、プロキシ時に Cloudflare が認識するドキュメント用アドレス(RFC 5737)です。

Worker のルートを設定する

Wrangler の設定にワイルドカードルートを追加します。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-sandbox-app",
	"main": "src/index.ts",
	// Set this to today's date
	"compatibility_date": "2026-09-20",
	"routes": [
		{
			"pattern": "*.yourdomain.com/*",
			"zone_name": "yourdomain.com"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-sandbox-app"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-09-20"

[[routes]]
pattern = "*.yourdomain.com/*"
zone_name = "yourdomain.com"

yourdomain.com を実際のドメインに置き換えます。これで、すべてのサブドメインリクエストが Worker に届き、Cloudflare が SSL 証明書を自動で発行できるようになります。

ルートを適用する

ルート設定を反映するため、Worker を再デプロイします。

npx wrangler deploy

このデプロイでサンドボックスイメージやパッケージも変わる場合は、ロールアウトとパッケージ/イメージの組み合わせについて Sandbox アプリケーションをデプロイする に従ってください。ルートだけの変更なら、通常のデプロイで問題ありません。コンテナーイメージとインスタンスの更新を意図的にスキップするときだけ --containers-rollout=none を使います。

確認

プレビュー URL が動くことを確認します。

// Extract hostname from request
const { hostname } = new URL(request.url);

const sandbox = getSandbox(env.Sandbox, "test-sandbox");
await sandbox.startProcess("python -m http.server 8080");
const exposed = await sandbox.exposePort(8080, { hostname });

console.log(exposed.url);
// https://8080-test-sandbox.yourdomain.com

ブラウザーで URL を開き、サービスにアクセスできることを確認します。

トラブルシューティング

  • CustomDomainRequiredError: Worker が .workers.dev だけにデプロイされていないこと、ワイルドカード DNS レコードとルートが正しく設定されていることを確認します。
  • SSL/TLS エラー: 証明書の発行まで数分待ちます。DNS レコードがプロキシされていること、ダッシュボードの SSL/TLS モードが "Full" または "Full (strict)" であることを確認します。Worker がサブドメイン(例: sandbox.yourdomain.com)にある場合、Universal SSL は第 2 レベルのワイルドカード *.sandbox.yourdomain.com をカバーしません。選択肢は、このページ先頭の TLS に関する注意 を参照してください。
  • プレビュー URL が解決されない: ワイルドカード DNS レコードがあり、プロキシされていることを確認します。DNS 伝播まで 30〜60 秒待ちます。
  • ポートにアクセスできない: サービスが localhost ではなく 0.0.0.0 にバインドしていること、Worker の fetch ハンドラーで最初に proxyToSandbox() を呼んでいることを確認します。

詳しいトラブルシューティングは Workers のルーティングドキュメント を参照してください。

関連

役に立ちましたか?