Webサイトや業務システムの改修のたびに、ログインから申し込み完了までを手で確かめている。Playwrightでテストを書いても、画面の文言や配置が変わるたびに直す手間がかかる。こうした手間に向けて、TesterArmyは「プランをProに上げる」のような文章で指示するとAIが画面を操作するE2Eテストの枠組み「e2e」を、オープンソースで公開しています。
2026年10月5日に、tester-army/e2e リポジトリの 0.17.0 のタグ(commit 09733be、2026年10月4日)を取得し、README・セキュリティモデル・キャッシュ・モデル設定・テレメトリの文書と、npmの公開記録を読みました。本記事は資料調査と編集部の提案です。e2eのインストールと実行は、この環境では行っていません。
e2eとは:AIの手順と通常の確認を同じテストに書く
READMEの例は次のような形です。agent.act() と agent.assert() で文章による指示と判定を書き、最後は通常の expect で画面の状態を確かめます。
import { test, expect } from 'e2e';
test('a member upgrades to Pro', async ({ app, agent, screen }) => {
await app.open('/settings/billing');
await agent.act('upgrade the workspace to the Pro plan');
await agent.assert('the invoice preview shows a prorated amount');
await expect(screen.getByRole('status')).toContainText('Pro');
});
文書から確認できた基本的な性質は次のとおりです。
| 項目 | 0.17.0の文書・npmの記録 |
|---|---|
| ライセンス | Apache-2.0 |
| 対象 | Web(Playwright経由でChromium・Firefox・WebKit)とiOS・Android |
| Node.js | >=22.12.0(npmの engines) |
| モデル | 既定のモデルはなし。自分の契約・APIキー・ローカルのモデルを設定する。AIの手順がないテストはモデル不要 |
| 開発段階 | 「on the way to 1.0」。マイナー版の間でもAPIと設定が変わり得る |
特徴は、AIの操作を記録して次回から再生する仕組みです。agent.act() の操作が、後の確認で正しかったと分かると、その操作が記録されます。次回は画面が変わっていない限り、モデルを呼ばずに再生します。画面が変わって合わなくなると、その時点からAIが引き継ぎます。一方、agent.assert・agent.waitFor・agent.extract は毎回AIが判定します。

