0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Chromiumを使わずV8上で動くAIエージェント専用ブラウザKitesurf

0
Posted at

AIエージェントに「このページの価格表を取ってきて」と頼むと、その裏では今もフル装備のChromeが1つ丸ごと起動している。人間のためのタブ、拡張機能、テーマ、60fpsの描画、ピクセル単位で正確なCSS。エージェントが本当に欲しいのはページ内のテキストか1枚のスクリーンショットだけなのに、毎回その重量級ブラウザを立ち上げている。この無駄を正面から削りにいったのが、Cloudflareが公開したKitesurfというブラウザだ。

Kitesurfが面白いのは、ヘッドレスChromeを軽く使うための工夫ではなく、エージェント専用にブラウザエンジンそのものを別実装した点にある。仕組みも使い方も一次情報が公開されているので、順番に見ていく。

出典はCloudflareの公式ブログとドキュメント、それに独立系メディアInfoQの取材記事の3つを突き合わせた。

🪁 エージェントに要らないものを全部そぎ落とす

Cloudflareの主張はシンプルだ。

Browser engines like Chromium were built for humans, not agents, and they come with overhead that AI models simply do not need.
(Chromiumのようなブラウザエンジンは人間向けに作られていて、AIモデルには不要なオーバーヘッドを抱えている)

なので、Kitesurfはタブも拡張機能も同期機能も持たない。CSSの解釈が完璧でなくても、描画がピクセル単位で正確でなくても構わないと割り切っている。代わりに最適化するのは、トークン数、コンテキストウィンドウ、スケーラビリティ、コスト。エージェントが読み取る構造化されたテキストと、必要なら1枚の画像さえ出せればいい、という設計思想だ(公式ブログ)。

例えるなら、一晩泊まって机の上のメモ1枚を読むだけの客に、家具付きの一軒家を貸すのをやめて、必要な机とメモだけを置いた個室を毎回作って渡す、という発想に近い。ここが既存の「ヘッドレスChromiumをどう安く回すか」という発想との決定的な差分になる。

V8アイソレート上に、使い捨てのブラウザを1枚ずつ畳む

技術的な中身に入ると、KitesurfはChromiumのプロセスを起動しない。Cloudflare WorkersのV8アイソレート、つまり1リクエストごとに隔離される軽量な実行環境の上で動く。1ページが1つのWorkerに対応し、処理が終われば消える。ここで言うアイソレートとは、OSプロセスより桁違いに軽い分離単位のことだ。

構成は大きく3つに分かれている。CDP(Chrome DevTools Protocol、ブラウザを外部から操作する共通プロトコル)とセッション状態を捌く「Engine」、DOMとJavaScriptを担う「PageScript」、そして描画を担う「PageRenderer」。パース処理にはChromiumのエンジンではなく、Rust製のBlitzというレンダリングエンジンと、Firefox由来のCSSエンジンStyloが使われている。画像やPDFへのラスタライズはblitz-paint、フォントの字組みはParleyが担当する。InfoQも同じ構成を「Rustベースのコンポーネント群」として報じており、独立取材でも裏が取れている(InfoQ)。

要は、Chromeの巨大なコードベースを丸ごと動かす代わりに、ブラウザに必要な部品をRustの既製エンジンから組み直し、Cloudflareのエッジに載せている。標準への準拠度も無視していないと強調していて、Cloudflareによれば約21万件超のWeb Platform Tests(ブラウザの仕様準拠を測る公式テスト群)に合格しているという。

数字で見ると、速さではなく安さを買っている

肝心の効果を、Cloudflareが出した計測値で並べるとこうなる。ウォームプール状態、14 URLの中央値での比較だ。

処理 指標 Kitesurf Chromium比
スクリーンショット CPU時間 380ms 約3.1倍少ない
HTML抽出 CPU時間 229ms 約3.8倍少ない
スクリーンショット メモリ 57.8 MiB 約4.7倍少ない
HTML抽出 メモリ 39.4 MiB 約7.0倍少ない

ここで見落としてはいけないのが、実時間(wall time)は逆に約1.7倍遅いという点だ。コールドな状態からのラスタライズにコストがかかるためで、Cloudflare自身も認めている。つまりKitesurfが買っているのは1ページあたりのレスポンス速度ではなく、CPUとメモリの消費量、言い換えれば同じ計算資源で捌けるページ数とコストだ。

