カートに商品が入っている。でも、購入されない。
アクセス解析を見ると、海外からの流入がある。商品ページまでは来ている。なのに、カートで止まっている。
理由の一つは、通貨です。日本円の価格を見た海外の顧客は、自分の頭の中で換算する手間が生じます。「これ、いくらくらいだろう」と考えた瞬間に、購入の勢いが止まる。計算が面倒になってタブを閉じる。その離脱は、あなたのアクセスログには「カート離脱」としか記録されません。
Adaptive Pricing は、この問題を追加開発なしに解消する機能です。
Adaptive Pricing とは何か
Stripe が顧客の IP アドレスをもとに表示通貨を自動的に判定し、150以上の国の現地通貨に価格を変換して Checkout に表示する機能です。
顧客はフランスから来ていれば EUR で、オーストラリアから来ていれば AUD で価格を見ます。あなたが設定した日本円の価格はそのまま保持され、Stripe がリアルタイムのレートで換算します。

費用の仕組みは重要なので先に説明します。加盟店側への追加手数料はありません。顧客が現地通貨を選択した場合、顧客の支払額に 2-4% の換算手数料が上乗せされます。顧客が日本円で支払うことを選んだ場合、この手数料はかかりません。
使えないケースを先に確認する
2026年5月時点で、いくつかAdaptive Pricing が適用されないケースがあります。有効化の前に、自分の実装が該当しないか確認してください。
| 条件 | 結果 |
|---|---|
capture_method: 'manual'(auth/capture 分離) |
非対応。元の通貨で表示される |
| カスタム金額を使用している | 非対応。元の通貨で表示される |
| 手動で通貨別価格を設定済み | Adaptive Pricing より手動設定が優先される |
予約販売で auth/capture 分離を使っている場合、Adaptive Pricing との組み合わせはできません。どちらの機能が優先度が高いかを判断して設計してください。
Adaptive Pricingを試してみる
Adaptive Pricingを早速試してみましょう。
Dashboard から有効化する
Dashboard の Payment Settings を開き、「Adaptive Pricing」の項目を有効にします。

これでアカウント全体の Checkout Session や Elementなどに適用されます。
セッション単位で制御する
特定のセッションだけ有効・無効を切り替えたい場合は、Checkout Session 作成時に adaptive_pricing パラメータを指定します。Dashboard の設定よりもこの指定が優先されます。
const session = await stripe.checkout.sessions.create({
line_items: [
{
price: 'price_xxxxx',
quantity: 1,
},
],
mode: 'payment',
success_url: 'https://example.com/success',
cancel_url: 'https://example.com/cancel',
adaptive_pricing: {
enabled: true, // このセッションでは有効
},
});
テスト環境で動作確認する
テスト環境で特定の国からのアクセスをシミュレートするには、customer_email に +location_XX というサフィックスを付与します。XX は ISO 3166-1 alpha-2 の国コードです。
const session = await stripe.checkout.sessions.create({
// ...
customer_email: 'test+location_US@example.com', // フランスからのアクセスをシミュレート
});
このセッションにアクセスすると、アメリカから注文しようとしたときと同じ通貨表示でみることができます。

Webhook で2種類の「金額」をハンドルする
ここが実装で最も注意が必要な箇所です。
Adaptive Pricing が有効な状態で顧客が現地通貨で支払うと、checkout.session.completed イベントには 2種類の金額情報 が含まれます。
{
"type": "checkout.session.completed",
"data": {
"object": {
"amount_total": 5000,
"currency": "jpy",
"presentment_details": {
"presentment_amount": 3180,
"presentment_currency": "usd"
}
}
}
}
| フィールド | 内容 | 使う場面 |
|---|---|---|
amount_total / currency |
あなたが設定した通貨(JPY)での金額 | 売上集計、注文管理、返金処理 |
presentment_details.presentment_amount / presentment_details.presentment_currency |
顧客が実際に支払った通貨での金額 | 顧客向けの領収書・購入確認メール |
売上集計や在庫管理には必ず amount_total を使ってください。実際に売り上げとして入金する金額はこちらの値になります。 顧客への購入確認メールには presentment_currency と presentment_amount を使いましょう。顧客が実際に支払った金額と一致させることができます。
まとめ
Adaptive Pricing を導入するときのチェックポイントを整理します。
有効化前の確認
capture_method: 'manual'を使っていないか- 手動で通貨別価格を設定していないか
実装上の注意
- Webhook の
amount_totalとpresentment_detailsを用途によって使い分ける - 売上集計・返金処理は必ず
amount_total(設定通貨)を使う
設定は Dashboard から数クリックで完了します。制約を把握した上で有効化すれば、海外顧客の購入体験は一気に改善します。