導入前に決める5つの境界
セキュリティモデルの文書は、守れる範囲と守れない範囲をはっきり書いています。受託案件のステージング環境で使う場合、次の5点を先に決めておくのが安全だと編集部は考えます。
1. テストはOSの権限で動く。サンドボックスはない
文書には「e2e does not sandbox them.」とあり、テストコード・設定・ツール・レポーターなどは実行する人の権限で動きます。信頼できないプルリクエストのコードは、秘密情報や書き込み権限のトークンを持たない外部のサンドボックスで動かすよう求めています。外部の協力会社が出すプルリクエストでテストを自動実行する構成なら、CIの権限の分け方から見直します。AIエージェントの実行環境の分け方は、AIエージェントのサンドボックスと許可リストの記事で整理しています。
2. 秘密情報の入力先に、送信先の許可リストはない
文書には「Navigation and secret fills have no origin allowlist.」とあります。AIはアプリから別のサイトへ移ることができ、その手順に渡された秘密情報を移動先でも入力し得る、という意味です。パスワードはパスワード欄にしか入れない、入力後はスクリーンショットを止める、といった保護はあります。それでも、本番のアカウントやクライアントの管理者アカウントを渡すのは避け、テスト専用のアカウントと、外部へ出られないネットワークで動かすのが前提になります。
Basic認証の設定(basicAuth)は、どのオリジンからの401応答にも答えると書かれています。また、追加のヘッダーを送る範囲の判定は公開サフィックスリストを使わない近似で、vercel.app のような共有ドメインでは、同じドメインの他のホストにヘッダーが届き得ます。プレビュー環境の認証をヘッダーで通している場合は注意が必要です。
3. モデルに渡るのは「画面の中身」
モデルには、画面のアクセシビリティツリー(ノードのID・役割・名前・テキストなど)と、伏せ字にしたURLが渡ります。スクリーンショットは、必要なときに、パスワード欄などが伏せられていることをエンジンが確認でき、その試行で秘密情報を入力していない場合に限って渡されます。つまり、テスト環境に表示される顧客名や問い合わせ内容は、設定したモデルの提供元に送られます。クライアントとの契約で外部のAIサービスへのデータ送信をどう扱うかを先に確かめ、必要ならダミーデータの環境を使うか、ローカルや自社管理のモデル(OpenAI互換のエンドポイント)を設定します。
4. 記録したキャッシュはテストコードとして扱う
記録は .e2e/cache/ にJSONで保存されます。プロンプトやスクリーンショット、秘密情報の値は含みませんが、秘密情報として渡していない入力値は「stored verbatim」(そのまま保存)と書かれています。e2e init は既定でこのディレクトリを .gitignore に入れます。チームで共有するためにコミットする場合、文書は「テストデータとしてプルリクエストでレビューする」よう求めています。キャッシュの操作もOSの権限で再生されるためです。
5. CLIの利用状況の送信は既定でオン
CLIは匿名の利用状況(使ったコマンドやエンジン、失敗した場所など)を既定で送ります。テストの中身・アプリの中身・認証情報は送らないとされています。クライアントのポリシーで外部送信を止める必要があれば、CIで E2E_TELEMETRY_DISABLED=1(または DO_NOT_TRACK=1)を設定します。E2E_TELEMETRY_DEBUG=1 を付けると、送らずに送信内容だけを表示できます。
試すなら、どこから始めるか(編集部の提案)
- AIの手順を使わないテストから始める。 モデルを設定しなくても動くため、既存のPlaywrightのテストとの書き味の違いを先に確かめられます。Playwright×AIでQAを自動化する記事の構成と比べると判断しやすくなります
- ステージングの、ダミーデータの画面で
agent.act()を1つだけ試す。 実行の要約に出るモデルの呼び出し回数とキャッシュの再生結果(replayed・handed off・missed)を記録し、2回目にモデルを呼ばずに済むかを見ます - 版を固定する。 0.x系でマイナー版でも変わり得るため、
package.jsonは正確な版で固定し、上げるときは変更点を読んでからにします。なお、npmのe2eという名前には2014年から別の版の公開記録があります。導入時はrepositoryが tester-army/e2e を指しているかを確かめます
AIに画面を操作させるテストは、壊れにくさと引き換えに、渡す権限とデータの範囲を広げます。まずは「どのアカウントを使い、どのネットワークで動かし、どのモデルに画面を見せるか」の3つを決めてから試してください。テストを定着させる体制づくりは、テスト自動化が定着しない理由の記事でまとめています。
2026年10月5日に、tester-army/e2e リポジトリの e2e@0.17.0 タグ(commit 09733be)の README.md・docs/security.mdx・docs/cache.mdx・docs/models.mdx・docs/telemetry.mdx・docs/authentication.mdx・packages/e2e/package.json と、npmレジストリの e2e・@e2e-dev/web の公開記録を直接開いて照合しました(資料調査)。導入の進め方は編集部の提案です。e2eのインストール・実行、モデルの呼び出し、キャッシュの再生は確認していません。TesterArmyのWebサイトと e2e.tester.army の文書サイトの内容は照合していません。
テストの自動化やCIの権限設計、AIを使った開発体制の見直しは、グリームハブの開発・AI・自動化のご相談で承っています。案件の規模や扱うデータによって進め方が変わるため、お問い合わせからご相談ください。
参考資料
- tester-army/e2e — README.md(e2e@0.17.0)
- tester-army/e2e — docs/security.mdx(e2e@0.17.0)
- tester-army/e2e — docs/cache.mdx(e2e@0.17.0)
- tester-army/e2e — docs/models.mdx(e2e@0.17.0)
- tester-army/e2e — docs/telemetry.mdx(e2e@0.17.0)
- tester-army/e2e — docs/authentication.mdx(e2e@0.17.0)
- npm registry — e2e
- npm registry — @e2e-dev/web