この割り切りは、実務の感覚に照らすと理にかなっている。エージェントが数千ページを巡回して抽出・撮影するようなバッチ的ワークロードでは、1ページの応答が0.数秒遅いことより、1台のサーバで何ページ回せるか、月末の請求がいくらかの方が効く。ヘッドレスChromeを大量に並べたことがある人なら、あのメモリの膨れ方を思い出すはずで、そこを7倍削れるなら遅さは受け入れやすい。逆に、対話中のエージェントが1ページを即座に見せる用途では、この遅さが気になる場面もあるだろう。

🔌 browser=kitesurf を足すだけで既存コードから使える

導入のハードルが低いのも実務的にありがたい。KitesurfはCloudflareのBrowser Runというサービス上で動き、既存のエンドポイントに browser=kitesurf というパラメータを付けるだけで、デフォルトのChromiumから切り替わる。CDPとMCPに対応しているので、PuppeteerでもPlaywrightでもchrome-remote-interfaceでも、そのまま繋がる。

まずはコードを書かずに試したいなら、公式のプレイグラウンドで任意のURLを入れてDOM・コンソール・ネットワークを覗ける。

REST APIで1枚撮るだけなら、ドキュメントのサンプルはこうなっている。

curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/screenshot?browser=kitesurf' \
  -H 'Authorization: Bearer <API_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://example.com"}' \
  --output "screenshot.png"

PuppeteerやPlaywrightから繋ぐなら、CDPのWebSocketエンドポイントに同じパラメータを付ける。

wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf

MCPクライアント(例えばchrome-devtools-mcp)から使う場合の設定例も公開されている。

{
  "mcp": {
    "kitesurf": {
      "type": "local",
      "command": [
        "npx", "-y", "chrome-devtools-mcp@latest",
        "--wsEndpoint=wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf",
        "--wsHeaders={\"Authorization\":\"Bearer <API_TOKEN>\"}"
      ],
      "enabled": true
    }
  }
}

上のコマンドとエンドポイントはすべてBrowser Runのドキュメントに載っているものだ。ベータ期間中は無料で、アカウントごとの上限が設けられている。既存のスクリプトを書き換えずにパラメータ1個で切り替えられる設計は、乗り換えコストと同時に「合わなければ剥がすコスト」も低いということで、試すハードルとしてはかなり低い。

⚠️ できないこと、そして少し引っかかる点

万能ではない。現時点で動画の再生、WebGLの描画、実際のTLSフィンガープリントを使ったbotチャレンジの通過、10分続くような認証済みセッションは扱えない(公式ブログ)。ログイン後の画面を長時間操作し続けるRPA的な用途や、動画・3Dが絡むページは今のところ範囲外だ。この線引きは、逆に「Kitesurfは短命・使い捨ての抽出と撮影に振り切った道具だ」という性格をはっきりさせている。

セッションが毎回まっさらから始まる設計は、セキュリティ面ではむしろ利点になる。Cloudflareは「すべてのページ読み込みは信頼できない入力であり、すべてのセッションは新規から始まる」という姿勢で、プロンプトインジェクションやツールの安全性を意識した隔離を売りにしている。untrustedなWebをエージェントに巡回させる以上、この使い捨て前提は理にかなっている。

一方で、無条件に礼賛できない点もある。InfoQによれば、RedditやHacker Newsでは利害の衝突を指摘する声が出ている。Cloudflareは本来ボットやスクレイピングを防ぐ側の会社なのに、今度はスクレイピングを楽にする道具を出している、という指摘だ。加えて、Kitesurfのコードが非公開である点、そして流用元のBlitzに改善を還元(upstream)していない点にも疑問が向けられている。ここは私も同感で、CDP互換のおかげで剥がすのは簡単とはいえ、心臓部が閉じていてCloudflareのエンドポイントに縛られる構造は、インフラとして深く依存する前に一度立ち止まる理由になる。

とはいえ、ブラウザを「人間が見るもの」から「エージェントがタスク単位で使い捨てる実行基盤」へと定義し直し、課金もCPU・メモリ単位で最適化するという方向性そのものは、この先いくつも追随が出てくるはずだ。今すぐ本番投入しないとしても、手元のスクレイピングやスクリーンショットのバッチに browser=kitesurf を一度足して、自分のワークロードで実時間と資源消費のトレードオフを測っておく価値は十分にある。

※本記事は一次情報の調査をAIが行い、事実確認のうえ執筆・公開しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?