Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今日始め るCloudflare Browser Rendering
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
itome
September 11, 2025
340
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
今日始め るCloudflare Browser Rendering
itome
September 11, 2025
More Decks by itome
See All by itome
Android accessibility and automated check tools
itome
1
5.1k
Accessibility in CATS
itome
4
2.5k
Introduce_Owl.pdf
itome
0
120
Introducing Android Accessibility Test with Accessibility Testing Framework
itome
1
790
Introduction of accessibility for mobile development
itome
0
260
Architecture_for_mobile_development.pdf
itome
0
280
Android_Accessibility_Suite.pdf
itome
0
170
Introducing Owl
itome
0
1.2k
Migrate to Koin
itome
2
360
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Ethics towards AI in product and experience design
skipperchong
2
310
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Fireside Chat
paigeccino
42
3.9k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
GraphQLとの向き合い方2022年版
quramy
50
15k
Transcript
今日始めるCloudflare Browser Rendering CHANTO 株式会社 塚本武志(@itometeam) 1
Cloudflare Workers を使ったことある 人 2
Cloudflare R2 を使ったことある人 3
Cloudflare D1 を使ったことある人 4
Workers AI を使ったことある人 5
Browser Rendering を使ったことある 人 6
Browser Rendering って? Cloudflare 上でヘッドレスブラウザが利用できる Workers Binding もしくはREST API を使ってアクセスが可能
ヘッドレスブラウザを操作するためのPuppeteer もしくはPlaywrite のフォークライブラリが公開されており、ローカル環境と変わらな い操作感で動かすことができる 7
何ができる? Web ページをPDF のドキュメントにできる! 自社のWeb ページの簡単な外形監視に使えるかも! スクレイピングができる! 8
スクレイピングができる! 9
免責事項 このプレゼンテーションおよびセッションはスクレイピングを推奨す るものではありません。現在、ウェブスクレイピングを取り巻く法的 環境は急速に厳格化しています。2024 年から2025 年にかけて、世界 各国でデータ保護規制が強化され、無断でのデータ収集に対する罰則 が重くなっています。日本においても、不正競争防止法や著作権法違 反として訴訟に発展するケースが増加しており、企業の信用失墜だけ でなく、巨額の損害賠償請求に至る事例も報告されています。データ
の無断収集は、たとえ技術的に可能であっても、ビジネス倫理の観点 から重大な問題を孕んでいます。他社のコンテンツやデータを無断で 利用することは、業界内での信頼関係を損ない、将来的な協業機会を 失う原因となります。特にAI 開発における学習データの収集におい 10
もしスクレイピングが必要な場合でもきちんと法務担 当などに確認をした上でWeb サイトで許可されている 範囲で行いましょう 11
実際に使ってみる 12
wrangler.jsonc にBinding を追加 { "name": "browser-worker", "main": "src/index.js", "compatibility_date": "2023-03-14",
"compatibility_flags": [ "nodejs_compat" ], "browser": { "binding": "MYBROWSER" } } 13
Binding を@cloudflare/puppetter に渡す import puppeteer from "@cloudflare/puppeteer"; export default {
async fetch(request, env): Promise<Response> { const browser = await puppeteer.launch(env.MYBROWSER); /* puppeteerを使ったブラウザ操作ができる */ }, } satisfies ExportedHandler<Env>; 14
Browser Rendering でできること puppeteer のAPI はfull support されているため、puppeteer でできる ことはできると考えて良い
const browser = await puppeteer.launch(env.MYBROWSER); const page = await browser.newPage() // ビューポートサイズ設定 await page.setViewport({ width: 1280, height: 800 }); // ページ遷移 await page.goto('https://example.com', { waitUntil: 'networkidle2' // ネットワークが落ち着くまで待機 }); 15
Browser Rendering でできること puppeteer のAPI はfull support されているため、puppeteer でできる ことはできると考えて良い
const page = await browser.newPage() // キーボード操作 await page.keyboard.press('Enter'); await page.keyboard.type('Hello World'); // マウス操作 await page.mouse.move(100, 100); await page.mouse.click(100, 100); await page.hover('.menu-item'); 16
Browser Rendering でできること puppeteer のAPI はfull support されているため、puppeteer でできる ことはできると考えて良い
const page = await browser.newPage() // スクリーンショット await page.screenshot({ path: 'fullpage.png', fullPage: true }); 17
Browser Rendering でできること puppeteer のAPI はfull support されているため、puppeteer でできる ことはできると考えて良い
const page = await browser.newPage() // PDFの生成 await page.pdf({ path: 'page.pdf', format: 'A4', printBackground: true }); 18
puppeteer の拡張API 本家のpuppeteer API を拡張する形でBrowser Binding 特有の関数が いくつか追加されている 主にSession Management
をするための関数が提供されている const limits = await puppeteer.limits(env.MYBROWSER); const history = await puppeteer.history(env.MYBROWSER); const sessions = await puppeteer.sessions(env.MYBROWSER); 19
なぜSession Management が必要? 20
Browser Rendering の厳しい制限 Browser Rendering のブラウザは同時に3 つ( 有料版は10) までしか起 動しておけない
Browser Rendering のブラウザは1 分間に3 つ( 有料版は10) までしか 新しく起動できない 21
Browser Rendering の厳しい制限 これらを回避するため、ブラウザを複数のWorker で使い回す必要 がある 22
Session Management browser.close() の代わりに browser.disconnect() を利用する browser.close() // これ以降セッションを使いまわせなくなる browser.disconnect()
// セッションが残るので使いまわせる 23
Session Management puppeteer.launch() の代わりに puppeteer.connect() で既存のセッシ ョンに接続 const sessions =
await puppeteer.sessions(env.MYBROWSER) const freeSessions = sessions.filter((s) => !s.connectionId) let session: Browser if (freeSessions.length === 0) { session = await puppeteer.launch(env.MYBROWSER) } else { session = await puppeteer.connect(env.MYBROWSER, freeSessions[0].sessionId) } 24
Session Management ただし、Session Management を真面目にやったとしても同時に一 つのセッションに複数のWorker からアクセスすることはできない そのため結局同時にBrowser Rendering のブラウザにアクセスでき
るWorker は3 つ( 有料プランなら10) しかない コネクションを占有しないようにできるだけ早く browser.disconnect() を呼ぶのが大事 25
現実世界でのユースケース 26
例: SaaS でのPDF 出力機能 法令対応や紙での業務があるクライアント向けにPDF を出力したい ケースは多い Cloudflare Workers 上でPDF
を生成するのは意外と大変 既存のPDF ライブラリはNode.js 環境を前提としたものも多く、 Worker で素直に使える選択肢は少ない また複雑な組版のPDF ドキュメントは入れる文字数によってレイア ウト崩れが起きやすい → Browser Rendering を使ってHTML をそのままPDF にしよう! 27
https://github.com/chantoinc/generate-pdf-with-cloudflare-browser- rendering 28
https://generate-pdf-with-cloudflare-browser-rendering.developers- 993.workers.dev/ 29
それ以外の使えそうなケース Cron Triggers と組み合わせて自社サイトのパフォーマンス測定を定 期的に行うことで、キャッチしづらいパフォーマンス低下を監視す る Playwrite MCP と組み合わせてリモートのMCP サーバーとして使う
など... 30
料金 無料プランの場合 ブラウザの起動時間が1 日に10 分まで 並列起動できるブラウザが3 つまで それ以上は利用不可 31
料金 有料プランの場合 起動時間が1 ヶ月に10 時間まで無料 それ以上は$0.09/1 時間 並列起動数が10 個まで無料 それ以上は$2.00/1
並列 ただし並列起動数は月の平均で計算 1 日だけ300 並列させても他の日に全く使わなければ無料枠に収 まる 32
まとめ 33
Thank you CHANTO 株式会社 塚本武志(@itometeam) 34