PlaywrightをDockerfileに組み込むE2Eテスト環境の構築手順|依存関係の解決

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Docker > PlaywrightをDockerfileに組み込むE2Eテスト環境の構築手順|依存関係の解決
「PlaywrightのE2Eテストをローカルでは動かせたのに、Dockerコンテナに入れたら動かなくなった」
そういうつまずきは、実際によくあります。

原因はほぼ決まっています。
PlaywrightはChromium・Firefox・WebKitの実ブラウザを起動するため、通常のNode.jsイメージには含まれていないOSライブラリが数十本必要です。
その依存関係をDockerfileで正しく解決できていないことが、エラーの根本原因です。

この記事では、playwright dockerfileの設計方法を解説します。
公式イメージを活用する最短ルートと、自前Dockerfileで依存関係を解決する方法の両方を紹介します。
docker-compose連携とCI組み込みまでを対象範囲とします。

この記事のポイント

・Playwright公式Dockerイメージを使えば依存関係の問題を最短で解決できる
・自前Dockerfileでは npx playwright install-deps でパッケージを自動解決する
・docker-composeでテスト実行コンテナとアプリコンテナを分離する設計が基本
・test-resultsをボリュームマウントしてCIでレポートを取り出す


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

PlaywrightのDockerfileで依存関係エラーが出る原因

Playwrightを通常の node:20 イメージで動かそうとすると、ほぼ確実に失敗します。
「Executable doesn't exist at /root/.cache/ms-playwright/chromium-...」や「libnss3.so: cannot open shared object file」が代表的なエラーです。

理由は2点あります。

1. ブラウザ依存パッケージの量

PlaywrightはNode.jsだけでは動作せず、実際のブラウザプロセスを起動します。
Chromiumだけでも libnss3・libgbm1・libasound2・libgtk-3-0 など数十本のシステムライブラリが必要です。

Debian/Ubuntuベースのイメージでは apt-get で追加できますが、必要なパッケージを手作業で洗い出すのは手間がかかります。

2. Alpineベースイメージとの相性問題

node:20-alpine はサイズが小さくて魅力的ですが、Playwrightとの相性は最悪です。
Alpine Linux は musl libc を採用しているのに対し、Playwrightのブラウザバイナリは glibc を前提としてビルドされています。
この不一致は apt-get では解決できません。

Playwright用のコンテナ環境では、Debian/Ubuntuベースのイメージを選んでください。

公式Playwrightイメージを使ったDockerfileの設計

依存関係の問題を最短で解決するには、Microsoftが提供する公式Dockerイメージを使います。
イメージには Chromium・Firefox・WebKit のブラウザと必要な依存パッケージが最初からインストールされています。

1. 基本的なDockerfileの書き方

# Dockerfile.playwright FROM mcr.microsoft.com/playwright:v1.48.0-jammy WORKDIR /app COPY package*.json ./ RUN npm ci COPY . .

注意点は、イメージタグのバージョンとプロジェクトの playwright のバージョンを一致させることです。
package.json の playwright のバージョンを確認してから、同じバージョン番号のタグを選んでください。

タグ形式は「バージョン番号-jammy」(Ubuntu 22.04 LTS)が安定して使えます。

2. ビルドとブラウザ起動の確認

# イメージのビルド $ docker build -f Dockerfile.playwright -t my-playwright:latest . # ブラウザの起動確認(出力例。環境により異なります) $ docker run --rm my-playwright:latest npx playwright --version Version 1.48.0 # Chromiumの起動確認 $ docker run --rm my-playwright:latest npx playwright install --dry-run chromium

自前DockerfileでPlaywright環境を構築する手順

公式イメージを使えない事情がある場合は、 node:20-bookworm-slim をベースに自前で Dockerfile を書きます。
npx playwright install-deps コマンドを使うと、現在の Playwright バージョンが要求するパッケージを自動的にインストールできます。

1. npx playwright install-depsを活用したDockerfile

# Dockerfile.playwright-custom FROM node:20-bookworm-slim WORKDIR /app # npm ci で node_modules を先にインストール COPY package*.json ./ RUN npm ci # Playwright の依存パッケージを自動解決(chromium のみに絞ると高速) RUN npx playwright install-deps chromium # ブラウザ本体のインストール RUN npx playwright install chromium COPY . .

npx playwright install-deps はルート権限が必要です。
ルートレスコンテナで実行する場合は、事前に apt-get でパッケージを手動インストールする方法も検討してください。

Dockerfileの設計については、Docker実践リファレンスでも手順を解説しています。

2. マルチステージビルドでイメージを軽量化する

ブラウザキャッシュのコピーを明示することで、実行ステージで再ダウンロードしなくて済みます。

