Skip to content

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

セッション録画

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

ブラウザー自動化が失敗したり、想定外の動きをしたりすると、何が起きたかを把握しにくいことがあります。セッション録画は、DOM の変化、マウスとキーボードのイベント、ページ遷移を、動画ではなく構造化 JSON イベントとして記録します。軽量で検査しやすいです。録画は rrweb を使い、セッションごとにオプトインです。

セッション録画を有効にする

セッション録画は、最初のセッション取得時に有効にする必要があります。既存セッションへの再接続時には有効にできません。

puppeteer.launch() または playwright.launch()recording: true を渡します。

import puppeteer from "@cloudflare/puppeteer";

interface Env {
	MYBROWSER: Fetcher;
}

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const browser = await puppeteer.launch(env.MYBROWSER, { recording: true });
		const page = await browser.newPage();

		await page.goto("https://example.com");
		// ... your automation steps ...

		const sessionId = browser.sessionId();
		await browser.close();

		return new Response(`Session recorded: ${sessionId}`);
	},
};
import { launch } from "@cloudflare/playwright";

interface Env {
	MYBROWSER: Fetcher;
}

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		const browser = await launch(env.MYBROWSER, { recording: true });
		const page = await browser.newPage();

		await page.goto("https://example.com");
		// ... your automation steps ...

		const sessionId = browser.sessionId();
		await browser.close();

		return new Response(`Session recorded: ${sessionId}`);
	},
};

CDP エンドポイントで有効にする

CDP エンドポイント を使い、任意の環境から Browser Run に接続する場合は、WebSocket URL にクエリパラメーター recording=true を追加します。

wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/devtools/browser?recording=true&keep_alive=600000

たとえば MCP クライアントでセッション録画を有効にするには、クライアント設定の --wsEndpoint URL に recording=true を追加します。

{
	"mcpServers": {
		"browser-rendering": {
			"command": "npx",
			"args": [
				"-y",
				"chrome-devtools-mcp@latest",
				"--wsEndpoint=wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/devtools/browser?recording=true&keep_alive=600000",
				"--wsHeaders={\"Authorization\":\"Bearer <API_TOKEN>\"}"
			]
		}
	}
}

ほかの MCP クライアントと、Puppeteer または Playwright での CDP の使い方は、CDP ドキュメント を参照してください。

録画を見る

セッションが閉じたあと、録画は Cloudflare ダッシュボードの Browser Run > Runs で利用できます。セッション横の録画アイコンを選び、録画ビューアーを開きます。タイムラインをスクラブし、セッション中に起きたことを再生できます。

セッションが複数タブを開いた場合、録画ビューアーは再生領域の右上にタブ選択ドロップダウンを表示します。これを使い、録画されたタブを切り替え、各タブのアクティビティを個別に確認します。

Browser Run Runs を開く ↗

API で録画を取得する

セッション ID を使い、プログラムからも録画を取得できます。ブラウザーを閉じる前に browser.sessionId() でセッション ID を取得し、recordings エンドポイントに渡します。

curl https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/recording/<SESSION_ID> \
  -H "Authorization: Bearer <API_TOKEN>"

成功した応答は、次のようになります。

{
	"success": true,
	"result": {
		"sessionId": "e26d4660-5b78-4761-b82f-c6b5bad5a925",
		"duration": 4380,
		"events": {
			"target-1": [],
			"target-2": []
		}
	}
}

録画したセッションが閉じたあと、録画はまだ確定中のことがあります。この期間、エンドポイントは一時的に 404 を返すことがあります。確定が完了するまで、呼び出し側はリクエストを再試行できます。

イベント配列は result.events にあります。result.events のキー(target-1target-2 など)は CDP ターゲット です。セッション録画では、各ターゲットは通常 1 つのブラウザータブに対応します。複数タブを開いたセッションはタブごとに 1 つのターゲットを持ち、各ターゲットの値はそのタブ用の独立した rrweb イベント配列です。

API でネットワークアクティビティを取得する

特定ターゲットでキャプチャしたリクエストを取得するには、network recording エンドポイントを使います。target クエリパラメーターは必須で、result.events に返されたターゲット ID の 1 つを入れる必要があります。

curl 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/recording/<SESSION_ID>/network?target=<TARGET_ID>' \
  -H "Authorization: Bearer <API_TOKEN>"

応答は、そのターゲットで録画されたリクエストを含む JSON 配列です。利用可能なリクエスト / レスポンスヘッダー、ペイロード、ステータスコード、タイミング情報、転送サイズを含みます。

ネットワークアクティビティを HTTP Archive(HAR)1.2 ドキュメントとして取得するには、format=har を設定します。

curl 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/recording/<SESSION_ID>/network?target=<TARGET_ID>&format=har' \
  -H "Authorization: Bearer <API_TOKEN>"

録画を再生する

result.events の各値は標準の rrweb イベント配列です。rrweb-player に直接渡し、タイムラインスクラバーと再生コントロール付きの再生 UI をセルフホストできます。

タブは独立して再生されます。複数タブのセッションを再生するには、ターゲットごとに 1 つのプレーヤーを描画するか、ユーザーがターゲットを切り替えられる UI を作ります(ダッシュボードの録画ビューアーのタブ選択に似ています)。

制限

  • 録画はセッション終了から 30 日間保持され、自動削除されます。
  • 録画はオプトインです。デフォルトでは有効ではありません。
  • セッション録画は、launch() による Browser Sessions と CDP エンドポイント で利用できます。Quick Actions では利用できません。
  • 最小録画時間は 1 秒です。1 秒未満のセッションでは、閲覧可能な録画は作られません。
  • 最大録画時間は 2 時間です。

rrweb の制限

セッション録画は rrweb を使い、ピクセルではなく DOM の状態とイベントを記録します。この方法は軽量ですが、次の制限があります。

  • Canvas 要素<canvas> 要素の内容はキャプチャされません。要素自体は、空白のプレースホルダーとして録画に現れます。
  • クロスオリジン iframe — クロスオリジンの <iframe> 要素内のコンテンツは録画されません。同一オリジンの iframe は通常どおり録画されます。
  • 動画と音声<video><audio> 要素の DOM 構造はキャプチャされますが、メディアの再生状態と内容はキャプチャされません。
  • WebGL — WebGL の描画はキャプチャされません。
  • 入力フィールド — すべての入力フィールドの内容はデフォルトでマスクされ、再生では見えません。
  • 大きなページや複雑なページ — DOM の変更が頻繁なページ(リアルタイムデータフィードや重いアニメーションがあるページなど)は、大量のイベントを生成し、録画サイズが大きくなります。

役に立ちましたか?