l

o

a

d

i

n

g

.

.

.

E2EのフロントテストでPlaywrightを使うことを決めた話 #0の続き 学習手順

2026/01/23

テクノロジー 学習

t f B! P L
eyecatch プログラミングを仕事で行う時に、品質保証を行う最低限のお作法は、テストコードです。 最近では、それの上位版の「自動テスト」は、当たり前になってきました。 gitのfooksを利用して、コミット、プルリク、push、pull、至る所のイベントをフックにして、 自動的に不具合を検知する仕組みは、安心できるデプロイにつながります。 そして、サーバーサイドのPHPなどにおける単体テストから、ある程度の結合テストは、簡易に構築できますが、 Webシステムにおけるブラウザテストって、これまでは、Seleniumの一人勝ち状態でした。 GoogleがChromeブラウザにおける、Pupetterも悪くないんですが、Playwrightの方がブラウザ対応も機能も豊富なので、徹底的にPlaywrightを学習してみようと思い、 学習手順を考えてみました。

学習手順

1. 最初に「公式の実行フロー」を掴む

Test Runner、BrowserContext、Page、Locator の役割を理解する。 特に “自動待機(auto-wait)” と “await 必須箇所” を把握。

2. 録画からコード生成で全体像をつかむ

npx playwright codegen https://your-service.com UI操作 → コード生成の流れで「どんなAPIがあるか」を一気に把握。

3. Page/Locator の使い方を強化する

locator のベストプラクティス(role, text, data-testid)に慣れる。 あなたのサービス側に data-testid を追加しておくと、テストが安定しやすい。

4. テストの骨格テンプレートを先に作る

・ログイン処理 ・権限チェック ・共通ヘッダ・メニュー周り ・各画面の基本操作
これらを “共通モジュール化” しておくと E2E が劇的に楽。

5. Before/After Hooks で環境セットを自動化

毎回ログインしないように storageState を活用。 テスト開始前に「固定データ登録」「環境クリア」を自動化。

6. CI 実行を早めに導入する

GitHub Actions / GitLab CI で早期に回す。 ローカルで動いても CI で落ちる…はよくあるので「最初からCI前提」で学ぶ。

7. 安定化テクニックを早期に吸収する

明示的 wait を減らす。 selector の揺れを避ける。 リダイレクトやSPAの非同期に強いパターンを覚える。

8. ビジュアルテストを取り入れる

toHaveScreenshot() を活用して画面崩れを検知。 大規模UIなら大きな効果。

9. 運用時の二段構成について

デプロイ時 → スモークテスト 深い操作 → 夜間定期バッチ
運用負荷が下がる。

10. プロジェクト固有の Page Object モデルを導入する

ログインページ・一覧ページ・詳細ページ…の抽象化。 テストコードが読みやすくなり、変更にも強くなる。

11. 自分のサービスの操作マップを作る

・重要導線(登録→確認→完了) ・クレームが多い箇所 ・UI変更が頻出する画面
この3つから先にテストを書くと、学習 + 価値が両立する。

最短で「実務投入」まで進める流れ

1. Playwright の QuickStart + codegen で動作とAPIを理解 2. ログイン処理だけ別モジュール化(最初の山場) 3. CI に流して「落ち方」を知る 4. スモークテスト(5本程度)をまず完成 5. 安定化ノウハウを吸収しながら詳細テストへ拡張

Webサービスを前提にしたテスト設計プラン(テンプレート)

1. 最初に作るべき「導線マップ」

・ログイン → ダッシュボード ・一覧 → 詳細 → 更新 → 保存 ・登録 → 確認 → 完了 ・検索 → フィルタ → 結果確認 ・設定画面 → 値変更 → 永続チェック 上記はほぼすべてのWebサービスで共通する“核”の導線。 この導線単位で Playwright のテストケースを構築する。

2. 画面カテゴリ別テスト設計

A. 認証系(最優先で作る) ・ログイン成功 ・パスワード間違い ・未ログイン状態で保護ページへアクセス → リダイレクトされる ・ログアウト後の再アクセス → 防止されている ・役割(管理者 / 一般ユーザー)の出し分け テスト価値が高いので最初に自動化する領域。 B. ダッシュボード(初期ホーム) ・レイアウト崩れの検知(スクリーンショット比較) ・最新データが正しく表示される ・メニュー → 各画面への遷移動作 ・API エラー時のエラーメッセージ有無 日々動く画面のため、視覚テストとの相性が良い。 C. 一覧画面 ・データがページング/スクロールで適切に表示 ・並び替え(昇順/降順) ・フィルタリング ・検索キーワードの一致 ・クリック → 詳細ページの遷移 不具合が多い領域なので網羅度を上げる価値がある。 D. 詳細画面 ・レコードID に応じて正しい情報が表示されている ・編集ボタン → 編集画面に遷移 ・削除 → モーダル確認 → 一覧へ戻る ・不正なID(例: /detail/99999)→ エラー表示 ID 誤取得や API 不整合によるバグを防ぐ。 E. 登録・更新フォーム ・必須項目未入力のバリデーション ・形式エラー(メール形式 / 文字数) ・正常値入力 → 登録成功 ・登録後のリダイレクト(ありがとうページなど) ・更新後の差分反映 ・モバイル幅での崩れ(レスポンシブテスト) E2Eの中で最も「目視テストの工数を削減できる領域」。 F. 設定画面(永続性テスト) ・値更新 → 再ログインしても保持されている ・フラグ(ON/OFF)の反映 ・クライアント側のキャッシュクリア時も正しく動作 API が落ちたときのエラー UI G. 二次機能(通知 / ファイル / CSV) ・CSV import → 期待通りの登録 ・CSV export → 正しいデータ ・通知バナー(成功 / 失敗)が出る モーダル・ダイアログの挙動

3. 優先度(P1 → P3)

P1(デプロイ前に常に回す) ・認証 ・メイン導線(一覧 → 詳細 → 更新) ・新規登録の成功シナリオ P2(デイリーまたはリリース時のみ) ・フィルタ・検索 ・設定画面 ・削除・例外動作 P3(週次や夜間バッチ) ・レスポンシブテスト ・スクリーンショット比較 ・非主要導線

4. Playwrightでの構造(推奨フレーム)

tests/auth/ tests/dashboard/ tests/list/ tests/detail/ tests/form/ tests/settings/ Page Object モデルはこう分ける pages/LoginPage.ts pages/DashboardPage.ts pages/ListPage.ts pages/DetailPage.ts pages/FormPage.ts 共通ユーティリティ helpers/loginState.ts(storageState 永続化) helpers/wait.ts(安定化処理) helpers/faker.ts(テストデータ生成)

5. 自動化運用フロー

PR 作成 → スモークテスト(P1) main 反映 → P2 まで実行 夜間の定期 → フルテスト(P1〜P3) こうする事で、「開発速度を下げずに E2E を最大限活用」できる運用が作れる。

あとがき

学習手順が定まったら、あとはひたすら学習を進めるだけです。 わからないことが分かったら、モチベーションもアップするし、実務効率もアップします。 効率が上がれば、時間の余裕が生まれて、時間の余裕が生まれたら、他の色々な事ができるようになります。 う〜ん、早く学習完了したくなってきた・・・

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