集客・売上採用業務効率化制作実績会社概要ブログ無料相談
AI・業務効率化

Claudeの接客エージェントをShopifyで動かしてみた。1会話 約5.7円

2026年9月6日
約21分で読めます
山田 祐輔
Claudeの接客エージェントをShopifyで動かしてみた。1会話 約5.7円

Anthropicが2026年9月2日に「Claude Commerce Agents」を公開しました。ニュースの見出しには「Claudeで買い物ができる」と読めるものもありますが、実際は違います。これは消費者向けの機能ではなく、ネットショップの運営者が、自分の店のサイトに「会話で接客するAI」を置くための設計図です。しかも公開されているエージェントは、決済を実行しません。

Shopifyが公式の実装例を出しているので、実際に動かしました。結論から書くと、実在のShopifyストアに対して商品を検索し、カートに入れるところまで動きました。かかった費用は1会話で約5.7円です。ただしREADMEどおりに始めると最初の1歩で止まります。

実際に動かしたところを録画したものです(20秒・音声なし)。左が実在するお店の商品、右が接客するAI。「50ドル以下の贈り物を探して」から始めて、候補の提示、カートへの追加までを続けて行っています。最後にヘッダーのカートが1件になり、AIが「Added the Black Sunnies to your cart — subtotal is now $50.00 CAD.」と返しています。

きっかけ:見出しが実態とずれていた

「Claudeで買い物できるようになった」という話を聞いて調べ始めたのですが、一次情報を読むと中身が違いました。公開されたのは2つのエージェントのリファレンス実装です。

  • ショッピングエージェント:EC事業者が自社サイトやアプリに組み込む接客用。商品検索・比較・カート投入を会話でこなす
  • マーチャントエージェント:店舗スタッフが在庫・価格・受注などバックオフィスを回すため

ライセンスはApache 2.0で、Anthropicのソースコードとして公開されています。さらにShopifyが、自社のお店につなぐための実装例を別に出しています。今回動かしたのはこちらです。ECサイトを作る側からすると、「自分の店にClaudeの接客担当を置ける」という話であって、消費者がClaudeで買い物をする話ではありません。

最初に、作業する場所を3つに分けて整理する

  • ターミナル(Python):文字を打ち込んで操作する画面のこと。ここでAI本体を動かします
  • ターミナル(Node):もう一枚の同じ画面。こちらでお店の見た目のほうを動かします
  • つなぐ先のお店:自分の店ではなく、公開されているテスト用の店を指定します。ここが最初の関門でした

用語は3つだけ覚えれば足りる

  • UCP:AIが店の商品を検索したりカートを操作したりするための、共通の窓口。店側がこれに対応していないと何も始まりません
  • スキル:AIに読み込ませる指示書。「商品を探すとき」「接客するとき」など、場面ごとに分かれています
  • プロンプトキャッシュ:毎回同じ指示書を送り直さずに済ませる仕組み。料金に大きく効きます

手順0:必要なものを確認する

READMEはPython 3.11以上とNode 22を求めています。手元はPython 3.14.7とNode 24でしたが、どちらもそのまま通りました。Pythonの依存は自前ビルドが数個走りますが、エラーは出ませんでした。

もうひとつ必要なのがAnthropicのAPIキーです。ただし後述のとおり、キーが要るのは会話部分だけで、商品検索やカート操作はキーなしで動きます。

手順1:READMEどおりに動かすと、1歩目で止まる【ターミナル】

配布されているファイル一式には、つながるかどうかだけを確かめる簡単なテスト(スモークテストと呼びます)が付いています。しかも「AIの利用キーは要らない」と明記されています。まずこれを実行しました。

python storefront/scripts/smoke.py

結果は例外終了でした。

httpx.HTTPStatusError: Client error '404 Not Found' for url
'https://(既定のデモストア)/.well-known/ucp'

READMEが既定として指定しているデモストアが、UCPの入口を返していません。手動で叩いても404でした。302で転送される先のドメインも同じく404です。ストア側がUCPに対応していないので、エージェント以前の問題として何もできません。

ここで詰まったら、UCPを実際に返しているストアを探すのが正解です。次の1行で判定できます。

