記事検索

検索ワードを入力してください。
Sky Tech Blog
GitHub Copilot(AI) + Playwright MCPで​E2E自動テスト作成を​快適に​する

GitHub Copilot(AI) + Playwright MCPで​E2E自動テスト作成を​快適に​する

GitHub CopilotとPlaywright MCPを使用して、E2E(エンドツーエンド)自動テストの作成を効率化する方法について説明しています。

GitHub Copilot(AI) と Playwright MCPを使ってE2E(エンドツーエンド)の自動テスト作成を快適にするお話です。

Playwrightとは

Microsoftが開発したブラウザ自動化ツールでE2E(エンドツーエンド)の自動テストなどに用いられます。

Playwright MCP(Model Context Protocol) はブラウザを直接操作できるようにするプロトコルになります。

Playwright MCPの​利用準備

※Visual Studio Code + GitHub Copilot でPlaywright MCPを使う手順になります。

  1. Visual Studio Code のショートカット Ctrl + Shift + P でコマンドパレットを表示する
  2. settings.jsonファイルを開く
  3. mcp > server > playwright項目に以下を設定する
 "mcp": {
    "servers": {
      "playwright": {
        "command": "npx",
        "args": ["@playwright/mcp@latest"]
      }
    }
  }
  1. Playwrightの上部に表示される「Start」をクリックする

  1. GitHub CopilotをAgentモードにする

AI + Playwright MCPを​使った​E2E自動テスト作成の​イメージ

基本的なステップとしては以下の3つ

  • テストを作成する画面をブラウザで開く(Playwright MCP)
  • 開いた画面の操作可能な要素を抽出する
    スナップショット(画面を構成するTree情報)を取得する(Playwright MCP)
    スナップショットを元にPageオブジェクトのクラス(操作部品を定義したクラス)を生成する(AI)
  • 生成したPageクラスを使ってテストを作成する(AI)

この流れを図にすると以下のようなイメージです。

この手順である程度のテストが作れてしまいます。

AIの​ここに​感動

日付の範囲を選択するようなUIがあり、GitHub Copilotに日付範囲を選択する関数の作成を指示します。

[GitHub Copilotへの指示]  
日付範囲を指定する関数を作成してください  
引数はstart: 2025/5/20 end: 2025/6/10 のようにstartとendを指定できるモノにしてください  

すると以下のように、開始日を指定 → 終了日を指定する処理をサクッと作成します。
引数に渡された年月が表示されている年月と異なれば、ちゃんと移動もしてくれるように実装されています。

※AIが生成するものなので、利用者が生成されたコードの良し悪しの判断が必要です。

 /**
   * 日付範囲を指定する
   * @param {string} start 開始日(例: '2025/5/20')
   * @param {string} end 終了日(例: '2025/6/10')
   */
  async selectDateRange(start: string, end: string): Promise<void> {
    // 開始日・終了日をDate型に変換
    const [startY, startM, startD] = start.split('/').map(Number);
    const [endY, endM, endD] = end.split('/').map(Number);

    // 開始日を選択
    await this._selectDateInDialog(startY, startM, startD);
    // 終了日を選択
    await this._selectDateInDialog(endY, endM, endD);
  }

  /**
   * 日付範囲ダイアログで指定した日付を選択する
   * @param {number} year 年
   * @param {number} month 月
   * @param {number} day 日
   */
  private async _selectDateInDialog(year: number, month: number, day: number): Promise<void> {
    // 月のラベルが一致するまで前/次ボタンで移動
    let currentLabel = await this.dateRangeMonthLabel.textContent();
    while (!currentLabel?.includes(`${year}${month}月`)) {
      // 年月が進みすぎていたら前月、足りなければ次月
      const [labelYear, labelMonth] =
        currentLabel
          ?.match(/(\d{4})年(\d{1,2})月/)
          ?.slice(1, 3)
          .map(Number) || [];
      if (labelYear > year || (labelYear === year && labelMonth > month)) {
        await this.dateRangePrevMonthButton.click();
      } else {
        await this.dateRangeNextMonthButton.click();
      }
      currentLabel = await this.dateRangeMonthLabel.textContent();
    }
    // 指定日をクリック
    await this.dateRangeDayOptions
      .filter({ hasText: String(day) })
      .first()
      .click();
  }

最後に

今回GitHub Copilot + Playwright MCPを使ってみて、E2E自動テスト作成の効率が大幅に向上する未来が見えました。

今後は操作する部品の抽出や、細かな操作処理の作成はある程度AIに任せられそうなので、快適な自動テストライフを送れるのではないかと期待しています。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム