e2e は、TesterArmy が公開した、自然言語E2Eテストを掲げるオープンソースのフレームワークです。テストに目標を自然言語で書くと、エージェント(モデル)が画面を読んでアプリを操作し、目標に到達させます。結果の確認は、同じテストの中でロケータや従来のアサーションでも、自然言語の検証でも書けます。web とモバイルの両方に対応し、ライセンスは Apache-2.0。GitHub では star 12.2k(fork 636・2026-10-30 時点の実測)と、公開直後から大きく伸びています。
名前の通り「e2e」は一般名詞でもあり、npm の e2e パッケージ(最新 0.21.3・2026-10-23 公開)がこれにあたります。似た発想の OSS も複数あるため、本記事は TesterArmy の e2e を指します。この記事は、仕組み・使い方・ほかのツールとの違い・pre-1.0 としての注意を、リポジトリと公式ドキュメントの実測で整理します。AIエージェントの枠組みを俯瞰したい場合はAIエージェントフレームワーク比較2026|LangGraph・CrewAI・Dify等9種をStar数・実コードで検証もどうぞ。
HOW A TEST RUNSテストが走る流れ
目標を文で書くと、エージェントがアプリを操作する
-
開く
app.open('/settings/billing')
対象の画面を開く。web は Playwright(Chromium/Firefox/WebKit)、モバイルは実機/エミュレータ
-
操作
agent.act('Pro プランに上げる')
モデルが画面(リダクトしたテキスト)を読み、行動を選ぶ。HTML・Cookie・環境変数は渡さない
-
検証
agent.assert / expect(...)
assert・waitFor・extract は常に実行。ロケータと従来のアサーションも同じテストに書ける
-
再生
次回はキャッシュから再生
検証が通った act の行動を記録し、次回はモデル呼び出し無しで再生。画面が変わった時だけエージェントが引き継ぐ
30秒でわかる
- ・e2e は TesterArmy の OSS E2E テストフレームワーク。目標を自然言語で書くとエージェントがアプリを操作し、ロケータ/自然言語の両方で結果を検証できる。
- ・検証が通った操作はキャッシュに記録し、次回はモデル呼び出し無しで再生。画面が変わった時だけエージェントが引き継ぐ(自己修復)。
- ・web は Playwright(Chromium/Firefox/WebKit)、モバイルは実機/エミュレータ。モデルは持ち込み(BYO)。ACP で Claude Code・Codex・Cursor などに実行を任せることもできる。
- ・Apache-2.0・star 12.2k・pre-1.0(1.0 までは API/設定が変わりうる)。npm 最新は 0.21.3。
これは何か:自然言語E2Eテストの書き味
公式の例は、次のように読めます(README より抜粋)。app.open で画面を開き、agent.act に目標を文で渡し、agent.assert と従来の expect で結果を確かめます。
// tests/checkout.e2e.ts
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');
});
ポイントは、操作(act)と検証(assert や expect)を同じテストに混ぜて書けることです。曖昧になりがちな部分はエージェントに任せ、確定させたい部分はロケータと従来のアサーションで固定できます。
SELECTOR VS AGENT従来と何が違うか
セレクタを書くか、目標を書いて任せるか
従来のセレクタ中心 E2E
e2e(エージェント駆動)
従来のセレクタ中心 E2E: 操作手順をセレクタで逐一記述
e2e(エージェント駆動): 目標を自然言語で書き、エージェントが操作を選ぶ
従来のセレクタ中心 E2E: UI が変わると壊れて書き直し
e2e(エージェント駆動): 画面が変わった箇所だけエージェントが引き継ぐ(自己修復)
従来のセレクタ中心 E2E: 毎回同じ手順を実行
e2e(エージェント駆動): 検証済みの act はキャッシュから再生し、モデル呼び出しを省く
仕組み:act は録画して再生、assert は常時ライブ
e2e の実務上の工夫は、モデル呼び出しを必要な場面に絞るところにあります。ドキュメント(cache)によると、agent.act のステップは、後続の検証が通った時点でその操作が記録されます。次回の実行は、その記録をモデル呼び出し無しで再生します。コントロールや期待する最終状態が合わなくなったときだけ、エージェントが現在の画面から操作を引き継ぎます(自己修復)。一方、agent.assert・agent.waitFor・agent.extract は常にライブで実行されます。実行後のサマリは、使ったトークン・モデル呼び出し数と、キャッシュの再生/引き継ぎ/ミスの件数を並べて表示します。
WHAT YOU NEED使い始めの要点
npx e2e init から。モデルは持ち込み
-
1.エンジンを選ぶ(web / モバイル)
web は Playwright の3ブラウザ、モバイルは iOS/Android のシミュレータ・エミュレータ。ホスト型ブラウザの選択肢も複数
-
2.モデルは持ち込み(BYO)
サブスク・API キー・ローカルモデルのいずれか。agent ステップの無いテストはモデル不要
-
3.自前のコーディングエージェントでも実行(ACP)
@e2e-dev/acp で Claude Code・Codex・Cursor など ACP 対応エージェントに act/assert を任せられる
-
4.ライセンスは Apache-2.0・pre-1.0
1.0 までは API や設定が変わりうる。本番運用は版の固定と追従を前提に
モデルに渡す情報も絞られています。act の際にモデルが見るのは、命令・パラメータ・完了済みステップと、リダクト(伏字化)した画面のテキストスナップショット(要素の役割・名前・テキスト・状態)だけです。生の HTML・Cookie・ヘッダ・環境変数は渡さず、パスワード欄はマスクされ、設定した秘密値は画面上で <secret:name> に置き換わります。行動のあとは差分(変わった部分)だけがモデルに渡り、大きく変わったときに全体のスナップショットが渡される、という設計です。ノード id は要素が存在する間は変わらないため、モデルは同じ要素を追い続けられます。テストの意図を自然言語に寄せつつ、モデルへ渡す情報は最小に保つ、という方針が一貫しています。
実行後のサマリは、こうしたモデル利用を数字で見せます。ドキュメントの例では「AI 4.1k tokens・2 model calls」「Cache 4 replayed・1 handed off・1 missed」のように、消費トークンとモデル呼び出し数、キャッシュの再生/引き継ぎ/ミスの内訳が並びます。どのステップでモデルを使い、どこがキャッシュで済んだのかが毎回見えるので、コストの当たりをつけやすいのが実務的です。キャッシュの保存は read-write モードで、act の後に後続の検証が通ったときに、その試行の終わりに記録されます。検証を伴わない act は記録の対象になりません(確かめられていない操作を正解として焼き付けないため)。
使い方と構成:npx e2e init と 12 のパッケージ
導入は init から始めます。エンジン(web かモバイル)とモデルプロバイダを尋ね、設定ファイルと例のテストを書き出します。
npx e2e init
リポジトリは pnpm のモノレポで、本体の e2e(SDK・ランナー・CLI)に加え、用途別のパッケージが分かれています。主なものは次のとおりです。
| パッケージ | 役割 |
|---|---|
e2e |
SDK・ランナー・CLI(本体) |
@e2e-dev/web |
web エンジン:Playwright 経由で Chromium・Firefox・WebKit |
@e2e-dev/mobile |
モバイルエンジン:iOS/Android のシミュレータ・エミュレータ |
@e2e-dev/acp |
自前のコーディングエージェント(Claude Code・Codex ほか)で act/assert を実行 |
@e2e-dev/decision |
意味的な操作・検証の実行器と、PR が影響しないテストを外す decisionFilter() |
@e2e-dev/github |
結果を PR コメントとして投稿するレポーター |
@e2e-dev/kernel ほか |
Kernel・Lightpanda・smol・Limrun・EAS・TestMu などのホスト型ブラウザ/端末 |
examples には Vite・Next.js・Astro・Angular・Expo・SwiftUI・Jetpack Compose・Kotlin Multiplatform・Flutter・.NET MAUI の動くサンプルが各1本ずつ入っており、自分のスタックに近い構成から始められます。
CI 向けの作り込みもあります。@e2e-dev/github は結果を PR のコメントとして投稿するレポーターで、@e2e-dev/decision の decisionFilter() は「その PR が影響しそうにないテストを外す」ための仕組みです。大量の E2E を毎回すべて回すのではなく、変更に関係するものへ絞る発想で、モデル呼び出しのコストと実行時間の両方に効きます。実行環境も選べて、web ではローカルの Playwright のほかに、Kernel・Lightpanda(OSS のヘッドレスブラウザ)・smol(温めた Chromium の microVM を試行ごとに分岐)・Limrun・EAS・TestMu といったホスト型の選択肢が用意されています。モバイルも同様に、ローカルのシミュレータ/エミュレータとホスト型の両方に対応します。「エンジン(何で動かすか)」と「モデル(誰が判断するか)」を分けて差し替えられる構造が、このフレームワークの背骨です。
位置づけと注意:自然言語E2Eテストの現在地(pre-1.0・類似OSS)
良さそうに見える一方で、冷静に押さえるべき点があります。まず pre-1.0(1.0 への開発途上)で、README も「マイナー版の間に API や設定が変わりうる」と明記しています。本番の CI に組み込むなら、版を固定して追従する前提が要ります。次に、本記事はリポジトリと公式ドキュメント、npm の実測に基づいており(star 12.2k・npm 0.21.3・Apache-2.0・12 パッケージ・contributors は Oskar Kwaśniewski と Szymon Rybczak)、実際にアプリを操作させてキャッシュ再生まで動かす実行検証は行っていません。エージェントの挙動やキャッシュのヒット率は、対象アプリ・モデル・画面構造に左右されます。
同じ「自然言語で E2E」を掲げる OSS は他にもあり、たとえばQuickE2Eとは|E2Eテスト AIの「8.6倍速い」を同梱の生データから計算し直したで、ベンチの主張を生データから検証しています。エージェントを束ねて動かす基盤という観点ではagensh|複数エージェントを1つのハーネスで動かすも参考になります。e2e の差別化点は、record/replay によるコスト抑制、web とモバイルの両対応、そして ACP で手持ちのコーディングエージェントをそのまま実行器にできる点にあります。
導入前に確かめたいこと
- ・pre-1.0 のため、API・設定・パッケージ構成が変わりうる。版を固定し、CHANGELOG を追う。
- ・モデルは持ち込み。コストとレイテンシは対象アプリとモデル次第で、キャッシュのヒット率が効く。
- ・リダクト設計でも、どの情報がモデルへ渡るかは
actの画面スナップショットを前提に自分で確認する。
まとめ
この記事の結論
- ・e2e は TesterArmy の OSS E2E テストフレームワーク。自然言語の目標をエージェントが操作に落とし、ロケータ/自然言語の両方で検証できる。
- ・検証済みの操作はキャッシュから再生してモデル呼び出しを省き、画面が変わった時だけ引き継ぐ(自己修復)。assert/waitFor/extract は常時ライブ。
- ・web は Playwright、モバイルは実機/エミュレータ。BYO モデル。ACP で Claude Code・Codex・Cursor などを実行器にできる。
- ・Apache-2.0・star 12.2k・pre-1.0。実行検証は未実施(実測はリポジトリ・docs・npm ベース)。本番は版固定で追従を。
参照ソース
- tester-army/e2e(GitHub・README / docs / packages)(star 12.2k・Apache-2.0・12 パッケージ・2026-10-30 実測)
- npm: e2e(SDK・ランナー・CLI。最新 0.21.3・2026-10-23 公開)





