コードをリリースする前に変更内容の自動テストを実行することは、最も重要な作業の一つです。単体テストやリンターは構文レベルの問題をキャッチしますが、ログインフローが実際に動作するか、リファクタリング後にCLIが正しくレンダリングされるか、新しいAPIエンドポイントが正しいデータを返すかを判断することはできません。QAスキルはそのギャップを埋めます。実際のユーザーと同じようにアプリケーションをテストし、視覚的な証拠を含む構造化されたレポートを生成します。 Factoryには連携して動作する2つの組み込みスキルが含まれています:Documentation Index
Fetch the complete documentation index at: https://factory-docs-auto-sync-jp-docs.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
/install-qa— コードベースを分析し、的確な質問を行い、プロジェクトに合わせた完全なQAスキルを生成する一回限りのセットアップスキル。/qa— すべてのPRで実行される生成されたスキル。git diffを読み取り、影響を受けるアプリを特定し、関連するテストフローのみを実行します。
install-qaプロセスは徹底的でインタラクティブです。深いコードベース分析を実行し、多段階のアンケートを実施し、複数のファイルを生成します。時間がかかり、質問がプロンプトされることを想定してください。品質保証は基盤となるものであり、正しく実行するために時間をかけています。
クイックスタート
- 詳細なコードベース分析 — アプリケーション、技術スタック、認証、環境、機能フラグ、インテグレーション、CI/CD、既存のテストを検出します。
- 対話的質問票 — 自動検出できなかった項目(QAターゲット、ユーザーペルソナ、重要なフロー、クリーンアップ戦略)について質問します。
- スキル生成 — オーケストレーター、アプリごとのサブスキル、設定、レポートテンプレート、およびオプションでGitHub Actionsワークフローを生成します。
/qaでいつでもQAを呼び出すか、生成されたワークフローを通じてPR上で自動実行させることができます。
生成されるもの
config.yamlは、コードベース解析とアンケートの回答に基づいて/install-qaによって自動生成されます。生成後は、他のチェックイン済みファイルと同様に編集できます。例:
QAの実行方法
- 設定の読み込み — 環境、ペルソナ、アプリ定義について
config.yamlを読み取ります。 - 差分の解析 —
path_patternsを使用して変更されたファイルをアプリにマッピングします。 - テスト実行範囲の決定 — 影響を受けたアプリのサブスキルのみを実行します。CLI のみの変更では、Webテストを完全にスキップします。
- テストフローの実行 — 関連するフローを実行し、特定の差分に基づいてターゲット化されたテストを生成します。
- 証跡の取得 — スクリーンショット(Web)、ターミナルスナップショット(CLI)、またはAPIレスポンスデータを取得します。
- レポートの生成 — 合格/不合格/ブロックの結果を含む構造化されたレポートを生成し、PRコメントとして投稿します。
テストツール
Webアプリ: agent-browser
実際のブラウザを操作します — ページを移動し、フォームを入力し、ボタンをクリックし、アクセシビリティツリーのスナップショットとスクリーンショットを取得します。CLI/TUIアプリ: tuistory
アプリを仮想ターミナルで起動し、キー入力を送信して、ターミナル状態をテキストスナップショットやPNGスクリーンショットとしてキャプチャします。APIテスト
UIのないバックエンドサービスでは、QAは標準的なcurlコマンドを使用してエンドポイントをテストし、レスポンスを検証します。
CI連携
プロジェクトに.github/ディレクトリがある場合、install-qaは以下の機能を持つGitHub Actionsワークフローの生成を提供します:
- プルリクエストでトリガー(Vercel/Netlifyを使用している場合はプレビューデプロイ後にも)
- ツール(tuistory、ImageMagick)をインストールし、QAスキルで
droid execを実行 - エビデンスをビルドアーティファクトとしてアップロードし、QAレポートをPRコメントとして投稿
- 必須またはオプションのチェックとして設定可能
失敗学習
QAが新しい失敗パターンに遭遇した場合、その知識をフィードバックできます:| 戦略 | 動作 |
|---|---|
| レポートで提案(デフォルト) | 手動レビュー用のコピー&ペーストスニペットをレポートに含めます。 |
| 自動コミット | 各実行後にサブスキルファイルへの更新を自動的にコミットします。 |
| PRを開く | 失敗カタログの更新を含むドラフトPRを開きます。 |
実世界の例
CLIアプリ(Go TUI) — glow
ターミナルmarkdownレンダラーのヘルプテキストとフラグ説明を更新するPR。QAはGoバイナリをビルドし、tuistoryでテストしました:| # | テストケース | 結果 | 備考 |
|---|---|---|---|
| 1 | ヘルプテキストが更新された説明を表示 | :white_check_mark: PASS | --helpに新しいテキストが含まれる |
| 2 | 行番号フラグの説明が更新 | :white_check_mark: PASS | 「TUIモードのみ」ではなく「レンダリング出力」と表示 |
| 3 | CLIがmarkdownを正しくレンダリング | :white_check_mark: PASS | ヘッダー、リスト、コードブロックがレンダリング |
| 4 | 幅フラグが指定された列で折り返し | :white_check_mark: PASS | -w 40が正しく折り返し |
| 5 | 標準入力パイプレンダリング | :white_check_mark: PASS | パイプされたmarkdownがレンダリング |
| 6 | 存在しないファイルでのエラー | :white_check_mark: PASS | 明確なメッセージで終了コード1 |
| 7 | TUIブラウザ起動 | :no_entry: BLOCKED | CI PTY環境が不整合 |
フルスタックウェブアプリ(FastAPI + React)— full-stack-fastapi-template
「Remember me」チェックボックスとフッターのバージョンバッジを追加するPR。QAはCI内でPostgreSQL、Mailcatcher、FastAPIバックエンド、Reactフロントエンドを起動し、agent-browserでUIを操作しました:| # | テストケース | 結果 | 備考 |
|---|---|---|---|
| 1 | ログインページにRemember Meチェックボックスが表示される | :white_check_mark: PASS | フォームにEmail、Password、チェックボックス、Log Inボタンあり |
| 2 | Remember Meをチェックしてログイン | :white_check_mark: PASS | ダッシュボードにリダイレクト |
| 3 | Remember Meなしでログイン | :white_check_mark: PASS | チェックしなくても正常動作 |
| 4 | 無効な認証情報(ネガティブテスト) | :white_check_mark: PASS | トーストエラー、ログインページに留まる |
| 5 | フッターにv2.0が表示される | :white_check_mark: PASS | 全ページでバージョンバッジが表示 |


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