Kitesurfは画面のないサービスなので、触っても何も起きません。 分かるのは「何を入れたら、何が出てくるか」を見たときだけです。 実際に uhd-inc.jp を渡して、返ってきた実物をそのまま並べました。
← 解説ページに戻るここを飛ばすと以降が全部ぼやけます。3つだけ押さえてください。
これが最大の引っかかりどころです。今回の話に出てくるブラウザは、 自分のPCでは動きません。
自分のPC ↓ Chromeを起動 ページが画面に映る ↓ 人が見る
目的は人が読むこと。だから画面が要る。
自分のコード ↓「このURL開いて」と依頼 Cloudflareのサーバーの中で ブラウザが起動してページを開く ↓ 結果をデータにして返す 画像・テキストが手元に届く
目的はプログラムが処理すること。だから画面は要らない。 自分のPCには何も表示されません。
→ 画面のないブラウザが、他人のサーバーの中で動いている。 これが掴めれば、あとは全部つながります。
Google Chromeの中身そのものです。ブラウザの心臓部だけを取り出したもので、 オープンソースとして公開されています。Chrome・Edge・Braveなど、多くのブラウザが これを土台に作られています。
ざっくり 「Chromiumで実行」=「Chromeでそのページを開いた」 と考えて差し支えありません。
そしてKitesurfは、このChromiumの代わりに使える、Cloudflareが新しく作った軽量エンジンです。 置き換えられる部品、という位置づけになります。
機械が仕事を頼むための住所です。
普段のURL(https://uhd-inc.jp)は、人がブラウザで開いて中身を見るためのもの。
エンドポイントは人が開くのではなく、プログラムが「これやっといて」と依頼を送りつける先です。
送ると、結果がデータで返ってきます。
POST https://api.cloudflare.com/client/v4
/accounts/{id}/browser-run/screenshot?browser=kitesurf
| 部分 | 意味 |
|---|---|
| POST | 「送る」という動作。ページを見るときは GET(取ってくる)、仕事を頼むときは POST |
| api.cloudflare.com | Cloudflareの機械用の窓口。人間用の管理画面は dash.cloudflare.com |
| /client/v4/ | APIのバージョン(第4版) |
| /accounts/{id}/ | どのアカウントからの依頼か |
| /browser-run/ | Browser Run という機能グループを使う |
| /screenshot | その中の「スクショを撮る」を選ぶ。ここを差し替えると返る形が変わる |
| ?browser=kitesurf | オプション。「ChromiumではなくKitesurfを使って」という指定 |
{"url": "https://uhd-inc.jp"} の部分です。
これだけです。URLを1つ書いて送るだけ。ブラウザを立ち上げる必要も、サーバーを用意する必要もありません。
POST /browser-run/screenshot?browser=kitesurf
{ "url": "https://uhd-inc.jp" }
screenshot の部分を差し替えると、返ってくる形が変わります。
下の4つは、すべてこの1行を変えただけの結果です。
Kitesurfに管理画面はありません。入力欄がどこかにあるわけではないので、 「ここに指示を打ち込む」という場所を探しても見つかりません。ここが分かりにくいところです。
実体はただのHTTPリクエストです。自然言語の指示は、送信するデータの中の
prompt という項目に、文字列として書くだけ。
つまり、いつも書いているプログラムの中に、日本語を1行埋め込む形になります。
curl -X POST \
"https://api.cloudflare.com/client/v4/\
accounts/$ID/browser-run/json\
?browser=kitesurf" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"url": "https://uhd-inc.jp",
"prompt": "会社名とサービス一覧を抽出して"
}'
動作確認はこれが最速です。今回の検証もこの方法で回しました。
const res = await fetch(
`https://api.cloudflare.com/client/v4/accounts/`
+ `${ACCOUNT}/browser-run/json?browser=kitesurf`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://uhd-inc.jp",
prompt: "会社名とサービス一覧を抽出して",
}),
}
);
ただのスクリプトです。Cloudflareのインフラは何も使っていません。
// app/api/extract/route.ts
export async function POST(req) {
const { url, prompt } = await req.json();
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { Authorization: `Bearer ${TOKEN}` },
body: JSON.stringify({ url, prompt }),
});
const data = await res.json();
return Response.json(data.result);
}
御社のスタック(Next.js)ならこの形。画面から入力させて、 指示を組み立てて投げるところまで作れば、社内ツールとして完成します。
すべて2026年8月17日に uhd-inc.jp へ実行した、加工なしの結果です。
ページを画像にして返します。人が見て確認するための出力。 サイトの表示崩れチェックや、SNS用のサムネイル生成に使います。
# アイデアを、価値に変える ## つくりたいを、つくれるに アプリも、ECも、AIも。 あらゆるプロダクト開発を、 企画から運用まで [SES](https://uhd-inc.jp/ses) [自社サービス](/our-services) [会社概要](/about)
ページの中身を、AIが読める形のテキストにして返します。 全部で 4,703文字。広告や装飾が落ちて本文だけが残るのがポイントです。
実際の全文を開く(4,703文字)→%PDF-1.4 ... 2,011,196 バイト
ページをそのままPDFにして返します。帳票やレポートの出力機能を 自社サービスに載せるときに使えます。請求書・見積書の自動生成などが典型です。
実際のPDFを開く(2.0MB)→{
"会社名": "株式会社UHD",
"所在地": "五反田",
"事業内容の要約":
"システム開発、ITコンサルティング",
"提供しているサービス名の一覧": [
"Webシステム・アプリ開発",
"CRMカスタマイズ開発",
"ECサイト構築",
"AI開発",
"補助金活用システム開発",
"BIツール",
"SES事業",
"自社サービス"
],
"使用技術": ["Next.js","React","Shopify"]
}
これが目玉です。詳しくは次のセクションで。
生の応答を開く →さっきの構造化データを取り出すために書いた指示は、これだけです。 プログラムではありません。日本語の文章です。
この会社のWebサイトから、会社名・所在地・ 事業内容の要約・提供しているサービス名の一覧・ 使用技術を抽出してください。
会社名 : 株式会社UHD
所在地 : 五反田
使用技術 : Next.js / React / Shopify
サービス : Webシステム・アプリ開発
CRMカスタマイズ開発
ECサイト構築
AI開発
補助金活用システム開発
BIツール / SES事業 / 自社サービス
業界サイトや企業一覧から、会社名・所在地・事業内容・使用技術を自動で吸い上げる。 上でやったことを、100社・1000社に対して回すだけです。
「このページの商品名と価格と在庫状況を取って」と書いておけば、毎日自動で集まります。 相手がサイトを作り替えても、指示はそのままで動き続けます。
②のテキスト出力が、そのままAIへの入力になります。 「URLを入れたら要約」「社内サイトをAIで検索」といった機能の、土台の部分です。
?browser=kitesurf を付けるかどうかで、裏で動くブラウザが変わるだけ。
POST /browser-run/screenshot
→ Chromiumで実行(重いが何でもできる)
POST /browser-run/screenshot?browser=kitesurf
→ Kitesurfで実行(軽いが機能は限定)
前提はCloudflareアカウントだけ。無料プランで始められます。
ダッシュボードの My Profile → API Tokens → Create Custom Token。 必要な権限は1つだけです。
Account → Browser Rendering → Edit
あわせてAccount IDも控えておきます。
curl -X POST \
".../browser-run/markdown?browser=kitesurf" \
-H "Authorization: Bearer $TOKEN" \
-d '{"url":"https://example.com"}'
テキストが返ってくれば導入完了です。ここまで実質3分。 サーバーの用意もインストールも要りません。
STEP 02 のコードをそのまま貼るだけです。あとは
prompt の日本語を書き換えれば、用途が変わります。
prompt: "会社名と電話番号を抽出して" prompt: "商品名と価格と在庫状況を抽出して" prompt: "求人の職種と勤務地と年収を抽出して"
取りたいものを日本語で書き換えるだけで、 別の案件に流用できます。
ベータ期間中のレート制限がかなり厳しく、連続実行するとすぐ429が返ります。 待って再試行する処理がないと、実運用では止まります。
APIトークンをブラウザ側のコードに出すと、誰でも自社アカウントで リクエストを打てるようになります。必ずサーバー経由で呼びます。
現在はベータで無料ですが、正式化後の価格は未確認です。 「無料だから」を前提にした事業計画は危険なので、 商品化を検討するなら料金体系の発表を待つか、Cloudflareに確認すべきです。
ここから先は、実際に導入を検討する段階で必要になる検証データです。
Kitesurfは軽くするために機能を削っているので、Chromiumなら動くのに動かないものがあります。 公式ドキュメントに一覧がないため、全部叩いて確かめました。
| 機能 | 内容 | Kitesurf | 備考 |
|---|---|---|---|
| screenshot | 画像で返す | ✅ | — |
| markdown | テキストで返す | ✅ | — |
| PDFで返す | ✅ | 公式に記載なし。叩いたら動いた | |
| json | 構造化データで返す | ✅ | 今回の目玉機能 |
| links | リンク一覧を返す | ❌ | リンク切れ検査はChromium側で |
| snapshot | ページ状態を返す | ❌ | — |
| scrape | CSS指定で要素を取る | ❌ | ④のjsonで代替できる |
| 対象 | 機能 | Chromium | Kitesurf | 速度比 |
|---|---|---|---|---|
| この資料 | screenshot | 1.90s | 3.39s | 1.79× |
| この資料 | markdown | 1.20s | 1.30s | 1.08× |
| uhd-inc.jp | screenshot | 2.55s | 3.06s | 1.20× |
| uhd-inc.jp | markdown | 1.63s | 1.97s | 1.21× |
遅くはなりますが、抽出される中身は1文字も変わりません。 uhd-inc.jpのテキスト出力は、ChromiumもKitesurfもどちらも4,703文字でぴったり一致しました。 テキストを取る用途なら、迷わずKitesurfで問題ないということです。
同じ段落を撮り比べたものです。Chromium側は「タブ」「URLを入れる欄」が太字ですが、 Kitesurf側は太字が消えています。文字幅も広く、折り返し位置がずれます。
太字が消え、折り返し位置もずれている
?browser=kitesurf を付けるかどうかだけなので、用途で使い分けられます。
①のスクリーンショットで、uhd-inc.jp のヘッダーの下が真っ白になっているのに気づいたでしょうか。 これはKitesurfのせいではありません。Chromiumで撮っても同じです。 スクロールしてから表示されるアニメーションの、初期状態が写っているだけです。
一方、②のテキスト出力では中身が4,703文字きちんと取れています。 つまりコンテンツは存在していて、見えていないだけ。