この記事はで読むことができます。
当ブログでは商品・サービスのリンク先にプロモーションを含みます。
「WebスクレイピングやE2Eテストで使っているPlaywrightを、サーバーレス環境のCloud Runで動かせたら便利なのに…」
このように考えている方も多いのではないでしょうか。しかし、実際にやろうとすると「そもそも動くの?」「Dockerfileってどう書くの?」「gcloudコマンドがよくわからない」といった疑問が次々と出てきます。
PlaywrightをCloud Runで動かす具体的な方法が知りたい
DockerfileやCloud SDKなど、関連技術の役割がよくわからない
サーバーレス環境でブラウザ自動操作を実現したい
この記事では、PlaywrightをGoogle Cloud Runで実行するための一連の流れを、初心者にも分かりやすく解説します。

PlaywrightをCloud Runで動かしたいです!でも、何から手をつければいいか…。

お任せください!一つずつ丁寧に解説します。この記事を読めば、全体像が掴めますよ。
- Cloud RunでPlaywrightを動かすための具体的な手順
- Dockerfileやサンドボックスなど、関連技術の役割と意味
- gcloudコマンドを使ったCloud Runへのデプロイ方法
- Cloud RunのAPIを有効にするとはどういうことか
PlaywrightはGoogle Cloud Runで動かせる?【結論:可能】
結論から言うと、PlaywrightをGoogle Cloud Runで動かすことは十分可能です。
ただし、ローカル環境で`node main.js`と実行するのとは少し異なり、いくつかの準備が必要になります。一番のポイントは、Playwrightが必要とするブラウザやライブラリを含んだ「コンテナイメージ」を作成することです。
幸い、Playwrightが公式にDockerイメージを提供しているため、これを利用するのが最も簡単で確実な方法です。
全体的な流れは、Node.jsプロジェクトを準備し、Dockerfileを書いて、Cloud SDKでデプロイする、というステップになります。

なるほど!ところで、調べていると「サンドボックス環境」という言葉が出てくるのですが、これは何ですか?
Cloud Runの「サンドボックス環境」とは?
「サンドボックス環境」とは、一言でいうと「隔離された安全な実験場」のことです。セキュリティと安定性を確保するための非常に重要な仕組みになります。
- 隔離性:アプリケーションが他のプログラムやOSから隔離される。
- 権限の制限:アクセスできるシステムリソースが厳しく制限される。
- 再現性と破棄の容易さ:環境を簡単に作成・破棄できる。
Cloud Runは、世界中のユーザーが作成したプログラムを実行するサービスです。そのため、あるユーザーのプログラムが他のユーザーやGoogleのシステム自体に悪影響を与えないように、各プログラムを強力なサンドボックス内で実行しています。
Playwrightとサンドボックスの関係
Playwrightが操作するChromiumブラウザも、それ自体がセキュリティのためにサンドボックス機能を持っています。
しかし、Cloud Runのようなサンドボックス環境の中で、さらにサンドボックスを動かす(二重サンドボックス)と、権限の問題でうまく動作しないことがあります。
そのため、Playwrightの起動オプションに`–no-sandbox`を指定して、ブラウザ側のサンドボックス機能を無効にするのが一般的です。Cloud Run自体のサンドボックスが強力なので、セキュリティ上の問題はほとんどありません。
// 起動オプションに '--no-sandbox' を追加
const browser = await chromium.launch({
args: ['--no-sandbox']
});
【実践】Playwright on Cloud Runの構築手順
ここからは、実際にPlaywrightをCloud Runで動かすための具体的な手順を解説します。
まず、ローカルPCにPlaywrightスクリプトと、プロジェクトの情報を記述した`package.json`を作成します。
次に、コンテナイメージの「設計図」となる`Dockerfile`を作成します。これが今回のキモとなる部分です。
最後に、Google Cloud SDKを使って、作成したイメージをCloud Runにデプロイします。
Step 1. Node.jsプロジェクトの準備
プロジェクト用のフォルダを作成し、その中に以下の2つのファイルを作成します。
`package.json`(プロジェクト定義ファイル)
{
"name": "playwright-on-cloud-run",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "node main.js"
},
"dependencies": {
"playwright": "^1.44.0"
}
}
`main.js`(実行したいPlaywrightスクリプト)
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
// Cloud Runのようなサンドボックス環境では、このオプションが必要
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.goto('https://www.google.com/');
console.log(`Page title: ${await page.title()}`);
await browser.close();
})();

JavaScriptファイルはどこに置けばいいですか?

