Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

139
142

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リグレッションテストとは?Playwrightで効率的に回帰テストを自動化する方法

139
Last updated at Posted at 2026-03-05

はじめに

「前は動いてたのに、なぜか動かなくなった…」

開発を進めていると、こんな経験をしたことがある方も多いのではないでしょうか。

新機能の追加やバグ修正によって、既存の機能が壊れてしまう。これを防ぐために行うのが リグレッションテスト(回帰テスト) です。

本記事では、リグレッションテストの基本概念と、Playwrightを使った効率的な自動化方法を解説します。


リグレッションテストとは

リグレッションテストは、コードの変更後に「既存の機能が壊れていないか」を確認するテストです。

「リグレッション(regression)」は「後退」「退行」という意味で、ソフトウェアの品質が後退していないかを検証します。


なぜリグレッションテストが必要か

ソフトウェア開発では、以下のような変更が日常的に発生します。

  • 新機能の追加
  • 既存機能の改修
  • バグ修正
  • ライブラリのアップデート
  • リファクタリング

これらの変更は、意図せず既存機能に影響を与えることがあります。

例えば、ログイン機能を改修した結果、関係ないはずの検索機能が動かなくなる、といったケースです。

リグレッションテストを定期的に実施することで、このような問題を早期に発見できます。


手動 vs 自動化

リグレッションテストは手動でも実施できますが、自動化するメリットは大きいです。

観点 手動テスト 自動テスト
実行速度 遅い 速い
実行コスト 毎回人的工数が必要 初期構築後は低コスト
再現性 担当者により差が出る 毎回同じ条件で実行
実行頻度 限られる CI/CDで毎回実行可能

特にリグレッションテストは「同じテストを何度も繰り返す」という性質上、自動化の効果が高いです。


Playwrightでのリグレッションテスト実装

Playwrightを使ったリグレッションテストの実装方法を解説します。


プロジェクト構成

保守性の高いテストコードにするため、Page Object Model(POM)パターンを採用します。

tests/
└── ecsite/
    ├── locators/      # 要素のロケーション定義
    ├── pages/         # ページ操作クラス
    └── tests/         # テストファイル

Locatorクラスの実装

各ページの要素を定義します。

// login-page-locators.ts

export class LoginPageLocators {
  static readonly EMAIL_INPUT = 'input[name="email"]';
  static readonly PASSWORD_INPUT = 'input[name="password"]';
  static readonly SIGN_IN_BUTTON = 'button:has-text("Sign In")';
}

Pageクラスの実装

ページ操作をメソッドとして実装します。

// login-page.ts

import { Page } from '@playwright/test';
import { BasePage } from '../base/base-page';
import { LoginPageLocators } from '../locators/login-page-locators';

export class LoginPage extends BasePage {
  constructor(page: Page) {
    super(page);
  }

  /**
   * Fill in the email field
   * @param email - The email address to enter
   */
  async fillEmail(email: string): Promise<void> {
    await this.page.locator(LoginPageLocators.EMAIL_INPUT).fill(email);
  }

  /**
   * Fill in the password field
   * @param password - The password to enter
   */
  async fillPassword(password: string): Promise<void> {
    await this.page.locator(LoginPageLocators.PASSWORD_INPUT).fill(password);
  }

  /**
   * Click the Sign In button
   */
  async clickSignIn(): Promise<void> {
    await this.page.locator(LoginPageLocators.SIGN_IN_BUTTON).click();
  }
}

Testクラスの実装

実際のテストを記述します。

// 01-login.spec.ts

import { test, expect } from '@playwright/test';
import { MainPage } from '../pages/main-page';
import { LoginPage } from '../pages/login-page';
import { MyAccountPage } from '../pages/my-account-page';

test.describe('Login Test Suite', () => {
  test('User Login flow', async ({ page }) => {
    const mainPage = new MainPage(page);
    const loginPage = new LoginPage(page);
    const myAccountPage = new MyAccountPage(page);

    // Test data
    const testEmail = 'test@example.com';
    const testPassword = 'P@ssw0rd';
    const expectedFullName = 'Test User';

    // 1. Navigate to the home page
    await mainPage.goto();

    // 2. Click the account icon to navigate to login page
    await mainPage.clickAccountIcon();

    // 3. Fill in credentials
    await loginPage.fillEmail(testEmail);
    await loginPage.fillPassword(testPassword);

    // 4. Click Sign In
    await loginPage.clickSignIn();

    // 5. Verify navigation to My Account page
    await mainPage.clickAccountIconMyAccount();
    await expect(myAccountPage.getFullNameValue()).toContainText(expectedFullName);
  });
});