# --- ビルドステージ --- FROM mcr.microsoft.com/playwright:v1.48.0-jammy AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . # --- 実行ステージ --- FROM mcr.microsoft.com/playwright:v1.48.0-jammy WORKDIR /app # ブラウザキャッシュをビルドステージから引き継ぐ COPY --from=builder /root/.cache/ms-playwright /root/.cache/ms-playwright COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app .

ブラウザバイナリのキャッシュパス(/root/.cache/ms-playwright)を明示的にコピーすることがポイントです。

3. .dockerignoreで不要ファイルを除外する

ビルドコンテキストを小さくするため、.dockerignore を設置してください。

# .dockerignore node_modules test-results playwright-report .git *.log

docker-composeでE2Eテスト環境を構成する

1. compose.ymlの基本構成

E2Eテストの典型的な構成は、テスト実行コンテナとアプリコンテナを分離するパターンです。

# compose.playwright.yml services: playwright: build: context: . dockerfile: Dockerfile.playwright volumes: - ./test-results:/app/test-results - ./playwright-report:/app/playwright-report command: npx playwright test environment: - BASE_URL=http://app:3000 depends_on: - app app: image: your-app:latest ports: - "3000:3000"

test-results と playwright-report をボリュームマウントするのがポイントです。
コンテナ終了後もホスト側でテストレポートを確認できます。

2. テストの実行とレポート確認

# テストを実行(終了後にコンテナを削除) $ docker compose -f compose.playwright.yml run --rm playwright # 出力例(環境により異なります) Running 5 tests using 2 workers ✓ 1 [chromium] > tests/top.spec.ts:5:5 > トップページが表示される (1.2s) ✓ 2 [chromium] > tests/login.spec.ts:8:5 > ログインできる (2.4s) 5 passed (12.3s)

終了コードは $? で確認してください。
テストが1件でも失敗すると終了コードが1になるため、CIパイプラインでの合否判定に使えます。

3. GitHub ActionsでのCI組み込み

# .github/workflows/e2e.yml name: E2E Tests on: push: branches: [main] jobs: e2e: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Playwright tests run: docker compose -f compose.playwright.yml run --rm playwright - name: Upload test results uses: actions/upload-artifact@v4 if: always() with: name: playwright-report path: playwright-report/ retention-days: 30

if: always() を設定することで、テストが失敗した場合もレポートをアーティファクトとして保存できます。

よくあるエラーと対処法

1. 「Executable doesn't exist」エラー

Error: browserType.launch: Executable doesn't exist at /root/.cache/ms-playwright/chromium-1234/chrome-linux/chrome

ブラウザ本体がインストールされていないときに出るエラーです。
Dockerfile の中で npx playwright install chromium を実行しているか確認してください。

公式イメージを使っている場合は、タグとプロジェクトの playwright バージョンが一致しているかを確認してください。

2. 「Host system is missing dependencies」エラー

╔════════════════════════════════════════════╗ ║ Host system is missing dependencies to run ║ ║ browsers. ║ ║ Missing libraries: ║ ║ libgbm.so.1 ║ ╚════════════════════════════════════════════╝

依存ライブラリが不足しているときのエラーです。
Dockerfile の中で RUN npx playwright install-deps chromium の行が実行されているか確認してください。

コンテナを起動して直接 npx playwright install-deps を実行すると、不足しているパッケージの一覧が表示されてインストールも実施されます。

3. スクリーンショットで日本語が文字化けする

テスト結果のスクリーンショットに含まれる日本語テキストが表示されない場合は、日本語フォントが入っていないことが原因です。

# 日本語フォントの追加(Dockerfile に追記) RUN apt-get update && apt-get install -y \ fonts-noto-cjk \ && rm -rf /var/lib/apt/lists/*

タイムゾーンの設定が必要な場合は、ENV TZ=Asia/Tokyo を Dockerfile に追加してください。

本記事のまとめ

やりたいこと 対応方法
依存関係を最短で解決したい mcr.microsoft.com/playwright:バージョン-jammy を使う
自前Dockerfileで依存解決したい node:20-bookworm-slim + npx playwright install-deps
Alpineベースにしたい 非対応(glibc/musl非互換のためDebian系を選ぶ)
docker-composeでテストを実行したい テスト実行コンテナとアプリコンテナを分離してtest-resultsをボリュームマウントする
CIでレポートを取り出したい playwright-reportをアーティファクトとして保存する
スクリーンショットで日本語が文字化けする fonts-noto-cjk を apt-get でインストールする
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
DockerfileとE2E環境の設計から本番コンテナ運用まで、実践的な手順をまとめて解説しています。
>>Docker実践リファレンス

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。