エンジニアリンググループ GM 兼 QA チームリーダーの窪田です。本日はマネジメントチームブログリレー4日目として、現在取り組んでいる自動テストを Playwright で構築するチャレンジについてお話しします。

エムスリーでは E2E の自動テストを、リリース前の基本動作チェックや開発直後のセルフ動作チェックなどで活用しています。これまでもブログで紹介してきましたが、メンバー全員で自動テストに取り組むためにプログラミングスキルにあまり依存しないローコードツールを活用してきました。
また、昨年度より QA メンバーだけでなくエンジニアリンググループのメンバー全員で品質確保の活動に取り組む「全員QA」の方針を掲げています。開発メンバーにも自動テスト開発・保守を担ってもらうといった観点で言うとツールを用いて画面上で作成、管理するよりも、コードベースで開発・保守を行うほうが効率が良いのではないかと思っていました。上記に加えて、CI/CD パイプラインとの親和性や、テストコードのバージョン管理、AI ツールとのコラボレーション、カスタマイズ性などを考慮すると、ローコードツールよりもコードベースでの自動テスト開発・保守にいつか取り組みたいなと考えていました。
全員 QA の参考記事はこちら。
去年〜今年にかけて生成 AI によるコード生成の進化と周辺システムの充実の結果、自動テストのコードを気軽に作れるようになりました。きちんとルールを整備したりレビューを実施することで保守可能な自動テストのコードを維持できる目処が立ちました。
こうした背景を踏まえて、次の方針で E2E 自動テストを構築することにしました。
実装のイメージは下記図のようになります。
VS Code の Claude Code プラグインから上記の図のように playwright-mcp を利用してページオブジェクトを作成する場合、次のような指示を出します。
m3.com に playwright-mcp を使ってアクセスし、ログインページのページオブジェクトを作成してください。
すると次のようなファイルが生成されます(そこそこ長かったので一部省略しています)。
import{ Page, Locator}from'@playwright/test';/** * M3.com ログインページのページオブジェクト */exportclass LoginPage{readonlypage:Page;readonlyloginIdInput:Locator;readonlypasswordInput:Locator;readonlyloginButton:Locator;constructor(page:Page){this.page = page;// ログインフォームの要素this.loginIdInput = page.getByPlaceholder('ログインID');this.passwordInput = page.getByPlaceholder('パスワード');this.loginButton = page.getByRole('button',{name:'ログイン'});}/** * ログインページに遷移 */asyncgoto(){awaitthis.page.goto('https://m3.com');}/** * ログイン実行 *@param loginId ログインID *@param password パスワード */asynclogin(loginId:string, password:string){awaitthis.loginIdInput.fill(loginId);awaitthis.passwordInput.fill(password);awaitthis.loginButton.click();}/** * ログインIDとパスワードを入力(ログインボタンは押さない) *@param loginId ログインID *@param password パスワード */asyncfillLoginForm(loginId:string, password:string){awaitthis.loginIdInput.fill(loginId);awaitthis.passwordInput.fill(password);}/** * ログインページが表示されているか確認 */asyncisLoginPageDisplayed():Promise<boolean>{returnawaitthis.loginButton.isVisible();}}
ほとんど想定通りのファイルが出力されています(初手でここまでできるのはすごい)。
特に設定や指示をしていない場合、次のような問題が発生します。
これらの問題が発生しないように、きちんとプロンプトで指示をするか設定ファイルに記述をして狙った動きになるように誘導すると効率的にテストを作成できます。
Claude Code を利用することにより次のようなメリットもあります。
簡単な構成のページであれば仕様をインプットしなくてもテストケースをほぼ完璧に作成してくれますが、複雑なページの場合は仕様をインプットしてあげるとより良いテストケースを作成してくれます。仕様を事前に取得して、リポジトリにおいておくとそれを参照してテストケースを作成してくれるためかなりスムーズに自動テストを導入できます。
生成 AI を活用して自動テストを書けそうというのはわかったのですが、課題は「全員が自動テスト開発に取り組む」の部分です。今回次のような取り組みをしました。
ツールの導入を含めたハンズオンを実施し、後はプロンプトに指示を出すだけの状態まで何回かに分けてサポートしました。上記の通り Claude Code に指示を出せばそれなりのコードが生成されます。後はこのコードをセルフチェックし適切に作成されているかを確認します。スキルにばらつきがあるためレビューを実施し、必要に応じて修正点をフィードバックしました。
取り組んでくれたメンバーに上記活動の感想を聞いたところ色々と面白い意見がありました。
AI に聞きながらプログラミングのスキルを上げているのが非常にいいことだと思いました。これまでだとある程度つきっきりで指導をしないと業務で活用できるまでになるのは難しかったですが、生成 AI を活用することで自走できるようになっているのが素晴らしいです。
まずは1つのチームで全員が自動テスト開発に取り組むチャレンジを始めました。現在までに実施できているのは以下です。
今後の課題としては以下があります。課題については生成 AI の活用により解決を狙っていきます!
今後他のチームにも同様に導入し自動テスト開発、QA 業務全般での生成 AI 活用を広めていきたいです。テスト計画〜テスト実施までの一連の AI 活用は現在実験的に取組中であるため今後改めて報告したいと思います。
エムスリーではエンジニアを絶賛大募集しております。品質やテストに興味のある方は QA チームでも QA チーム以外の組織でも大歓迎です。テクノロジーを駆使して品質をガンガン上げていきましょう!
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。