メインコンテンツへスキップ
コードをリリースする前に変更内容の自動テストを実行することは、最も重要な作業の一つです。単体テストやリンターは構文レベルの問題をキャッチしますが、ログインフローが実際に動作するか、リファクタリング後にCLIが正しくレンダリングされるか、新しいAPIエンドポイントが正しいデータを返すかを判断することはできません。QAスキルはそのギャップを埋めます。実際のユーザーと同じようにアプリケーションをテストし、視覚的な証拠を含む構造化されたレポートを生成します。 Factoryには連携して動作する2つの組み込みスキルが含まれています:
  • /install-qa — コードベースを分析し、的確な質問を行い、プロジェクトに合わせた完全なQAスキルを生成する一回限りのセットアップスキル。
  • /qa — すべてのPRで実行される生成されたスキル。git diffを読み取り、影響を受けるアプリを特定し、関連するテストフローのみを実行します。
install-qaプロセスは徹底的でインタラクティブです。深いコードベース分析を実行し、多段階のアンケートを実施し、複数のファイルを生成します。時間がかかり、質問がプロンプトされることを想定してください。品質保証は基盤となるものであり、正しく実行するために時間をかけています。

クイックスタート

そのスキルは3つの段階を経て動作します:
  1. 詳細なコードベース分析 — アプリケーション、技術スタック、認証、環境、機能フラグ、インテグレーション、CI/CD、既存のテストを検出します。
  2. 対話的質問票 — 自動検出できなかった項目(QAターゲット、ユーザーペルソナ、重要なフロー、クリーンアップ戦略)について質問します。
  3. スキル生成 — オーケストレーター、アプリごとのサブスキル、設定、レポートテンプレート、およびオプションでGitHub Actionsワークフローを生成します。
セットアップ後、/qaでいつでもQAを呼び出すか、生成されたワークフローを通じてPR上で自動実行させることができます。

生成されるもの

config.yamlは、コードベース解析とアンケートの回答に基づいて/install-qaによって自動生成されます。生成後は、他のチェックイン済みファイルと同様に編集できます。例:

QAの実行方法

  1. 設定の読み込み — 環境、ペルソナ、アプリ定義について config.yaml を読み取ります。
  2. 差分の解析path_patterns を使用して変更されたファイルをアプリにマッピングします。
  3. テスト実行範囲の決定 — 影響を受けたアプリのサブスキルのみを実行します。CLI のみの変更では、Webテストを完全にスキップします。
  4. テストフローの実行 — 関連するフローを実行し、特定の差分に基づいてターゲット化されたテストを生成します。
  5. 証跡の取得 — スクリーンショット(Web)、ターミナルスナップショット(CLI)、またはAPIレスポンスデータを取得します。
  6. レポートの生成 — 合格/不合格/ブロックの結果を含む構造化されたレポートを生成し、PRコメントとして投稿します。

テストツール

Webアプリ: agent-browser

実際のブラウザを操作します — ページを移動し、フォームを入力し、ボタンをクリックし、アクセシビリティツリーのスナップショットとスクリーンショットを取得します。
ImageMagickがインストールされている場合、QAは視覚的回帰テストのためにUI状態のビフォー・アフターを示すアニメーションGIFの差分も生成できます。

CLI/TUIアプリ: tuistory

アプリを仮想ターミナルで起動し、キー入力を送信して、ターミナル状態をテキストスナップショットやPNGスクリーンショットとしてキャプチャします。

APIテスト

UIのないバックエンドサービスでは、QAは標準的なcurlコマンドを使用してエンドポイントをテストし、レスポンスを検証します。

CI連携

プロジェクトに.github/ディレクトリがある場合、install-qaは以下の機能を持つGitHub Actionsワークフローの生成を提供します:
  • プルリクエストでトリガー(Vercel/Netlifyを使用している場合はプレビューデプロイ後にも)
  • ツール(tuistory、ImageMagick)をインストールし、QAスキルでdroid execを実行
  • エビデンスをビルドアーティファクトとしてアップロードし、QAレポートをPRコメントとして投稿
  • 必須またはオプションのチェックとして設定可能
生成されたワークフローには、config.yamlで参照される認証情報のGitHubシークレットが必要です。install-qaスキルは、追加すべきシークレットを正確にリストアップします。

失敗学習

QAが新しい失敗パターンに遭遇した場合、その知識をフィードバックできます:

実世界の例

CLIアプリ(Go TUI) — glow

ターミナルmarkdownレンダラーのヘルプテキストとフラグ説明を更新するPR。QAはGoバイナリをビルドし、tuistoryでテストしました: エビデンスにはインラインターミナルスナップショットが含まれました:

フルスタックウェブアプリ(FastAPI + React)— full-stack-fastapi-template

「Remember me」チェックボックスとフッターのバージョンバッジを追加するPR。QAはCI内でPostgreSQL、Mailcatcher、FastAPIバックエンド、Reactフロントエンドを起動し、agent-browserでUIを操作しました: 以下はQA実行中にagent-browserが実際にキャプチャしたスクリーンショットです:
Remember Meチェックボックス付きログインページ

agent-browserでキャプチャした、新しい「Remember me for 30 days」チェックボックス付きログインページ

v2.0フッター付きログイン後のダッシュボード

ログイン成功後のダッシュボード、v2.0フッターバッジ表示

ヒント

  • 質問票では詳細に記述してください。 生成されるQAスキルの品質は、提供する詳細の量に正比例します。ユーザーロール、重要なフロー、認証メカニズム、エッジケースを徹底的に説明してください。install-qaに多くのコンテキストを与えるほど、生成されるテストフローはより的確になります。
  • 成功基準を明確に記述してください。 単に「ログインが動作する」と言うのではなく、「ユーザーがメールアドレスとパスワードを入力し、Sign Inをクリックし、/dashboardにリダイレクトされ、ウェルカムメッセージが表示される」と言います。具体性により、正しいことを検証するテストフローが生成されます。
  • 既知の癖について言及してください。 ログインフォームが特定のロケールで異なって表示される場合、チェックアウトに15秒かかる場合、開発サーバーが特定の起動コマンドを必要とする場合など、それらを伝えてください。これらは誤った失敗を防ぐ既知の失敗モードとなります。
  • 最初の実行後に反復してください。 レポートを確認し、合格したもの、ブロックされたもの、見逃されたものに基づいてサブスキルフローを改善してください。