先に要点
- Playwright は Microsoft 製の クロスブラウザ E2E テストフレームワーク。`Chromium / Firefox / WebKit(Safari)』 すべてを1つの API で操作できる。
- 特徴は ` Auto-Wait(要素が表示・操作可能になるまで自動で待つ)』 ` Trace Viewer(失敗ステップを実画面の動画 + スクリーンショットで遡れる)』 ` codegen(ブラウザ操作を録画してコードに変換)』 ` 並列実行 / シャーディング』 の4本柱。
- ` モバイル / タブレットのエミュレーション』 `API テスト』 `視覚的回帰テスト』 `ネットワークモック』 も標準サポート。`E2E テストで欲しいもの一通り』 が揃う。
- 本命の使い所は ` 中〜大規模 Web アプリの E2E』。Vitest の単体テストと棲み分け、`単体は Vitest、E2E は Playwright』 が2026年の事実上の標準構成。
E2E テストフレームワークって Cypress じゃないの? Playwright と Cypress、結局どっち使えばいいの? モバイル対応はどう?』 ── 2020 年に登場した Playwright は、急速に Cypress を追い抜き、現代の E2E テスト』 のデファクトに近い位置を占めるようになりました。
ざっくり言うと、Playwright は ブラウザを自動操作してテストする』</strong> フレームワークで、<strong>3 大エンジン(Chromium / Firefox / WebKit)すべてに対応している</strong> のが最大の特徴です。Auto-Wait』 でテストの安定性を確保し、Trace Viewer』 で失敗時のデバッグを劇的に楽にする ── という、E2E テストが苦手としていた領域』 を構造的に解決した道具です。
この記事では、2026 年 5 月時点の Playwright v1 系をベースに、仕組み・Cypress との違い・典型ユースケース・採用判断軸 を整理します。 仕様は活発に変化しているので、最終確認は 公式ドキュメント を見るのが安全です。
Playwright が解決する E2E の課題
`E2E テストが嫌われる理由』 を整理すると、Playwright の価値が見えます。
①Flaky(不安定)
` 要素が描画される前にクリック』 `非同期処理が完了する前にアサート』 で、テストが時々落ちる(`flaky』)。Playwright の Auto-Wait は `要素が見える / 操作可能になるまで自動で待つ』 ので、`sleep(1000)』 を撒く必要がない。
② 失敗時のデバッグが難しい
` CI で失敗したけど、ローカルでは再現しない』 が E2E あるある。Playwright の Trace Viewer は ` 失敗ステップを動画 / スクショ / DOM スナップショット / ネットワークログ付きで遡れる』。`CI ログだけ見て原因が分かる』 が現実的に。
③ クロスブラウザの面倒さ
` Chrome では動くが Safari で壊れた』 系の問題。Playwright は 3 大エンジン(Chromium / Firefox / WebKit)を1セットで実行 できるので、`OS や Safari がなくても Safari のテストが回る』。
④ テストの書き始めが面倒
codegen で `ブラウザを開いて手で操作 → テストコードが自動生成』 が可能。`セレクタを目視で探す』 苦痛を減らせる。
`E2E が辛い』 と思っていた理由のかなりの部分が、Playwright で構造的に解消されます。
基本の書き方
最小例で雰囲気をつかみます。
// tests/login.spec.ts
import { test, expect } from '@playwright/test';
test('ユーザーがログインできる', async ({ page }) => {
await page.goto('https://example.com/login');
await page.getByLabel('メールアドレス').fill('alice@example.com');
await page.getByLabel('パスワード').fill('password');
await page.getByRole('button', { name: 'ログイン' }).click();
await expect(page).toHaveURL('https://example.com/dashboard');
await expect(page.getByRole('heading', { name: 'ようこそ' })).toBeVisible();
});
# 実行
npx playwright test
# UI モード(GUI で実行 / デバッグ)
npx playwright test --ui
# Trace を見る
npx playwright show-report
# 特定ブラウザだけ
npx playwright test --project=webkit
セレクタは `getByRole』 `getByLabel』 中心
` CSS / XPath』 ではなく ` ユーザーが見るのと同じ視点でセレクタを書く』 のが推奨。アクセシビリティのロールを使うので、`実装変更に強いテスト』 になる。
Auto-Wait
`click』 `fill』 `expect』 は ` 要素が表示 / 操作可能 / 安定するまで自動で待つ』。タイムアウト前に何度もリトライ。
UI モード
`--ui』 で立ち上がる GUI。` ステップを一つずつ再生 / 巻き戻し / ブラウザ操作で確認』 ができる。デバッグの体験が劇的に変わる。
Project 設定
`playwright.config.ts』 で `projects: [chromium, firefox, webkit]』 を宣言。`どのブラウザで回すか』 をフラグで切り替えられる。
`ユーザーがやることをそのまま書く』 のが、Playwright のテストの書き味を一言で表す部分です。
Trace Viewer の威力
Playwright の特徴で外せないのが Trace Viewer です。
// playwright.config.ts
export default {
use: {
trace: 'retain-on-failure', // 失敗時だけトレース保存
screenshot: 'only-on-failure',
video: 'retain-on-failure',
},
};
これだけで、テストが失敗したときに 動画・各ステップのスクショ・DOM 状態・ネットワークログ・コンソールログ』 がすべてのまとまったTrace』 として保存されます。
UI で全部見える
`npx playwright show-trace』 で、`タイムライン上を行ったり来たり』 しながら `各ステップでブラウザがどう見えていたか』 を確認できる。
CI 失敗の原因究明が速い
` 何が起きていたか分からないから取りあえずリトライ』 が消える。` Trace を見れば 1 分で原因が分かる』 状態になる。
本番に近いブラウザログ
` Console エラー』 `Network 異常』 `Cookie 状態』 全部追える。`動かない時の調査』 が `本番ログを見るのと同じ感覚』 でできる。
CI 統合
GitHub Actions / Vercel CI などに Trace アーティファクトを置けば、`PR の CI 失敗時に Trace をダウンロード → 開く』 が標準フローになる。
`E2E テスト最大の敵 = flaky の原因究明』 を、Trace Viewer は構造的に潰しに行きます。
codegen — 録画でテスト生成
Playwright を初めて触る人がまず驚くのが codegen です。
npx playwright codegen https://example.com
これを実行すると、ブラウザが立ち上がる + 操作録画ウィンドウが開く』。 <strong> ブラウザを手で操作』 すると、` 録画ウィンドウに自動でテストコードが書かれていく』。
セレクタ提案
` クリックした要素のベストなセレクタ』 を Playwright が自動で選んでくれる。`getByRole』 `getByLabel』 `getByText』 など、`実装変更に強いセレクタ』 を優先する。
アサーション挿入
` この要素は表示されているはず』 をボタンクリックで追加。`expect(...).toBeVisible()』 等のコードが自動で挿入される。
手書きとの相性
` codegen でたたき台を作って、後で手で整える』 のが現場の使い方。`ゼロから書く』 と `セレクタ選びで止まる』 が消える。
AI との相性
` codegen でテスト案を作る → AI に整形・拡張させる』 ループがしやすい。` AI 時代の E2E テスト作成』 の入り口として相性◎。
`書き始めの心理障壁が圧倒的に低い』 のが、Playwright の普及を後押しした地味だが重要な特徴です。
Cypress との比較
`Cypress と Playwright、どう違う?』 を表で並べます。
| 軸 | Cypress | Playwright |
|---|---|---|
| 登場時期 | 2017 | 2020 |
| 開発元 | Cypress.io | Microsoft |
| 対応ブラウザ | Chromium 系 + Firefox(WebKit は限定的) | Chromium / Firefox / WebKit すべて |
| マルチタブ / ウィンドウ | 制限あり | 完全対応 |
| iframe / OAuth リダイレクト | 制限あり | 標準対応 |
| 並列実行 | Cloud(有料) or 別構成 | 標準で並列・シャーディング |
| API テスト | 標準対応 | 標準対応 |
| Trace / デバッグ | タイムトラベル機能あり | Trace Viewer が高機能 |
| 言語 | JS / TS | JS / TS / Python / Java / .NET |
| 主な選び所 | 既存 Cypress 案件 / ローカル開発体験重視 | クロスブラウザ / 大規模 / 多言語チーム |
要点は ` クロスブラウザ重視・大規模・多言語チームなら Playwright、ローカル開発体験の手厚さで残る Cypress』 という棲み分けです。 2026 年現在は 新規プロジェクトのほぼ全てが Playwright を選ぶ 流れになっています。
どんな案件で効くか
`Playwright を選ぶ価値が出る案件』 を整理します。
向いている
① 中〜大規模 Web アプリ、② iOS / Safari 含むクロスブラウザ対応必須、③ E2E が flaky で困っている既存プロジェクト、④ Visual Regression と組み合わせたい、⑤ Storybook + Playwright で UI 検証を一体化したい。
慎重に
① 既に Cypress で安定運用している案件、② 完全に静的なサイトで E2E が要らない、③ 個人開発の数ページ MVP(やりすぎ)。
単体テストとの棲み分け
` 単体は Vitest、統合は Vitest or Playwright Component Test、E2E は Playwright』 という3層構成が2026年現在の標準。
`E2E を真面目にやる案件 = Playwright』 がほぼ等号で結べる状態が、2026 年の景色です。
どこで詰まりやすいか
便利な反面、現場で踏みやすい注意点も整理します。
①セレクタの設計
` data-testid』 を雑に貼っていくと保守が辛い。` getByRole / getByLabel / getByText』 を優先、`どうしてもなら data-testid』 という階層を守る。
② 状態のセットアップ
` 毎回ログイン処理を E2E で走らせる』 は遅い。` storageState で認証済み状態を保存 / 復元』 するパターンで、各テストの開始が高速化する。
③ CI でのリソース
` 3 ブラウザ × 並列』 で CI のリソースを大きく食う。`シャーディング(`--shard』)』 で複数 worker に分散、必要なら `主要ブラウザだけメインで、Safari は週次』 のような切り分け。
④ ネットワークモック
` 本物の API を叩く E2E』 と `モック化した E2E』 のどちらかで決め切るのが大事。`ハイブリッド』 にすると `どこで失敗したか分からない』 状態になりやすい。
E2E は維持コストが高い』 という前提を忘れず、本当に E2E にすべきシナリオに絞る』 のが運用上の鉄則です。
AI 時代の Playwright
AI 連携の文脈でも Playwright の役割は強まっています。
AI でテスト生成
` AI に E2E テストを書かせる』 ユースケースで、Playwright の API は構造化されていて出力品質が高い。`codegen + AI 整形』 が事実上の標準ワークフロー。
エージェント型 Web 操作
` AI エージェントが Web を操作する』 用途で、Playwright が基盤として広く使われている。`Browser Use』 など AI エージェントフレームワークの土台に。
AI 駆動の Visual Regression
` スクリーンショットを AI に投げて、`意味のある変化かどうか』 を判定する』 ような VR が現実的になりつつある。Playwright のスクショ機能が入り口。
`AI と Web 自動化の交差点』 にいる道具として、Playwright の重要性はテスト用途を超えて拡大しています。
Playwright に関するよくある質問
Q. Cypress から Playwright に移行する価値はありますか?
A. クロスブラウザが必要、flaky に困っている、並列実行をオープンソースで使いたい』</strong> ならアリ。既存 Cypress が安定運用できているなら無理に移行しない』 のも合理的です。`新規 / 大規模 / 移行コストが許容できる』 案件ほど Playwright のメリットが効きます。
Q. ブラウザ3つ全部で回すべきですか?
A. プロダクトのユーザー分布次第』</strong>です。Chromium だけで日常的に回し、Firefox / WebKit は週次 / リリース前』 のような運用が現実的なケースが多いです。`全部毎回回す』 は CI 時間を3倍に増やすので、目的と相談です。
Q. モバイルテストはできますか?
A. モバイルデバイスのエミュレーション』</strong>が標準サポートされています。--project='Mobile Safari'』 や devices['iPhone 15']』 のような設定で、iPhone Safari っぽい挙動』 を再現できます。本物の実機テストには BrowserStack / Sauce Labs』 のサービスを併用。
Q. Playwright と Storybook はどう組み合わせますか?
A. Playwright Component Test』</strong>を使うと、Storybook の Story をそのまま E2E として走らせることができます。Story をテストデータとして共有』 する流れで、`Vitest + Storybook + Playwright』 の3点セットがハマる案件で強力です。
Q. CI(GitHub Actions など)でどう設定する?
A. Playwright 公式のセットアップ Action』</strong>を使うのが定石です。browsers をキャッシュ』 Trace アーティファクトを保存』 失敗時の動画をアップロード』 などのテンプレが公式に揃っています。
Q. ローカルで遅いです、どうしたらいい?
A. ① --project=chromium』 で1ブラウザに絞る、② --ui』 で対象テストだけ実行、③ storageState』 で認証セットアップを使い回す、④ expect(page).toHaveURL(...)』 で正規表現マッチを使う。`どこで時間を食っているか』 を Trace Viewer で確認するのが王道です。
Q. Playwright の学習コストは?
A. 数時間で書き始められる』</strong>レベルです。codegen』 でたたき台を作り、UI モード』 で実行しながら、公式ドキュメントの API リファレンス』 を辞書として使えば十分。`E2E の本質的な難しさ』 のほうがフレームワーク学習より大きい点も覚えておく価値があります。