curl -s -o /dev/null -w "%{http_code}\n" https://ストアのドメイン/.well-known/ucp

手順2:動くストアはテストコードの中にあった【ターミナル】

配布ファイルの中から店のアドレスらしき文字列を数えたところ、説明書に書かれていない別のアドレスが出てきました。テスト用に保存された通信記録の中に埋まっていたものです。アクセスしてみると正常に応答し、対応バージョンとして 2026-08-25 を名乗りました。

grep -rhoE "[a-z0-9.-]+\.(myshopify\.com|mock\.shop)" --exclude-dir=node_modules . \
  | sort | uniq -c | sort -rn | head

このドメインを環境変数で指定してスモークテストを回すと、全項目が通りました。

discovery: ucp version 2026-08-25
search: 3 products, first "Women's T-shirt" 40.0 CAD
details: 10 variants, default "Women's T-shirt — Small / Green"
cart: added "Women's T-shirt - Small / Green", checkout_url present
cart: update and remove ok
policies: 0 matches
smoke ok

注目してほしいのはcheckout_url presentです。エージェントはカートを作るところまでで、決済はストア自身のチェックアウト画面に渡します。冒頭に書いた「決済を実行しない」は、この時点で実物として確認できます。

手順3:APIサーバーを起動する【ターミナル】

起動して状態を確認すると、何が動いているかが1行で分かります。

{"ok": true, "store": "…", "products": 24,
 "skills": ["customer-care", "memory-personalization", "planning-goals",
            "purchase-research", "search-discovery"],
 "model": "claude-sonnet-5"}

商品24件をあらかじめ読み込み、5つのスキルを持ち、モデルはSonnetでした。APIキーを設定していない状態でも、ここまでは動きます。起動ログに「キーが見つからない。会話で認証エラーが出るなら設定せよ」という趣旨の警告が出るだけです。

商品一覧を取り出す機能も、キーなしで24件を返しました。料金が発生するのは会話のときだけという設計です。導入を検討する段階では、キーを用意する前に「商品データがちゃんとつながるか」まで無料で試せます。

手順4:会話が401で通らない【ターミナル】

キーを設定してチャットを叩いたところ、401が返り続けました。

{"detail":"Start a session first (POST /api/session)"}

会話の枠(セッション)は作成済みで、その番号も返ってきています。それでも「先に枠を作れ」と言われ続けました。中身のコードを読んで原因が分かりました。番号の渡し方が決まっていて、X-Session-Id という専用の欄に入れないと受け付けないのです。

SID=$(curl -s -X POST localhost:8004/api/session \
      -H 'Content-Type: application/json' -d '{}' \
      | python3 -c "import json,sys;print(json.load(sys.stdin)['session_id'])")

curl -N -X POST localhost:8004/api/chat \
  -H 'Content-Type: application/json' -H "X-Session-Id: $SID" \
  -d '{"message":"Show me a varied mix of items under 50 dollars."}'

ここで自分の検証ミスにも気づきました。最初は質問のたびに新しいセッションを作っていたため、エージェントが毎回文脈を失って逆質問を繰り返していたのです。「聞き返してばかりで使えない」と早合点しかけました。同じセッションIDを使い回すのが前提です。

手順5:実際に会話させる【ターミナル】

応答は一度に返らず、少しずつ流れてきます。「50ドル以下で色々見せて」と頼んだとき、AIが内部で何を順に呼び出したかがこれです。

[tool] load_skill        {"skill_name": "search-discovery"}
[tool] search_products   {"query": "snacks",     "filters": {"max_price": 50}}
[tool] search_products   {"query": "gift items", "filters": {"max_price": 50}}
[tool] search_products   {"query": "food",       "filters": {"max_price": 50}}
[tool] search_products   {"query": "gift",       "filters": {"max_price": 50}}
[tool] search_products   {"query": "jewelry",    "filters": {"max_price": 50}}
[tool] present_products  {"title": "Varied picks under 50", "picks": [...]}
[tool] present_suggestions

1回の依頼で商品検索を5回投げています。語を変えて候補を集め、最後に選んで提示する動きです。そして返答が予想外でした。