リグレッションテストの実行戦略

すべてのテストを毎回実行するのは非効率な場合があります。状況に応じた実行戦略を検討しましょう。


改修範囲に応じた判断

改修内容に応じてテストの実行範囲を判断します。
以下はその一例です。

改修内容 テスト実行範囲
ログイン機能の改修 ログイン関連テスト全件 + 主要機能の正常系
検索機能の改修 検索関連テスト全件 + 主要機能の正常系
ライブラリアップデート 全テスト実行
リリース前 全テスト実行

テストの優先度付け

リソースが限られる場合、優先度を付けてテストを選定します。
以下はその一例です。

  1. 最優先:壊れると売上に直結する機能(ログイン、購入、決済)
  2. :ユーザーが頻繁に使う機能(検索、閲覧)
  3. :過去にバグが発生した機能
  4. :使用頻度が低い機能

テスト失敗時のデバッグ

リグレッションテストが失敗した場合、Playwrightの機能を活用して効率的にデバッグできます。


HTML Reporterの活用

テスト結果をHTMLレポートで確認できます。

npx playwright show-report

image.png

失敗したテストのステップ、エラーメッセージを確認できます。
公式ドキュメントはこちら


Trace Viewerの活用

テスト実行中の画面状態を時系列で確認できます。

playwright.config.tsで以下の設定をしておきます。

use: {
  trace: 'retain-on-failure',
},

これにより、失敗したテストのトレースが自動保存され、以下の情報を確認できます。

  • どのステップで失敗したか
  • その時点の画面状態
  • ネットワークリクエストの状況

image.png

公式ドキュメントはこちら


まとめ

リグレッションテストは、コード変更後の品質を担保するために欠かせないテストです。

本記事のポイントをまとめます。

  • リグレッションテストは「既存機能が壊れていないか」を確認するテスト
  • 繰り返し実行する性質上、自動化の効果が高い
  • Page Object Modelパターンで保守性の高いテストを実装する
  • 改修範囲や優先度に応じてテスト実行範囲を判断する
  • HTML ReporterやTrace Viewerでデバッグを効率化する

もっと詳しく学びたい方へ

本記事で紹介したPlaywrightでのリグレッションテスト自動化を、ハンズオン形式で体系的に学べる講座を公開しています。
実際のECサイトを題材に、POMパターンの実装からTrace Viewerを使ったデバッグ、AIエージェントを活用したテストコード生成まで実践的に学べます。

playwright-agents-course


139
142
2

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

@ShotaFukuyama's pickup articles

ShotaFukuyama

@ShotaFukuyama(Shota Fukuyama)

Udemyベストセラー講師|受講者数35,000名超 現役エンジニア10年|AI駆動開発・フルスタック・AWS専門 生産性5倍を実現するAI開発手法を伝授 最新コース「AI駆動開発実践コース」開講中 実務経験と最新技術を融合した実践的スキルをお届けします。
shocode-ai
AI駆動開発で生産性5倍を実現するプログラミング教育を提供しています。Cursor・GitHub Copilot等のAIツールに対応した実践的なカリキュラムで、要件定義からテスト工程までの開発手法を体系的に指導しています。受講者数35,000名超の実績を持つ講師がサポートします。

Linked from these articles

Comments

@doc_lab

Playwrightつい最近使用しました。
「jsの単体テスト自動化したい!」と思っていたのでAIエージェントの検証と一緒にPlaywrightを使った単体テストも作成してもらいました。
スクショ、動画、レポート等色々な機能が盛りだくさんで感動しました
リグレッションテスト。ぜひ品質向上の為にもやるべきだと思います!

1

コメントいただきありがとうございます!

Playwrightは本当に機能が充実していますよね。スクリーンショットや動画の自動記録、HTMLレポートなど、初めて使ったときは自分も「ここまでできるのか!」と驚きました。その感動、とても共感できます。

AIエージェントと組み合わせてテストコードを生成されたとのことで、まさに今の時代に合った効率的なアプローチですね。新しい活用方法を積極的に試されている姿勢、こちらも刺激をいただきました。ありがとうございます!

1

Let's comment your feelings that are more than good

139
142

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address