【初心者向け】PlaywrightをGoogle Cloud Runで動かす全手順!Dockerfileからgcloudコマンドまで徹底解説

「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の「サンドボックス環境」とは?

「サンドボックス環境」とは、一言でいうと「隔離された安全な実験場」のことです。セキュリティと安定性を確保するための非常に重要な仕組みになります。

サンドボックス環境の3つの特徴
  • 隔離性:アプリケーションが他のプログラムや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で動かすための具体的な手順を解説します。

Step 1. Node.jsプロジェクトの準備

まず、ローカルPCにPlaywrightスクリプトと、プロジェクトの情報を記述した`package.json`を作成します。

Step 2. Dockerfileの作成

次に、コンテナイメージの「設計図」となる`Dockerfile`を作成します。これが今回のキモとなる部分です。

Step 3. Cloud Runへのデプロイ

最後に、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
ここに注意

初めてCloud Runを利用する場合、途中で「APIを有効にしますか? (Enable the API)」と聞かれます。これはCloud Runを外部から操作する許可を与えるためのもので、`y`と入力して進めてください。

`–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で実行するための手順と、関連する技術要素について解説しました。

3つの重要ポイント

1. Playwright公式のDockerイメージをベースに`Dockerfile`を作成するのが最も簡単で確実。

2. Cloud Runのサンドボックス環境で動かすため、Playwrightの起動オプションに`–no-sandbox`を指定する。

3. デプロイには`gcloud`コマンドを使用し、PlaywrightのためにメモリやCPUを適切に割り当てる。

コンテナやクラウドの概念は、最初は少し難しく感じるかもしれません。しかし、一度流れを掴んでしまえば、ローカル環境のコードを簡単にクラウドで動かすことができるようになり、開発の幅が大きく広がります。

ぜひこの記事を参考に、PlaywrightのCloud Runへのデプロイに挑戦してみてください。