プログラミング ソフトウェア 公開日 2026.05.15 更新日 2026.05.15

Playwright とは何か?クロスブラウザ E2E テストの定番と Cypress との使い分け

Playwright は Microsoft 製のクロスブラウザ E2E テストフレームワークで、Chromium / Firefox / WebKit のすべてを1つのコードで自動操作できます。Auto-Wait による安定性、trace / video / codegen のデバッグ支援、並列実行などが特徴で、Cypress に対する有力な選択肢として2026年現在は事実上のデファクトです。

先に要点

  • 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年現在の標準。

Visual Regression

`expect(page).toHaveScreenshot()』 だけで `スクリーンショット差分テスト』 ができる。Chromatic ほどリッチではないが、`自前で VR 基盤を作る』 入り口として有力。

`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 のスクショ機能が入り口。

本番 / プロダクション監視

` 本番サイトを定期的に Playwright で巡回 → 異常検知 → AI で要約』 という監視パターン。Synthetic Monitoring の DIY 構築。

`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 の本質的な難しさ』 のほうがフレームワーク学習より大きい点も覚えておく価値があります。

参考リンク

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。