この店のカタログにはスナックもギフト専用品もありません。フットウェアとアクセサリーの店です。実際に在庫のあるものから、50ドル以下で幅のある組み合わせを出します。

無いものを無いと言い、そのうえで代案を出しました。在庫に無い商品をそれらしく並べる動きはしません。接客として最低限ここが担保されているのは重要だと思います。

続けて「最初のものをカートに入れて」と頼むと、こう返ってきました。

Added the Slides to your cart — subtotal is now $25.00 CAD.

実在のストアの実際のカートに入り、小計が返っています。ここから先はcheckout_urlでストアの決済画面に渡すだけです。

アシスタントとの会話。商品カードを提示し、カートに追加して小計を返している
会話の全体。逆質問→商品カードの提示→カート追加まで。各商品には「most affordable pick, at $25」のように選んだ理由が添えられる。

費用は1会話で約5.7円だった

料金はトークンという単位で決まります。文章を細かく区切った数のことで、長く話すほど増えます。「検索して提案する」「カートに入れる」の2往復を1つの会話として計測しました。単価はClaude Sonnet 5の公式料金(入力 2ドル/出力 10ドル/キャッシュ読み 0.20ドル/キャッシュ書き 2.50ドル、いずれも100万トークンあたり)で計算しています。

ターン入力出力キャッシュ読時間費用
検索して提案2871,18153,59114.8秒0.03025ドル
カートに追加419125,1493.9秒0.00762ドル
合計18.7秒0.03788ドル

1ドル150円で約5.7円です。注目すべきはキャッシュ読みの5万3千トークンで、入力の大半がキャッシュから読まれています。キャッシュ単価は通常入力の10分の1なので、これが無ければこの部分だけで10倍かかる計算になります。スキルとカタログを毎回送り直さない設計が効いています。

検索を伴うターンが14.8秒かかった点は、体験として無視できません。検索を5回投げるぶん待たされます。実店舗の接客に載せるなら、待っている間の表示をどうするかは別途考える必要があります。

日本語で聞くと、動くが2倍かかる

同じことを日本語で頼んでみました。ちゃんと動きます。ただし費用と時間は英語の倍近くかかりました。

日本語で質問したときのアシスタントの応答。商品カードのタイトルと選定理由、提案チップも日本語になっている
日本語で聞いたときの画面。商品カードのタイトル「5,000円以内で選べるギフト候補」も、各商品の選定理由も、下の提案チップも日本語で出る。

興味深いのは裏側の振る舞いでした。ツールの呼び出しを見ると、こうなっています。

[tool] search_products {"query": "gift ideas", "filters": {"max_price": 35}}
[tool] search_products {"query": "jewelry",    "filters": {"max_price": 35}}
[tool] search_products {"query": "bag",        "filters": {"max_price": 35}}
[tool] search_products {"query": "hat",        "filters": {"max_price": 35}}
   …(計8回)
[tool] present_products {"title": "5,000円以下のギフト候補", ...}
  • 通貨を自分で換算しました。「5000円以下」という指定に対し、「5000円は35カナダドルほど」と判断してmax_price: 35 で検索しています。レートの出どころは示されません
  • 検索クエリは英語に翻訳して投げます。カタログが英語でも成立するのはこのためです
  • 利用者に見える文字列は日本語で返します。カードのタイトル、選定理由、提案チップまで日本語でした

一方で気になる点もありました。日本語の文章に英語が混ざります。実際の応答がこれです。

5000円は35カナダドルほどなので、その範囲でギフト向けの商品を探します。This catalog seems focused on footwear and workout apparel. Under 5,000円ほど(約35カナダドル)で、贈り物になりそうな候補をお見せします。

そのまま接客に出せる状態ではありません。実運用ではプロンプト側で言語を固定する調整が要ります。

費用と時間の差は次のとおりです。同じ「候補を出す→カートに入れる」の2ターンで比べています。

英語日本語
商品検索の回数5回8回
1ターン目の所要時間14.8秒26.4秒
出力トークン(1ターン目)1,1811,851
2ターン合計の費用0.03788ドル0.08220ドル
円換算約5.7円約12.3円

