クラウドでPlaywrightを無料でホストする方法
Min-jun Kim
Dev Intern · Leapcell

Playwright は、ブラウザタスクを自動化するために設計された強力なツールであり、スクリーンショットのキャプチャ、PDF生成、自動テスト、ウェブスクレイピングなどの機能を提供します。ウェブページとの人間のインタラクションをシミュレートできるため、コンテンツの追跡、稼働時間の監視、ウェブスクレイピングなどのタスクに最適です。
多くのシナリオで、クラウドに Playwright をデプロイする利点があります。
- CI/CDパイプラインでAPIを通じて自動テストをトリガーする。
- ウェブサイトの可用性をチェックするためにcronジョブを実行する。
- 大規模な分散ウェブスクレイピングタスクを管理する。
サーバーレスコンピューティングのスケーラブルな従量課金モデルにより、ブラウザ自動化タスクのクラウドデプロイメントは理にかなっています。ただし、DigitalOceanのようなプラットフォームではアイドル時間に対して課金されることが多く、定期的なブラウザインタラクションを必要とするユースケースには非効率的です。幸いなことに、いくつかのプラットフォームが Playwright のサーバーレス実行をサポートしています。 Leapcell と AWS Lambdaです。
この記事では、これらのプラットフォームを使用して Playwright タスクをデプロイする方法と、その利点と課題について説明します。
タスク
ここでは、一般的な Playwright タスクであるウェブページのスクリーンショットのキャプチャに焦点を当てます。
手順は次のとおりです。
- 指定されたURLにアクセスする。
- スクリーンショットを撮る。
- 画像を返す。
Leapcell
Leapcellは、Playwright自動化タスクを含む、あらゆるアプリケーションをサーバーレスにデプロイするための柔軟なプラットフォームを提供します。HTTPリクエストの処理専用ではありませんが、HTTPハンドラを簡単に作成してPlaywrightタスクを実行できます。
コード例:
const { chromium } = require('playwright'); const { Hono } = require('hono'); const { serve } = require('@hono/node-server'); const screenshot = async (url) => { const browser = await chromium.launch({ args: ['--single-process'] }); const page = await browser.newPage(); await page.goto(url); const img = await page.screenshot(); await browser.close(); return img; }; const app = new Hono(); app.get('/', async (c) => { const url = c.req.query('url'); if (url) { const img = await screenshot(url); return c.body(img, { headers: { 'Content-Type': 'image/png' } }); } else { return c.text('Please provide a ?url=https://example.com/ parameter'); } }); const port = 8080; serve({ fetch: app.fetch, port }).on('listening', () => { console.log(`Server is running on port ${port}`); });
Leapcellを使用すると、このPlaywrightスクリプトをサーバーレス環境にデプロイでき、ウェブスクレイピングや自動テストなどのタスクに優れたスケーラビリティを提供します。さらに、Leapcellにはシンプルなデプロイメントプロセスがあり、インフラストラクチャの管理の負担なしにPlaywright自動化をホストできます。
ローカル開発
デバッグは簡単です。node index.js
を使用して、他のNode.jsアプリと同様にアプリケーションを実行します。
デプロイメント
ビルドコマンド、ランタイム、サービスポートを構成して、Leapcellにアプリをデプロイします。簡単に起動して実行できることがわかります。
デプロイメントが完了すると、Playwright自動化がライブになり、アクセスできるようになります。
まとめ
✅ Pros:
- デバッグを容易にするための、一貫したローカルおよびクラウド環境。
- Playwrightの直接サポート。
❌ Cons:
- HTTPリクエスト処理の手動セットアップが必要。
AWS Lambda
AWS LambdaでPlaywrightを実行するには、alixaxel/chrome-aws-lambda
のようなサードパーティのChromiumライブラリとともに、playwright-core
パッケージを利用できます。
サードパーティのChromiumが必要な理由は、AWSがLambda関数のサイズに250MBの制限を課しているためです。PuppeteerにバンドルされているデフォルトのChromiumは、この制限を容易に超えるため(macOSで約170MB、Linuxで約282MB、Windowsで約280MB)、スリム化されたChromiumを使用する必要があります。
コード例:
const chromium = require('chrome-aws-lambda'); const playwright = require('playwright-core'); exports.handler = async (event) => { let browser = null; try { browser = await playwright.chromium.launch({ args: chromium.args, executablePath: await chromium.executablePath, headless: true, }); const page = await browser.newPage(); await page.goto(event.url); const screenshot = await page.screenshot(); return { statusCode: 200, headers: { 'Content-Type': 'image/jpeg' }, body: screenshot.toString('base64'), isBase64Encoded: true, }; } catch (error) { return { statusCode: 500, body: 'Failed to capture screenshot.', }; } finally { if (browser !== null) { await browser.close(); } } };
ローカル開発
ローカルデバッグは、ランタイム環境の違いにより、AWS Lambdaでは難しい場合があります。alixaxel/chrome-aws-lambda
のガイドでわかるように。
デプロイメント
コードの準備ができたら、ZIPアップロードまたは依存関係にLambdaレイヤーを使用してデプロイできます。特にPlaywrightのブラウザバイナリのような大きなファイルを扱う場合、セットアップは面倒になる可能性があります。
まとめ
✅ Pros:
- Playwrightタスクの合理化されたコード構造。
- 最新のブラウザ自動化の組み込みサポート。
❌ Cons:
- サードパーティの依存関係からの潜在的なリスク(例:Chromium)。
- 複雑なローカルデバッグとデプロイメント。
効率的なクラウドホスト型Playwright自動化を必要とするプロジェクトの場合、Leapcellは、簡単なデプロイメントとスケーラブルで費用対効果の高い環境を提供するため、優れたソリューションとして際立っています。
詳細については、Leapcell Playwrightドキュメントをご覧ください。