GoogleはAIエージェントによる次世代のコマース体験を実現する「Universal Commerce Protocol」を発表した。ShopifyやWalmartなど業界リーダーと連携し、エージェントと企業間の複雑な統合を簡素化するためのオープン標準を共同で策定したという。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Googleは2026年1月11日(米国時間)、ShopifyやWalmartを含む業界リーダーと協力し、次世代のAIエージェントによるコマースを支援するためのオープン標準「Universal Commerce Protocol」(UCP)を発表した。UCPは、消費者向けインタフェース、企業、決済プロバイダー間のシームレスな購買プロセスを、標準化された方法で連携させるための共通プロトコルと機能を提供する。
UCPは既存の小売インフラで動作するように設計されており、安全な決済をサポートする「Agent Payments Protocol」(AP2)との互換性も備えている。企業はAPIや「Agent2Agent」(A2A)および「Model Context Protocol」(MCP)を通じて柔軟に統合できる。
UCPの開発にはGoogleの他、Shopify、Etsy、Wayfair、Target、Walmartといった業界リーダーが参画している。Adyen、American Express、Best Buy、Flipkart、Macy's、Mastercard、Stripe、The Home Depot、Visa、Zalandoなど、20を超えるグローバルパートナーからの支持も得ているという。
UCPは、コマースエコシステム全体での連携を想定して設計されている。主な対象者別のメリットは以下の通り。
消費者がチャットbotやAIアシスタントを通じた対話型の購買体験を受け入れるにつれ、従来の購買プロセスからの脱却が求められている。つまり、商品のリサーチから最終的な決済までをチャット画面から移動させずに完結させる能力が不可欠となっている。
そのためには、AIエージェントが企業のバックエンドと直接連携し、リアルタイムの在庫状況や価格設定を即座に取得・処理できるアーキテクチャが必要となる。だが、従来の技術インフラでは、こうした移行をサポートすることが困難だった。企業はチャネルごとに複雑な接続(N対N)を強いられ、エコシステムの進化を妨げていたためだ。
UCPは単一の安全な抽象化レイヤーを通じて、発見、検討から購入、注文管理に至るまでの主要プロセスを標準化する目的で構築された。以下のような機能が用意されている。
UCPのアーキテクチャにおける最大の特徴は、通信プロトコルが抽象化されている点にある。これにより企業は、プラットフォームの要件に応じてREST API、MCP、A2Aといった異なる方式を自由に選択、あるいは併用することが可能だ。
その結果、開発者は接続先のエージェントごとにAPIを個別に実装する必要がなく、標準化された定義ファイルを配置するだけで、エージェントと連携できる疎結合なアーキテクチャが実現する。
UCPを利用するには、企業とエージェントは、サポートするサービス(ショッピングなど)を選択し、それに対応する機能を公開する必要がある。ここでいう機能とはチェックアウトや製品検索などのコアな構成要素を指し、これに割引などの拡張機能を付与することも可能だ。
チェックアウトという単一の機能に対し、Webベースの接続にはREST APIを、AIエージェント経由の接続にはMCPを割り当てるといった柔軟な設計が実現できる。UCPの動的探索機能により、エージェントはプロファイルを通じて企業が提供する機能や決済オプションを動的に発見できる。決済アーキテクチャにおいては、消費者が支払いに使用するものと決済手段を分離しており、多様な決済プロバイダーに対応できる設計を実現したという。
Googleは店舗システムとエージェントの連携においてUCPがどのように動作するかを示す手順を、Python SDK(ソフトウェア開発キット)を用いて次のように解説している。
Pythonサーバと製品データを含むSDKを使ってデモ環境を構築する。ディレクトリを作成し、GitHubからリポジトリをクローンして環境を構築する。デモ用の花屋を想定したSQLite(軽量で組み込み型のリレーショナルデータベース管理システム)ベースの製品データベースを作成し、サンプルデータを投入する。
mkdir sdk git clone https://github.com/Universal-Commerce-Protocol/python-sdk.git sdk/python pushd sdk/python uv sync popd git clone https://github.com/Universal-Commerce-Protocol/samples.git cd samples/rest/python/server uv sync
mkdir /tmp/ucp_test
uv run import_csv.py \
--products_db_path=/tmp/ucp_test/products.db \
--transactions_db_path=/tmp/ucp_test/transactions.db \
--data_dir=../test_data/flower_shop
ビジネスAPIをホストするサーバを特定のポート(例:8182)で起動する。クライアントが接続できるように、サーバをバックグラウンドで実行状態にする。
uv run server.py \ --products_db_path=/tmp/ucp_test/products.db \ --transactions_db_path=/tmp/ucp_test/transactions.db \ --port=8182 & SERVER_PID=$!
企業は、標準化されたパス(/.well-known/ucp)にJSON形式のマニフェストを配置する。これにより、エージェントはエンドポイントをハードコーディングすることなく、サービス仕様を動的に解決できる。
export SERVER_URL=http://localhost:8182 export RESPONSE=$(curl -s -X GET $SERVER_URL/.well-known/ucp) echo $RESPONSE
Response:
{
"ucp": {
"version": "2026-01-11",
"services": { "dev.ucp.shopping": { "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping", "rest": { "schema": "https://ucp.dev/services/shopping/openapi.json", "endpoint": "http://localhost:8182/" } } },
"capabilities": [
{ "name": "dev.ucp.shopping.checkout", "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping/checkout", "schema": "https://ucp.dev/schemas/shopping/checkout.json" },
{ "name": "dev.ucp.shopping.discount", "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping/discount", "schema": "https://ucp.dev/schemas/shopping/discount.json", "extends": "dev.ucp.shopping.checkout" },
{ "name": "dev.ucp.shopping.fulfillment", "version": "2026-01-11", "spec": "https://ucp.dev/specs/shopping/fulfillment", "schema": "https://ucp.dev/schemas/shopping/fulfillment.json", "extends": "dev.ucp.shopping.checkout" }
]
},
"payment": {
"handlers": [
{ "id": "shop_pay", "name": "com.shopify.shop_pay", "version": "2026-01-11", "spec": "https://shopify.dev/ucp/handlers/shop_pay", "config_schema": "https://shopify.dev/ucp/handlers/shop_pay/config.json", "instrument_schemas": [ "https://shopify.dev/ucp/handlers/shop_pay/instrument.json" ], "config": { "shop_id": "d124d01c-3386-4c58-bc58-671b705e19ff" } },
{ "id": "google_pay", "name": "google.pay", "version": "2026-01-11", "spec": "https://example.com/spec", "config_schema": "https://example.com/schema", "instrument_schemas": [ "https://ucp.dev/schemas/shopping/types/gpay_card_payment_instrument.json"
], "config": { "api_version": 2, "api_version_minor": 0, "merchant_info": { "merchant_name": "Flower Shop", "merchant_id": "TEST", "merchant_origin": "localhost" }, "allowed_payment_methods": [ { "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY", "CRYPTOGRAM_3DS" ], "allowedCardNetworks": [ "VISA", "MASTERCARD" ] }, "tokenization_specification": [ { "type": "PAYMENT_GATEWAY", "parameters": [ { "gateway": "example", "gatewayMerchantId": "exampleGatewayMerchantId" } ] } ] } ] } },
{ "id": "mock_payment_handler", "name": "dev.ucp.mock_payment", "version": "2026-01-11", "spec": "https://ucp.dev/specs/mock", "config_schema": "https://ucp.dev/schemas/mock.json", "instrument_schemas": [ "https://ucp.dev/schemas/shopping/types/card_payment_instrument.json" ], "config": { "supported_tokens": [ "success_token", "fail_token" ] } }
]
}
}
エージェントは、サンプル製品を含むチェックアウトセッションを作成するコマンドを実行する。サーバからチェックアウトIDを受け取ることで、その後のセッション更新が可能になる。
export RESPONSE=$(curl -s -X POST "$SERVER_URL/checkout-sessions" -H 'Content-Type: application/json' -H 'UCP-Agent: profile="https://agent.example/profile"' -H 'request-signature: test' -H 'idempotency-key: 0b50cc6b-19b2-42cd-afee-6a98e71eea87' -H 'request-id: 6d08ae4b-e7ea-44f4-846f-d7381919d4f2' -d '{"line_items":[{"item":{"id":"bouquet_roses","title":"Red Rose"},"quantity":1}],"buyer":{"full_name":"John Doe","email":"john.doe@example.com"},"currency":"USD","payment":{"instruments":[],"handlers":[{"id":"shop_pay","name":"com.shopify.shop_pay","version":"2026-01-11","spec":"https://shopify.dev/ucp/handlers/shop_pay","config_schema":"https://shopify.dev/ucp/handlers/shop_pay/config.json","instrument_schemas":["https://shopify.dev/ucp/handlers/shop_pay/instrument.json"],"config":{"shop_id":"d124d01c-3386-4c58-bc58-671b705e19ff"}},{"id":"google_pay","name":"google.pay","version":"2026-01-11","spec":"https://example.com/spec","config_schema":"https://example.com/schema","instrument_schemas":["https://ucp.dev/schemas/shopping/types/gpay_card_payment_instrument.json"],"config":{"api_version":2,"api_version_minor":0,"merchant_info":{"merchant_name":"Flower Shop","merchant_id":"TEST","merchant_origin":"localhost"},"allowed_payment_methods":[{"type":"CARD","parameters":{"allowedAuthMethods":["PAN_ONLY","CRYPTOGRAM_3DS"],"allowedCardNetworks":["VISA","MASTERCARD"]},"tokenization_specification":[{"type":"PAYMENT_GATEWAY","parameters":[{"gateway":"example","gatewayMerchantId":"exampleGatewayMerchantId"}]}]}]}},{"id":"mock_payment_handler","name":"dev.ucp.mock_payment","version":"2026-01-11","spec":"https://ucp.dev/specs/mock","config_schema":"https://ucp.dev/schemas/mock.json","instrument_schemas":["https://ucp.dev/schemas/shopping/types/card_payment_instrument.json"],"config":{"supported_tokens":["success_token","fail_token"]}}]}}') && echo $RESPONSE
RESPONSE:
{
"ucp": { "version": "2026-01-11", "capabilities": [ { "name": "dev.ucp.shopping.checkout", "version": "2026-01-11" } ] },
"id": "cb9c0fc5-3e81-427c-ae54-83578294daf3",
"line_items": [ {
"id": "2e86d63a-a6b8-4b4d-8f41-559f4c6991ea",
"item": { "id": "bouquet_roses", "title": "Bouquet of Red Roses", "price": 3500 },
"quantity": 1,
"totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "total", "amount": 3500 } ]
} ],
"buyer": { "full_name": "John Doe", "email": "john.doe@example.com" },
"status": "ready_for_complete",
"currency": "USD",
"totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "total", "amount": 3500 } ],
"links": [],
"payment": { "handlers": [], "instruments": [] },
"discounts": {}
}
前のステップで生成されたcheckout_idを用いることで、エージェントに対して特定のチェックアウトセッションにのみ割引を適用するよう指示を出すこともできる。
export CHECKOUT_ID=$(echo $RESPONSE | jq -r '.id') && export LINE_ITEM_1_ID=$(echo $RESPONSE | jq -r '.line_items[0].id') && export RESPONSE=$(curl -s -X PUT "$SERVER_URL/checkout-sessions/$CHECKOUT_ID" -H 'Content-Type: application/json' -H 'UCP-Agent: profile="https://agent.example/profile"' -H 'request-signature: test' -H 'idempotency-key: b9ecd4b3-0d23-4842-8535-0d55e76e2bad' -H 'request-id: 28e70993-e328-4071-91de-91644dc75221' -d "{\"id\":\"$CHECKOUT_ID\",\"line_items\":[{\"id\":\"$LINE_ITEM_1_ID\",\"item\":{\"id\":\"bouquet_roses\",\"title\":\"Red Rose\"},\"quantity\":1}],\"currency\":\"USD\",\"payment\":{\"instruments\":[],\"handlers\":[]},\"discounts\":{\"codes\":[\"10OFF\"]}}") && echo $RESPONSE | jq
RESPONSE:
{
"ucp": { "version": "2026-01-11", "capabilities": [ { "name": "dev.ucp.shopping.checkout", "version": "2026-01-11" } ] },
"id": "cb9c0fc5-3e81-427c-ae54-83578294daf3",
"line_items": [ {
"id": "2e86d63a-a6b8-4b4d-8f41-559f4c6991ea",
"item": { "id": "bouquet_roses", "title": "Bouquet of Red Roses", "price": 3500 },
"quantity": 1,
"totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "total", "amount": 3500 } ] } ],
"buyer": { "full_name": "John Doe", "email": "john.doe@example.com" },
"status": "ready_for_complete",
"currency": "USD",
"totals": [ { "type": "subtotal", "amount": 3500 }, { "type": "discount", "amount": 350 }, { "type": "total", "amount": 3150 } ],
"links": [],
"payment": { "handlers": [], "instruments": [] },
"discounts": {
"codes": [ "10OFF" ],
"applied": [ { "code": "10OFF", "title": "10% Off", "amount": 350, "automatic": false, "allocations": [ { "path": "subtotal", "amount": 350 } ] } ]
}
}
「UCPはチェックアウト機能だけでなく、ID連携や注文管理など購買体験を支える拡張性を備えており、GitHubリポジトリを参照して試すことができる」と、Googleは述べている。
なぜMCPやAIエージェントが使われると「API」が根本的に変わるのか? KongのCTOに聞く
ChatGPTに「入力してはいけない情報」5選――NGリストとその理由
Agentic AI Foundation(AAIF)発足 寄贈されたMCP、AGENTS.md、gooseはどうなるのかCopyright © ITmedia, Inc. All Rights Reserved.