約2.2倍です。日本語は同じ内容でもトークンを多く使いますし、今回は検索回数も増えました。1件あたり数円の差ですが、月に何千件と接客するなら効いてきます。日本語で使う前提なら、想定質問で実測してから見積もるべきだと思います。

つまずき早見表

症状原因対処
スモークテストが404で落ちる既定のデモストアがUCPを返していないUCPを返すストアを探して環境変数で指定する
/api/chat が401を返すセッションIDをヘッダーで渡していないX-Session-Id ヘッダーに入れる
毎回聞き返してくるリクエストごとに新しいセッションを作っている同じセッションIDを使い回す
会話だけ認証エラーAPIキーが未設定カタログ・カートはキーなしで動く。会話のみキーが要る
応答が遅い1ターンで商品検索を複数回投げている仕様。待ち時間の見せ方を設計する
日本語の中に英語が混ざる言語が固定されていないプロンプト側で応答言語を指定する

確認方法

導入を検討するなら、順番に切り分けるのが早いです。

  • ストアがUCPを返すか(/.well-known/ucp が200か)
  • スモークテストが通るか(ここまでAPIキー不要・費用ゼロ)
  • 会話が通るか(ここから課金)
  • 応答のusageで費用を実測する(推測しない)

正直に書いておくこと

これは製品ではなく設計図です。そのまま自社サイトに載せられる完成品ではなく、実装の土台として読むものです。認証やログ、エラー時の挙動、日本語での応答品質は、自分の店に合わせて作り込む前提になります。

テスト用ストアの商品名は英語です。日本語カタログでどう振る舞うかは別途確認が要ります。日本語での会話については次の節に実測を載せました。

費用は会話の内容で変わります。今回は2ターンで5.7円でしたが、検索を何度も投げる依頼なら増えます。逆に商品を絞り込んだ質問なら減ります。「1会話いくら」で見積もるより、実際の想定質問で測ってから判断するほうが確実です。

そしてコードを書かない選択肢もあります。リポジトリのREADME自身が冒頭で、管理型の接客エージェントなら既存アプリで設定だけで用意できると案内しています。自前で組む必要があるかは、先に検討する価値があります。

自分で試したい方へ

公開デモは用意されていないので、試すには自分で動かすことになります。必要なものは次の2つです。どちらも無料で入手できます。

始めるときは、説明書どおりの店ではつながらないことだけ先に知っておいてください。この記事の手順1と手順2がそこの回避方法です。会話を試さなければ料金はかからないので、商品データがつながるところまでは無料で確認できます。

要点

  • 消費者がClaudeで買い物する機能ではなく、EC事業者が自社サイトに接客エージェントを置くための設計図。エージェントは決済を実行しない
  • READMEの既定ストアはUCPを返さず、そのまま始めると1歩目で落ちる。先に /.well-known/ucp が200かを確認する
  • 検索してカートに入れるまでで約5.7円・18.7秒。カタログとカートはAPIキーなしで動くので、無料で試せる範囲が広い
  • 日本語でも動くが費用は約2.2倍(12.3円)。通貨は自分で換算し、検索は英語に翻訳して投げる。ただし応答に英語が混ざるので言語の固定が要る
関連サービス
ECサイト構築 30万円〜(税別)。Shopify・WordPressで、ブランドの世界観と売れる購買導線を両立します。
この記事をシェア
wp-sitemap.xmlが404を返す。原因は投稿が0件になったことだった kintoneで3ヶ月かけた業務管理を、AIとNotionで2週間で作り直した話(小さな会社の始め方)
山田祐輔 山田祐輔
山田 祐輔
YUSUKE YAMADA
代表取締役 / Web制作・AI業務効率化
30社+
支援実績
4
事業歴
1000
最大月商達成
10
最速成果達成
大阪府枚方市を拠点に、中小企業・個人事業主・スタートアップの「集客」と「採用」を仕組みから支援。2022年の個人開業を経て2024年1月に法人化。ホームページ制作・EC構築・LP制作からWeb広告運用・採用支援・業務効率化まで一気通貫で対応。
ホームページ制作 LP制作 ECサイト Google広告 Meta広告 採用支援 業務効率化 Notion
お問い合わせ LINEで相談