`.js`ファイルは、次に作成する`Dockerfile`と同じ階層(プロジェクトのルートディレクトリ)に置いてください。後でそれをコンテナにコピーします。
Step 2. Dockerfileの作成
次に、プロジェクトのルートディレクトリに`Dockerfile`という名前のファイルを作成します。これは、アプリケーションを実行する環境をどう作るかを定義する「設計図」です。
`Dockerfile`
# 1. ベースイメージとしてPlaywrightの公式イメージを使用
# これにより、ブラウザの依存関係を手動でインストールする必要がなくなります
FROM mcr.microsoft.com/playwright/javascript:v1.44.0-jammy
# 2. コンテナ内の作業ディレクトリを作成
WORKDIR /app
# 3. package.jsonとpackage-lock.jsonをコピー
COPY package*.json ./
# 4. 依存関係をインストール
RUN npm install
# 5. プロジェクトのすべてのファイル(main.jsなど)をコピー
COPY . .
# 6. Cloud Runでコンテナが起動したときに実行するコマンドを指定
CMD ["node", "main.js"]
このファイルに書かれているのは、「Playwrightがインストール済みのOSを土台にして、プロジェクトファイルをコピーし、ライブラリをインストールし、最後に`node main.js`を実行してください」という一連の指示です。Cloud Runは、この設計図を元にあなたのプログラムを実行する環境を自動で構築します。
Step 3. Cloud Runへのデプロイ
最後に、Google Cloud SDKを使ってCloud Runにデプロイします。Google Cloud SDKは、あなたのPCからGoogle Cloudを操作するためのコマンドラインツールです。

コマンドって難しそうです…。

大丈夫です!基本的な操作は驚くほど簡単ですよ。コピー&ペーストで実行できるように解説します。
ターミナルを開き、プロジェクトのルートディレクトリで以下のコマンドを実行します。
1. コンテナイメージのビルドとプッシュ
まず、`Dockerfile`を元にコンテナイメージを作成し、Googleのコンテナ置き場(Artifact Registry)にアップロードします。`[PROJECT-ID]`はご自身のGoogle CloudプロジェクトIDに置き換えてください。
gcloud builds submit --tag gcr.io/[PROJECT-ID]/playwright-app
2. Cloud Runへのデプロイ
次に、アップロードしたイメージを使ってCloud Runにサービスをデプロイします。
gcloud run deploy playwright-app \
--image gcr.io/[PROJECT-ID]/playwright-app \
--platform managed \
--region asia-northeast1 \
--memory 2Gi \
--cpu 2 \
--timeout 600 \
--allow-unauthenticated
`–memory 2Gi` や `–cpu 2` は、Playwrightがブラウザを動かすために多くのリソースを消費するため、少し多めに割り当てています。実行する処理の負荷に応じて調整してください。
デプロイが完了すると、サービスのURLが表示されます。これで、あなたのPlaywrightスクリプトがクラウド上で実行されるようになりました!
【補足】Cloud RunのAPIを有効にするとは?
デプロイの途中で出てくる「APIを有効にする」というステップは、一体何をしているのでしょうか。
これは、一言でいうと「Cloud Runを外部プログラムから操作するための公式な出入り口を開ける」行為です。
APIが無効な状態は、まるで「電話注文を受け付けていないレストラン」のようなものです。サービスを利用するには、毎回Google Cloudの管理コンソール(お店)に行く必要があります。
APIを有効にすると、`gcloud`コマンドのような外部ツール(電話)からの注文(デプロイや設定変更)が可能になります。これにより、手元のPCからの操作はもちろん、GitHub Actionsを使った自動デプロイなど、様々な自動化が実現できるようになります。
まとめ
この記事では、PlaywrightをGoogle Cloud Runで実行するための手順と、関連する技術要素について解説しました。
1. Playwright公式のDockerイメージをベースに`Dockerfile`を作成するのが最も簡単で確実。
2. Cloud Runのサンドボックス環境で動かすため、Playwrightの起動オプションに`–no-sandbox`を指定する。
3. デプロイには`gcloud`コマンドを使用し、PlaywrightのためにメモリやCPUを適切に割り当てる。
コンテナやクラウドの概念は、最初は少し難しく感じるかもしれません。しかし、一度流れを掴んでしまえば、ローカル環境のコードを簡単にクラウドで動かすことができるようになり、開発の幅が大きく広がります。
ぜひこの記事を参考に、PlaywrightのCloud Runへのデプロイに挑戦してみてください。