147
153

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で効率的に回帰テストを自動化する方法

147
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


147
153
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
147
153

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?