1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

その docker run、説明できる? Playwright を動かすワンライナーを分解する

1
Last updated at Posted at 2026-07-16

はじめに

E2E テストの実行手順として、こんなコマンドを見たことはないだろうか。

docker run --rm --network host \
  -v $(pwd):/work -w /work \
  -e CI=true \
  mcr.microsoft.com/playwright:v1.54.0-noble \
  npx playwright test

ローカルにブラウザや依存ライブラリを入れなくても、E2E テストが動く。

👉 便利なのでコピペで使いがち。でも --rm-w の意味を聞かれて説明できるだろうか?

この記事では、このワンライナーを1つずつ分解して読めるようにする。


全体の文法

docker run の構造はこうなっている。

docker run [オプション] イメージ [コマンド]

冒頭のワンライナーを当てはめると:

部分 該当箇所
オプション --rm --network host -v $(pwd):/work -w /work -e CI=true
イメージ mcr.microsoft.com/playwright:v1.54.0-noble
コマンド npx playwright test

👉 イメージ名よりが Docker への指示、イメージ名よりがコンテナの中で実行されるコマンド

npx playwright test はホストで実行されるわけではない。コンテナの中で動く。


実行イメージ指定

mcr.microsoft.com/playwright:v1.54.0-noble は3つの部分に分解できる。

mcr.microsoft.com / playwright : v1.54.0-noble
└─ レジストリ        └─ イメージ名  └─ タグ
  • レジストリ:イメージの置き場所。ここでは Microsoft Container Registry。省略すると Docker Hub になる
  • イメージ名:どのイメージを使うか
  • タグ:どのバージョンを使うか。省略すると latest

この公式イメージには、Node.js・ブラウザ(Chromium / Firefox / WebKit)・依存ライブラリが入っている。

❌ Playwright 本体(npm パッケージ)はイメージに含まれない。-v でマウントしたプロジェクトの node_modules にあるものが実行される。

👉 ブラウザとその依存ライブラリをホストに入れなくていいのが、このイメージを使う最大の理由


--rm:終了後にコンテナを自動削除

コンテナは終了しても自動では消えない。停止状態のまま残り続ける。

docker ps -a
# → Exited (0) のコンテナがずらずら…

--rm を付けると、コマンドの終了と同時にコンテナが削除される。

  • テスト実行は「実行して結果を見たら終わり」の使い捨て
  • コンテナを残しておく理由がない

👉 一回きりのコマンド実行では、ほぼ必ず付けるオプション


--network host:ホストのネットワークをそのまま使う

E2E テストは、ホストで起動中の dev サーバー(例:localhost:3000)にアクセスしたい。

デフォルト(ブリッジネットワーク)では、コンテナは独立したネットワークを持つ。

❌ デフォルトの場合
コンテナ内の localhost:3000 → コンテナ自身の 3000 番(何もいない)

--network host を付けると、コンテナはホストのネットワークをそのまま使う。

✅ --network host の場合
コンテナ内の localhost:3000 → ホストの 3000 番(dev サーバーに届く)

👉 「コンテナの中からホストの localhost に繋ぎたい」ときの選択肢


-v $(pwd):/work:カレントディレクトリをマウント

-v ホスト側のパス:コンテナ側のパス

$(pwd) はカレントディレクトリに展開される。つまり「今いるディレクトリを、コンテナ内の /work として見せる」。

これが入口と出口の両方になる:

  • 入口:テストコード(tests/playwright.config.ts)をコンテナに渡す
  • 出口:テスト結果(test-results/playwright-report/)がホスト側に残る

👉 マウントしないと、コンテナはテストコードを見つけられないし、結果もコンテナの終了と一緒に消える


-w /work:作業ディレクトリの指定

コンテナ内でコマンドを実行するときの「今いる場所」を指定する。

-w /work ... npx playwright test
# ↓ イメージするならこれと同じ
cd /work && npx playwright test

-v でマウントした /work を、-w で作業ディレクトリにしている。

👉 -v $(pwd):/work -w /work は「今いるディレクトリで、そのままコマンドを実行する」ための定番ペア


-e CI=true:環境変数を渡す

-e 変数名=値

コンテナの中のプロセスに環境変数を渡す。

Playwright は CI 環境変数の有無で挙動を変える設定がよく使われる:

// playwright.config.ts
export default defineConfig({
  retries: process.env.CI ? 2 : 0,
  reporter: process.env.CI ? 'dot' : 'html',
});

👉 ホストの環境変数はコンテナに引き継がれない。渡したいものは -e で明示的に渡す


まとめ

要素 役割
--rm 終了後にコンテナを自動削除(使い捨て実行)
--network host ホストのネットワークをそのまま使う
-v $(pwd):/work カレントディレクトリをコンテナにマウント
-w /work コンテナ内の作業ディレクトリを指定
-e CI=true コンテナ内に環境変数を渡す
mcr.microsoft.com/playwright:v1.54.0-noble レジストリ / イメージ名 / タグ
npx playwright test コンテナ内で実行されるコマンド

もう一度、冒頭のコマンドを見てみる。

docker run --rm --network host \
  -v $(pwd):/work -w /work \
  -e CI=true \
  mcr.microsoft.com/playwright:v1.54.0-noble \
  npx playwright test

👉 「使い捨てコンテナで、ホストのネットワークとカレントディレクトリを共有しながら、CI モードで Playwright を実行する」と読めれば OK。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?