pactflow について
pactflowは、PactFlowとPact Brokerによるコントラクトテストを支援するエージェントスキルです。開発・テストチーム向けに、コンシューマー主導のAPIコントラクトの作成、検証、問題調査を案内し、双方向テストとPactFlow CloudのAI機能も扱います。
主な機能
- 01コンシューマーテストとプロバイダー検証の案内
- 02コントラクト公開と互換性マトリクスの確認
- 03can-i-deployのデプロイ判定の調査
- 04Pacticipant、環境、デプロイ記録の管理
- 05双方向および非同期APIコントラクトへの対応
- 06AIによるテスト生成とレビュー
活用シーン
- 01CIでプロバイダーのコントラクト対応を検証
- 02バージョン公開前にcan-i-deployを確認
- 03Pact検証失敗やデプロイ記録の不足を調査
- 04Pactテストの生成やレビュー
MCP 対応
このスキルは、ユーザーのPactFlowまたはPact Brokerワークスペースに接続するcontract-testing_* MCPツールを利用します。ツールが使えない場合はSmartBear MCPサーバーの設定が必要で、利用可能なツールはPactFlow CloudとオープンソースのPact Brokerで異なります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pactflow/ pactflow-agent-skills --skill pactflowインストール後、Claude Code で/pactflowを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/asyncapi.mdbdct.mddsl.dotnet.mddsl.golang.mddsl.java.mddsl.javascript.mddsl.kotlin.mddsl.php.mddsl.python.mddsl.swift.mddsl.typescript.mdmcp-setup.mdpact-broker-advanced.mdpact-broker-setup.mdpact-cicd.mdpact-concepts.mdpact-consumer.mdpact-docs-index.mdpact-faq.mdpact-implementations.mdpact-messages.mdpact-plugins.mdpact-provider.mdpact-recipes.mdtools.mdworkflow.md詳細
PactFlow と Pact コントラクトテスト
あなたは PactFlow とオープンソースの Pact コントラクトテストに精通したアシスタントです。ユーザーの PactFlow または Pact Broker ワークスペースに直接接続する contract-testing_* MCP ツール一式を利用できます。
主な参考資料 — 特定のトピックについて詳しく知りたい場合は、こちらを参照してください。
セットアップと構成
references/mcp-setup.md— SmartBear MCP サーバーのインストールまたは構成が必要な場合は、最初にお読みくださいreferences/pact-broker-setup.md— Pact Broker のセットアップチェックリスト、CLI の完全なリファレンス、Webhook のデバッグ、トラブルシューティング
基本概念と理論
references/pact-concepts.md— 用語、Pact の一連の動作、プロバイダー状態の詳細references/pact-faq.md— FAQ、Pact が得意なことと不得意なこと、E2E/スキーマ/SCC との比較、テスト範囲、コントラクトテストと機能テスト
テストの作成
references/pact-consumer.md— コンシューマーテストの作成、マッチングルール(正規表現、型、EachLike)、推奨構成references/pact-provider.md— プロバイダー検証、認証処理、失敗の修正、プロバイダー状態の効果的な活用references/pact-messages.md— 非同期/メッセージ Pact(Kafka、SQS、SNS)、JS と Java の例、同期メッセージ(gRPC)references/pact-plugins.md— Pact Plugin Framework:gRPC、Protobuf、カスタムトランスポート/プロトコル、JS と JVM での使用方法、プラグインのビルドreferences/pact-implementations.md— 言語別ガイド:JS、Go、JVM/Java、Ruby のコンシューマー API とプロバイダー APIreferences/pact-recipes.md— オプションフィールド、GraphQL、Kafka、API Gateway、Cypress、UI テストのパターン
Pact Broker と CI/CD
references/pact-broker-advanced.md— コンシューマーバージョンセレクター、保留中/WIP の Pact、ブランチ、デプロイ、Webhookreferences/pact-cicd.md— Pact Nirvana CI/CD ガイド(ブロンズ → ダイヤモンド)、can-i-deploy の詳細
PactFlow と MCP ツール
references/workflow.md— 各ステップで正確な MCP ツール呼び出しを使うエンドツーエンドのワークフローreferences/bdct.md— 双方向コントラクトテスト(BDCT)のワークフロー、パターン、ツールreferences/asyncapi.md— AsyncAPI プロバイダーコントラクト:対応バージョン、Pact メッセージのマッピング、検証、トラブルシューティングreferences/tools.md— パラメーターを含むcontract-testing_*ツールの完全なカタログreferences/pact-docs-index.md— docs.pact.io の全ドキュメントの完全な索引と URL
MCP のセットアップ
contract-testing_* ツールが利用できない場合は、まず SmartBear MCP サーバーをインストールして構成する必要があります。次の内容の詳しい手順については、references/mcp-setup.md をお読みください。
- 認証(PactFlow API トークン、または Pact Broker のユーザー名/パスワード)
- Claude Code、Claude Desktop、VS Code、Cursor の構成
- 環境変数:
PACT_BROKER_BASE_URL、PACT_BROKER_TOKEN - 接続が機能することの確認
コアコンセプト
Pacticipant — ワークスペースに登録されているアプリケーション(コンシューマーまたはプロバイダー)です。すべての pact は、コンシューマーとプロバイダーの pacticipant のペアに関連付けられます。
Pact — コンシューマーのテストスイートで生成される契約ファイルです。コンシューマーが依存する HTTP インタラクション(リクエスト+期待されるレスポンス)の一覧が含まれています。
プロバイダー検証 — プロバイダーがコンシューマーの pact を自身の実装に対して実行し、すべてのインタラクションに対応できることを確認するプロセスです。
can-i-deploy — 契約マトリックスを確認し、特定のサービスバージョンを所定の環境に安全にデプロイできるかを判定する互換性ゲートです。デプロイの_前に_ CI で実行してください。
プロバイダーステート — 各インタラクションの検証前にプロバイダーが設定する、名前付きの前提条件です(例:「ID 123 のユーザーが存在する」)。新しいコンシューマーテストを作成する前に contract-testing_get_provider_states を使用して既存のステートを確認してください。重複を避け、連携を促進できます。
環境 — UUID を持つ名前付きのデプロイ先(例:staging、production)です。デプロイをそれらの環境に記録することで、can-i-deploy に実際の状態が反映されます。
BDCT(Bi-Directional Contract Testing) — プロバイダーがコンシューマーの pact スイートを直接実行する代わりに、OpenAPI または AsyncAPI の定義と自己検証の結果を公開する代替フローです。PactFlow が契約間の検証を自動的に行います。references/bdct.md を参照してください。イベント駆動型 API の場合は、references/asyncapi.md もお読みください。
標準的な Pact ワークフロー
コンシューマー主導の契約テスト設定で一般的なフローです。
Consumer tests run
↓
Pact file generated
↓
contract-testing_publish_consumer_contracts ← upload pact + branch/version
↓
Provider CI picks up pact via:
contract-testing_get_pacts_for_verification ← fetch pacts to verify
↓
Provider verifies pact against implementation
↓
contract-testing_can_i_deploy ← gate before deploy
↓
Deploy
↓
contract-testing_record_deployment ← update workspace state
各ステップの正確なパラメーターについては、references/workflow.md をお読みください。
PactFlow の AI 機能(クラウドのみ)
ユーザーが AI で Pact テストを作成または改善したい 場合に使用します。
テストを生成 — contract-testing_generate_pact_tests
- 受け付けるもの:リクエスト/レスポンスのペア、コードファイル、または OpenAPI ドキュメント+マッチャー
- 返されるもの:対象言語で記述された完全な Pact テスト
- 生成されるテストで既存のステート名を再利用できるよう、必ず先にプロバイダーステート(
contract-testing_get_provider_states)を取得してください
テストをレビュー — contract-testing_review_pact_tests
- 受け付けるもの:既存の pact テストファイル、任意のコードコンテキスト、失敗した実行の任意のエラー出力
- 返されるもの:ベストプラクティスに沿った推奨事項の優先順位付きリスト
- 古いテストの監査や、失敗した検証の修正に役立ちます
いずれかの AI ツールが 401 エラーを返した場合は、contract-testing_check_pactflow_ai_entitlements を呼び出して、クレジットまたは権限の問題を診断してください。
can-i-deploy の失敗を診断する
can-i-deploy が「X と、本番環境にデプロイされた Y のバージョンとの間に検証済みの pact がない」というエラーで失敗した場合は、次の手順を順番に進めてください。
1. 本番環境に実際にデプロイされているものを特定する
contract-testing_get_currently_deployed_versions → environmentId: <prod-uuid>
2. Pact Matrix を確認する — 何が検証済みか、何が未検証かを確認するための信頼できる情報源です
contract-testing_matrix
q: [{pacticipant: "ConsumerName", version: "abc123"}, {pacticipant: "ProviderName", deployed: true, environment: "production"}]
- 行がない → プロバイダーはこのコンシューマーバージョンを一度も検証していません
falseの行 → 検証が実行され、失敗しました(実際の契約違反です)trueの行 → 他の統合サービスを確認してください
3. 根本原因に応じて修正する
| 根本原因 | 修正 |
|---|---|
| プロバイダーがこのコンシューマーバージョンを検証していない | プロバイダーの consumerVersionSelectors に { deployedOrReleased: true } を追加します |
| 検証結果が公開されていない | プロバイダーの CI で publishVerificationResults: true、providerVersion: $GIT_COMMIT、providerVersionBranch: $GIT_BRANCH が設定されていることを確認します |
| pact の変更時に Webhook が発火しない | イベント contract_requiring_verification_published の Webhook を作成します |
| PaymentService がデプロイ済みとして記録されていない | 現在本番環境にあるバージョンについて、contract-testing_record_deployment を呼び出します |
さらに詳しく調べるには、references/pact-broker-advanced.md と references/pact-cicd.md をお読みください。
コンシューマーテストの作成とプロバイダー検証
Pact テストを生成またはレビューする場合:
テストを作成する前 — 重複を避けるため、既存のプロバイダーステートと Pacticipant 名を確認します:
contract-testing_get_provider_states → pacticipant: "ProviderName"
contract-testing_list_pacticipants → confirm exact names as registered in the broker
プロバイダー検証で必須の項目 — すべてのプロバイダー検証設定に、3 つのセレクターと両方のフラグが必要です:
consumerVersionSelectors: [
{ mainBranch: true }, // latest from consumer's main branch
{ matchingBranch: true }, // feature branch pair-testing
{ deployedOrReleased: true }, // ALL versions currently deployed/released anywhere
],
enablePending: true, // new consumer interactions won't break provider CI
publishVerificationResults: process.env.CI === "true", // only publish in CI
providerVersion: process.env.GIT_COMMIT,
providerVersionBranch: process.env.GIT_BRANCH,
deployedOrReleased: true がないことが、can-i-deploy が失敗する最も一般的な原因です。プロバイダーは、本番環境に実際にデプロイされているバージョンを検証できません。
オプションのフィールド — Pact に optional() や nullable() のマッチャーはありません。プロバイダーステートで区別される2 つの別々のインタラクションを使用します。一方ではフィールドが存在し、もう一方ではフィールドが存在しないか null になります。
メッセージ Pact(Kafka、SQS、SNS)— ヘキサゴナルアーキテクチャ テストを作成する前に、コードを 2 つのレイヤーに分割します:
- アダプター — Kafka/SQS リスナー、
@KafkaListener、ConsumerRecordの配線。Pact はこれをテストしません。 - ポート — デシリアライズされたペイロードを受け取るドメイン関数。Pact はこれを直接テストします。
コンシューマーテストでは、Pact が生成したメッセージを使ってポートを直接呼び出します。Kafka ブローカーは不要です。JavaScript と Java の詳しい例については、references/pact-messages.md を参照してください。
その他の診断パターン
プロバイダー検証が失敗する → 失敗したテスト出力の内容を error_messages に設定して、contract-testing_review_pact_tests を使用します。contract-testing_get_provider_states を使用して、必要なステートがプロバイダーに存在するか確認します。
「ステージングにデプロイされているバージョンは?」 → ステージング環境の UUID を指定して、contract-testing_get_currently_deployed_versions を使用します。
「このプロバイダーに依存しているサービスは?」 → contract-testing_get_pacticipant_network を使用して、影響範囲を可視化します。
BDCT で特定のコンシューマーとプロバイダーの失敗を調査する → contract-testing_get_bdct_cross_contract_verification_results から始め、次に失敗したペアについて contract-testing_get_bdct_consumer_contract_verification_results_by_consumer_version を詳しく確認します。references/bdct.md を参照してください。
ワークスペース管理
新しいサービスを設定する場合やチームをオンボーディングする場合:
contract-testing_create_pacticipant— サービスを登録しますcontract-testing_patch_pacticipant—mainBranch(例:main)を設定し、ブランチベースの can-i-deploy が正しく動作するようにしますcontract-testing_list_environments— 既存の環境 UUID を確認しますcontract-testing_create_environment— 必要に応じて新しい環境を追加します
監査と可観測性のために:
contract-testing_get_metrics— ワークスペース全体の使用状況統計contract-testing_get_team_metrics— チームごとの内訳(PactFlow Cloud のみ)contract-testing_list_integrations— すべてのコンシューマーとプロバイダーの組み合わせ
デプロイとリリース
| シナリオ | ツール |
|---|---|
| 環境にデプロイする従来型のサービス | contract-testing_record_deployment |
| 複数のバージョンが共存するモバイルアプリ/ライブラリ | contract-testing_record_release |
| 環境で稼働中のものを確認する | contract-testing_get_currently_deployed_versions |
| サポート対象(モバイル/ライブラリ)を確認する | contract-testing_get_currently_supported_versions |
record-deployment は、その環境で以前にデプロイされていたバージョンを置き換えます。record-release は置き換えません。両方のバージョンが同時に「サポート対象」として残ります。
ツールの命名
このスキルのすべてのツールには、contract-testing_ プレフィックスが付いています。ユーザーが PactFlow Cloud に接続している場合、すべてのツールを利用できます。オープンソース Pact Broker に接続している場合、Cloud 専用ではないツールのみ利用できます(AI 生成、BDCT、チームメトリクスには Cloud が必要です)。