cypress-tap について
起動済みの Cypress open セッションをコマンドラインから操作するスキルです。GUI を使わずにテストを反復・デバッグする開発者向けで、spec の実行、結果やコマンドログの確認、アプリ状態の読み取りに対応します。単発のヘッドレス実行には cypress run を使います。
主な機能
- 01稼働中の Cypress セッションを操作
- 02spec を非同期で実行
- 03レポーター結果とテスト試行を確認
- 04コマンドログとネットワーク情報を調査
- 05DOM、アクセシビリティ、アプリのスナップショットを確認
活用シーン
- 01対話的な開発中に spec を再実行
- 02新しいテスト結果と失敗の詳細を確認
- 03テストに伴うネットワーク動作を調査
- 04GUI なしでアプリ状態を読み取る
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cypress-io/ ai-toolkit --skill cypress-tapインストール後、Claude Code で/cypress-tapを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/json-recipes.mdreading-results.mdreading-the-app.mdrecipes.mdsession-lifecycle.mdtroubleshooting.md詳細
cypress tap による Cypress の操作
cypress tap は、すでに実行中の cypress open セッションを操作します。これを使って、GUI を操作せずに spec を繰り返し実行し、レポーターとコマンドログを調べ、テスト対象のアプリを読み取れます。1 回限りのヘッドレスバッチには、代わりに cypress run を使ってください。
基本的なループ
npx cypress tap sessions # confirm a session; note pid if several exist
npx cypress tap status # baseline startedAt + spec
npx cypress tap run cypress/e2e/foo.cy.ts # async — returns immediately
# poll status until passed|failed for your spec with a changed startedAt
npx cypress tap reporter
npx cypress tap reporter --test-id r3 # one test: log, network, stubs, error
run は非同期です。古い判定結果と新しい判定結果は、startedAt 以外のすべてのフィールドが一致する場合があります。また、選択中の spec に対するウォッチャーの再実行によって、対象のファイルを実行せずに startedAt が更新されることがあります。startedAt、spec、および終了状態を条件にしてください。running の状態を確認するまで待たないでください。短時間で終わる spec は、ポーリングの合間に完了する場合があります。コピーして貼り付けられるポーラーについては、session-lifecycle.md を参照してください。JSON フィールドのヘルパーについては、json-recipes.md を参照してください。
ポーリングループでは、プロジェクトで Cypress のバージョンが固定されている場合、npx cypress tap … より ./node_modules/.bin/cypress tap … を優先してください。
前提条件
- パッケージメタデータまたはロックファイルで、解決された Cypress が 15.21.0 以降であり、
tapを含んでいることを確認してください。古いバージョンかどうかわからない場合は、確認のためにtap --helpを使わないでください。バージョンの下限を下回るプレリリースでは、ヘルプを表示する代わりにセッションの検出を試みることがあります。 - セッションでは Electron、Chrome、Chromium、または Edge を使う必要があります。Firefox と WebKit はサポートされていません。
cypress openと、設定されている場合はbaseUrlの開発サーバーが、すでに実行中である必要があります。- cwd によって、Cypress バイナリと自動選択されるセッションの両方が決まります。対象のプロジェクトで古い Cypress のバージョンが固定されている場合は、互換性のあるチェックアウトから
tapを実行し、毎回--session <pid>を渡してください。
タスクに応じた参照先
- セッションの開始、選択、またはポーリング: session-lifecycle.md を参照してください。
- spec の実行または結果の確認: session-lifecycle.md と reading-results.md を参照してください。
- spec の作成または確認: recipes.md と reading-the-app.md を参照してください。
- 失敗の診断: recipes.md、reading-results.md、および reading-the-app.md を参照してください。
- コマンドの失敗、ハング、誤ったプロジェクト、または予期しない出力: troubleshooting.md を参照してください。
--jsonの解析またはポーリングのスクリプト化: json-recipes.md を参照してください。- 対話なしの単発バッチ:
tapではなくcypress runを使ってください。
現在のタスクに必要なリファレンスだけを読んでください。
基本コマンド
sessions:アクセス可能なセッション、プロジェクトルート、テストタイプ、ブラウザーを表示します。JSON ではサポート状況とレンダラーの健全性も追加されます。status:ライフサイクルの段階、選択中の spec、実行 ID、件数、ビルドエラー、アクティブなピンを表示します。specs:セッションのテストタイプで実行可能な、プロジェクト相対の spec パスを表示します。run <spec>:spec の実行を開始し、すぐに戻ります。reporter:spec の概要とテスト ID を表示します。--test-idを指定すると、該当するテスト実行の詳細を表示します。command:ネットワークデータ、スナップショット、コンソールのプロパティを含む、コマンドログの 1 行を表示します。pin:コマンドのスナップショットにアプリのフレームを巻き戻します。dom、aria、inspect:安定した状態のアプリ、または現在ピン留めされているスナップショットを読み取ります。
すべてのコマンドで --session <pid>、--json、および --timeout <ms> を指定できます。対応が確認されたビルドでは、コマンド固有のフラグを確認するために npx cypress tap <command> --help を使ってください。ヘルプは実行中のセッションの仕様から生成されます。このスキルの内容とヘルプが異なる場合は、ヘルプに従ってください。
絶対に守る判定ルール
run はディスパッチを確認するものであり、実行を確認するものではありません。また、新しい実行が始まる前に返ります。この間、
status とアプリの読み取りでは、前回の実行のもっともらしい判定やページが返されることがあります。
明示的に実行する場合は、必ず次の手順に従ってください。
- 現在の
startedAtを読み取ります。 - spec を1つだけディスパッチします。
status --jsonの応答を一度に1つずつポーリングします。- 期待する
specに対するpassedまたはfailedのみを受け入れます。また、startedAtが空でなく、かつ変更されている必要があります。startedAtが null になるのは、そのセッションでその spec の実行が一度も開始されていない場合のみです。つまり、初回選択時のビルド失敗です。再実行時やウォッチャーによる再ビルド時にビルドが失敗した場合も、startedAtは更新されるため、通常の手順に従います。null のフォールバック(観測可能なベースラインの変化、または直前に観測されたloading/running)は、初回選択時に限って使用します。 - ループに上限を設け、一致する新しい判定が得られなければ失敗とします。
アクティブな spec を保存すると、ウォッチャーが自動実行を開始します。編集後は、その実行を利用するか、ベースラインを取得して別の実行をディスパッチする前に完了するまで待ってください。意図的に2つの実行を同時に進行させてはいけません。
status 呼び出しが成功しても、一時的に空または部分的なペイロードが返されることがあります。フィールドが欠けている場合は、状態が変化したと見なさず、「待機を続ける」として扱ってください。status の終了コードが0以外の場合は、部分的な読み取りではなくコマンドの失敗です。ポーリングを停止して、その失敗を報告してください。
判定は passed と failed のみです。ビルド失敗は failed となり、テストがまだ存在しない場合でも、診断情報は status.error に含まれます。この診断情報を持つのは status だけです。reporter では、ビルド失敗は空の spec として表示されます。
正確性に関する重要なルール
- 意図したセッションを対象にします。 複数のセッションがある場合、または自動選択が不自然な動作をする場合は、
sessionsを確認し、すべての呼び出しで--session <pid>を指定してください。自動選択では、別のプロジェクトや応答しないセッションが選ばれることがあります。E2e テストとコンポーネントテストでは別々のセッションを使用します。projectRootを共有していても、公開されるspecsの一覧は異なる場合があり、どのセッションが応答したかを示すのはstatusだけです。他のコマンドの出力には pid が含まれません。 - バイナリの場所を維持します。 Cwd は、呼び出しごとの
npxの解決先を制御します。プロジェクトが古いバージョンの Cypress に固定されている場合は、互換性のあるチェックアウトからコマンドを実行し、--session <pid>を指定してください。 - 失敗したコマンドを解析しないでください。 JSON を解析する前に終了コードを確認してください。サポート対象ビルドでの失敗は通常 stderr を使用しますが、古いバージョンとの互換性に関する失敗では stdout が使われる場合があります。曖昧なセレクターは意図された例外で、終了コード
1で終了し、stdout に一致項目を一覧表示します。 - 互換性の確認時に、ディスパッチの stdout を破棄しないでください。 古いバージョンの Cypress では、
Unknown command "tap"と使い方の説明が stdout に出力されることがあります。リダイレクトすると原因が見えなくなります。 - 大きくなる可能性のある JSON はリダイレクトしてください。
reporter --test-id --jsonとcommand --jsonの出力は数百キロバイトになることがあります。ファイルに保存してから解析してください。 - 不在と判断する前に、出力が切り詰められていないか確認してください。
domとariaの出力には上限があります。(output truncated)が表示された場合は、セレクターを絞り込むか上限を引き上げてください。 - 不在と判断する前に、ライブフレームの状態を確認してください。 最後に保留中またはスキップされたテストがあると、アプリの読み取りが終了コード
0を返していても、実行が落ち着いた後のランナーが空のプレースホルダー上に残ることがあります。アプリ内の既知のアンカーを確認してください。フレームが空の場合は、最後の実際のコマンドのスナップショットをピン留めし、その状態を読み取ってください。 - spec を編集または削除する前に結果を読み取ってください。 結果とスナップショットは Cypress アプリのメモリ内にあり、再実行、再起動、名前の変更、削除によって失われることがあります。
- ピン留めを解除してください。 コマンドのスナップショットを確認した後は、
pin --clearを実行してください。解除しないと、その後のアプリの読み取りも引き続き過去にピン留めした状態を示します。終了コードが0でcleared:falseの結果は、人間向けの出力にFAILED TO CLEAR PINと表示されていても、問題のない処理なしの結果です。 - ライブ状態には適切な読み取りコマンドを使用してください。 現在のフォームコントロールの値には
ariaを使用してください。domとinspectには初期 HTML のvalue属性が表示されることがあり、inspectではアクセシビリティの値が省略される場合があります。ライブリージョン、トースト、ステータス、ラベルの正確なテキストにはdomを使用してください。ariaでは子孫要素のテキストが省略されることがあります。 - 広範なセレクターのプローブは
&&ではなく;で連結してください。dom/aria/inspectでは、一致件数が 0 の場合は終了コード0、曖昧な場合は終了コード1で終了します。一致項目を列挙する広範なプローブは有用な結果です。&&を使うと、最初のセレクターが曖昧だった場合、その後のコマンドがすべて実行されません。 - 合格判定だけでは、完全な検証にはなりません。 合格後、
reporter --test-idの結果を読み取り、インターセプトの一致数、スタブの使用状況、そして確認したいリクエストがスタブ化されていることを確認してください。reading-results.md と json-recipes.md を参照してください。
出力契約
- 人間向けの出力は読みやすさを重視します。
--jsonは解析用で、より多くのデータを含む場合があります。単発のデバッグでは、通常はデフォルトのレンダリングのほうが適しています。コードフレームがインラインで表示され、ネットワークイベントがログ順に挿入されます。 - 終了コード
0は、目的が達成されたことを意味しません。tapは Cypress を起動しません。セッションがない場合、終了コード0でもstatusはnot connectedとなり、sessionsは JSON ではなくガイダンスを表示します。セレクターが見つからない場合、specsが空の場合、未知の--sessionpid の場合も、終了コード0で終わることがあります。無出力ではなく、フィールドに基づいて分岐してください。 statusは、not connectedを含む既知のライフサイクル段階では終了コード0で終わります。検出、互換性、未サポートのブラウザー、レンダラーの各エラーは終了コード1で終わり、標準出力がないこともあります。ポーラーでは、この非ゼロ終了コードを受けたら即座に失敗させてください。dom、aria、inspectでは、選択された要素がちょうど1つ必要です。候補セレクターを示して、曖昧さがあると終了コード1で終わります。見つからなくても CLI の失敗ではありません。domとinspectはfound:falseを返します。ariaは、見つからない場合も、アクセシビリティノードを持たない要素の場合も、空のツリーを返します。- エラーは安定したエラーコードを持たない文章です。メッセージのテキストではなく、終了ステータスに基づいて分岐してください。
パフォーマンスのデフォルト設定
- 行ごとに
commandを呼び出すより、reporter --test-idで一度に読み取る方法を優先してください。 - 最新の判定を取得し、ライブフレームの整合性を確認した後は、互いに独立したアプリの読み取りを並行して実行できます。
- 制限付きのステータスのポーリングに失敗した場合は、
sessionsでrendererResponsive: falseを確認してください。--timeoutを延長するのではなく、応答しなくなったレンダラーを再起動してください。
症状別の参照先
| 症状 | 参照先 |
|---|---|
| ポーリングが停止する、または判定が自分のものか不明 | session-lifecycle.md |
| ファイルを編集したが、何が再実行されたか不明 | session-lifecycle.md(ファイルウォッチャー) |
| JSON キーが空、または推測が間違っていた | json-recipes.md |
列/e 行/テスト ID の意味 | reading-results.md |
テスト数が想定される it の数と異なる | reading-results.md、recipes.md(コンポーネント) |
| 失敗のトリアージ、またはピンの位置が違うように見える | recipes.md、reading-the-app.md |
出力は問題なさそうなのに終了コードが 1 | troubleshooting.md |