# Shopify 用 Stripe サブスクリプション Shopify ストアで継続課金を受け付けられるように、Stripe Subscriptions アプリをインストールして設定します。 Shopify 向け Stripe Subscriptions アプリをご利用になると、貴社商品のサブスクリプションプランの作成、割引や無料トライアルの提供、Stripe 経由の継続課金の処理が可能になります。顧客は自分でサブスクリプションを管理でき、貴社では Shopify 管理者と Stripe ダッシュボードの双方からすべてのサブスクリプションを表示・管理することができます。 ## はじめる前に 以下の点をご確認ください。 - アプリに対応する任意のプランの Shopify ストア - まだ作成していない場合は、[Stripe アカウントを作成](https://dashboard.stripe.com/register)します。 - Shopify ストアでサブスクリプションとして販売する 1 点以上の商品 ### このアプリの機能 Stripe Subscriptions アプリには次の機能があります。 - 貴社商品のサブスクリプションプランを作成 (支払いサイクルは日次、週次、月次、年次が可能) - サブスクリプション利用者を獲得するための割引と無料トライアルの提供 - 顧客によるサブスクリプションの管理 - Stripe 経由の継続課金の試行、および Shopify 上のサブスクリプション対応決済プロバイダーを介した決済処理 - Shopify 管理者によるすべてのサブスクリプションの表示および管理 ## アプリをインストール 1. Shopify App Store で [Stripe Subscriptions](https://apps.shopify.com/stripe-billing) にアクセスします。 1. **アプリを追加** をクリックします。 1. アプリが要求する許可を確認し、**アプリをインストール** をクリックします。 1. このアプリにより、メインのダッシュボードにリダイレクトされます。 ## アプリの設定 初めてアプリを開いたときに、セットアップガイドを使用して、以下のステップで貴社のサブスクリプションの内容をすべて設定してください。 ### ステップ 1: Stripe アカウントを接続する サブスクリプションの支払いを受け付けられるようにするには、お客様の Stripe アカウントを接続する必要があります。 1. アプリのダッシュボードで、**Stripe アカウントを接続** というステップを見つけて、クリックして展開します。 1. アカウントを接続するメリットは以下のとおりです。 - サブスクリプションと継続課金の管理 - 顧客決済データと分析へのアクセス - Stripe パスワードは保存されません 1. (任意) 本番環境への移行前にアプリをテストするには、**テスト環境を使用** のチェックボックスをオンにします。これにより、Stripe テスト環境と接続され、実際の決済処理をせずにすべての機能を試すことができます。 1. **Stripe アカウントに接続** をクリックします。 1. Stripe 認証ページで、Stripe アカウントにログインし、**接続** または **認証** をクリックして、アプリにアクセス権を付与します。テスト環境の場合には、**このフォームをスキップ** をクリックしてアカウントの有効化を回避できます。 1. 接続または認証が完了した旨のメッセージが表示されると、ダッシュボードにリダイレクトされます。 > Shopify でテスト環境用に決済代行業者を設定していない場合には、テスト環境の Shopify Payments または対応する決済代行業者のいずれかを設定してください。Shopify の Bogus Gateway を使用したサブスクリプション決済には対応していないため、決済は失敗します。 ### ステップ 2: 最初のサブスクリプションプランを作成する サブスクリプションプランでは、顧客に対する代金の請求方法を定義します。 1. 設定ウィザードで **プランを作成** をクリックするか、メインダッシュボードで **新しい販売プランを作成** をクリックします。 1. **基本の詳細**を設定します。 - **プランの名称**: プランに名前を付けます (「サブスクリプション登録で 10% 割引」など)。この名称は顧客に表示されるほか、商品ページのウィジェットにサブスクリプションオプションのタイトルとして表示されます。 - (オプション) **社内用の説明**: 含まれる内容の説明を追加します。これは社内専用なので、顧客には表示されません。同じ顧客向け名称を持つプランが複数ある場合に、それらを区別する際に使用します。 - **商品を選択**: **商品を選択**をクリックして、このプランが適用される商品を選択します。商品全体を選択するだけでなく特定のバリエーションを選択することができます。また、名前で商品を検索したり、複数の商品を選択することができます。 - **次へ** をクリックします。 1. **プランの種類** の設定: - **従量課金** を選択します (顧客は請求サイクルごとに支払います)。 - **請求サイクル** の選択: 日次、週次、月次、年次から選択します。 - **次へ** をクリックします。 1. **割引** の設定: 割引を追加して、サブスクリプションの魅力を高めます。 - **無料トライアル**: 請求開始前に顧客にトライアル期間を提供します。トライアルの日数を設定し、トライアル終了後に割引を提供する場合は割引率を追加します。 - **割引率による割引**: 割引率を設定します。期間の設定: 1 回限り (初回注文のみ)、無期限、または特定のサイクル数から選択できます。 - **固定金額による割引**: 固定金額の割引を設定します。期間の設定: 1 回限り、無期限、または特定のサイクル数から選択できます。 - **次へ** をクリックします。 1. 設定を **確認して確定**: - すべてのプランの設定を確認して **販売プランを作成** をクリックします。 ### ステップ 3: サブスクリプションウィジェットを商品ページに追加する サブスクリプションオプションを商品ページに追加して、顧客が閲覧できるようにします。 1. セットアップウィザードで、**サブスクリプションウィジェットを追加** をクリックします。 1. Shopify テーマエディターで、商品ページのテンプレートに移動します。販売プランが作成された商品をプレビューして、そのページ上のウィジェットを確認します。 1. エディターのサイドバーで、**アプリ** または **アプリブロック** を探し、**Stripe サブスクリプション** というブロックを追加します。 1. 顧客に見てもらいたい場所にブロックを配置します (通常は **カートに追加** ボタンの近辺)。 1. **保存** をクリックして、アプリに戻ります。 サブスクリプションプランのある商品のいずれかにアクセスして、本番環境のウィジェットをご覧ください。 ### ステップ 4: 顧客によるサブスクリプション管理を有効にする 顧客が Shopify アカウントから自分のサブスクリプションを管理できるようにします。 1. セットアップウィザードで、**サブスクリプション管理を有効にする** をクリックします。 1. Shopify 決済エディターで、アプリセクションを見つけます。追加できる拡張機能は以下の 3 つです。 1. **サブスクリプション管理** の拡張機能を有効にします。また、**メニューに追加**をクリックして、顧客がサブスクリプションを管理できるようにするメニュー項目を追加します。 1. **保存** をクリックして、アプリに戻ります。 これにより、顧客は有効なサブスクリプションの表示、次回請求日の確認、支払い情報および配送先情報の更新、サブスクリプションの一時停止、再開、キャンセルを行えるようになります。 ### ステップ 5: 購入後のアカウントアクセスを設定する 決済後のサブスクリプションへのアクセス方法を明らかにします。 1. セットアップウィザードで、**サブスクリプションリンクを追加** をクリックします。 1. Shopify 決済設定で、**サンキューページ** または **注文ステータスページ**の設定を見つけます。 1. 顧客アカウントのリンクを表示するオプションを有効にします。 1. **保存** をクリックして、アプリに戻ります。 サブスクリプションの購入が完了すると、顧客に表示されるサンキューページにサブスクリプション管理用リンクが表示されます。 ### ステップ 6: 顧客への通知をカスタマイズする サブスクリプションについて顧客が受け取るメールを選択します。 1. セットアップウィザードで、**顧客への通知の編集** をクリックします。 1. Shopify の通知設定で、注文確認メール用テンプレートを確認、カスタマイズします。 1. **保存** をクリックして、アプリに戻ります。 > その他のメール通知 (決済の成功または失敗など) は Shopify 経由の継続注文に対しては送信されません。Shopify が管理する決済方法を使用するサブスクリプションについては、Shopify Flow ワークフロー経由で通知を設定するか、Stripe Webhook を使用したカスタム通知機能を使用して、決済失敗の通知を設定します。Stripe が管理する決済方法を使用するサブスクリプションについては、[Stripe ダッシュボード](https://dashboard.stripe.com)でメール通知を設定します。 決済の失敗について顧客にメールを送信する Shopify フローを作成するには、`サブスクリプション請求試行失敗`トリガーを使用します。メール送信アクションを提供するには、サードパーティの Shopify アプリケーションが必要です。実装の詳細については、アプリケーションのドキュメントを参照してください。 ## サブスクリプションを管理 アプリを開き、**サブスクリプション管理** をクリックして、有効、一時停止、キャンセルされたすべてサブスクリプションを表示します。 このページでは次のことが可能です。 - **詳細を表示**: サブスクリプションをクリックすると、顧客情報、決済ステータス、次回請求日、決済手段、金額などの詳細が表示されます。 - **一時停止または再開**: サブスクリプションの請求を一時停止します。 - **キャンセル**: サブスクリプションを終了します。 - **編集**: 項目や配送先住所など、サブスクリプションの詳細を変更します。 - **注文の作成**: 請求の試行を手動で実施します。 - **Stripe で表示**: Stripe ダッシュボードでサブスクリプションを開き、高度な管理を行います。 フィルターを使用して、サブスクリプションステータス (有効、一時停止、キャンセル) で結果を絞り込んだり、顧客名やメールアドレスで検索したり、請求日や金額で並べ替えたりすることができます。 ### 決済手段の更新 顧客は、自分のアカウントページから、または決済が失敗したときに決済手段を更新できます。 ## 決済の再試行の設定 決済の失敗は、サブスクリプションビジネスではよくあることです。このアプリは、Stripe を介した請求の自動化と各社独自の督促ポリシーに対応しています。 1. アプリで **督促の設定** に移動し、**Stripe ダッシュボードを開く** をクリックします。 1. Stripe で、**設定** > **請求** > **サブスクリプションとメール** に移動します。 1. 失敗が繰り返される場合に備えて、再試行スケジュール、顧客へのメール通知、サブスクリプションのキャンセルルールを設定します。 > Shopify の決済プラットフォームを介して決済が処理される場合には、Smart Retries (Stripe の機械学習に基づくリトライ機能) は対応していません。ただし、督促の設定に基づいて標準の再試行スケジュールを使用できます。 アプリが対応しているのは以下の点です。 - 設定可能な再試行スケジュールによるカスタムの督促ポリシー - 決済失敗後のサブスクリプションの自動一時停止またはキャンセル - Stripe に組み込まれたカスタムの[自動請求](https://docs.stripe.com/billing/automations.md) ### 失敗した決済の処理 決済が失敗すると以下の状態が発生します。 1. 督促設定に基づいて、Stripe が自動的に再試行します。 1. すべての再試行が失敗すると、サブスクリプションは設定に基づいて一時停止またはキャンセルされます。 1. [Stripe Billing Automations](https://docs.stripe.com/billing/automations.md) ではカスタムの通知とアクションを構築できます。 1. Stripe と Shopify の双方で決済失敗のイベントが作成されます。 ## サブスクリプションの一時停止の設定 1. アプリ内で **設定** に移動し、**サブスクリプションの一時停止** セクションを見つけます。 1. 次のオプションを設定します。 - **顧客が一時停止・再開できるようにする**: 顧客が自分のアカウントからサブスクリプションを一時停止できるように切り替えます。 - **サブスクリプション期間の一時停止**: あらかじめ定義されたサブスクリプション期間のオプション (1 カ月、2 カ月、3 カ月など) を顧客が選択できるように設定します。各期間と期間単位 (日、週、月、年) を設定します。 - **カスタムのサブスクリプション期間**: 顧客が自分で再開日を選択できるようにします。任意で、上限 (45 日など) を設定したり制限を設けないといった設定が可能です。 1. **保存** をクリックします。 ## データの同期 サブスクリプションが作成または更新されると、アプリが Shopify と Stripe の間でデータを同期します。 | Shopify オブジェクト | Stripe オブジェクト | | -------------- | ------------- | | サブスクリプション契約 | サブスクリプション | | 顧客 | 顧客 | | 販売計画 | 価格 | | 商品またはバリエーション | プロダクト | | 割引 | クーポン | ### 後から生成される商品と価格の作成 サブスクリプションプランを作成しても、それに対応する Stripe の商品や価格はすぐには作成されません。これらが作成されるのは、最初の顧客がそのプランを購読したタイミングです。 ### Stripe オブジェクトのメタデータ アプリは、メタデータを Stripe オブジェクトに自動的に追加して、対応する Shopify オブジェクトにリンクさせます。 **サブスクリプションメタデータ:** | キー | 入力例 | 説明 | | ---------------------------------- | ---------------------------------------- | ------------------------ | | `shopify_subscription_contract_id` | `gid://shopify/SubscriptionContract/123` | Shopify サブスクリプション契約へのリンク | | `shopify_customer_id` | `gid://shopify/Customer/456` | Shopify 顧客へのリンク | | `shopify_shop_domain` | `your-store.myshopify.com` | ショップのドメイン名 | | `shopify_revision_id` | `1` | 競合を解決するための同期の修正を追跡する | **サブスクリプション項目メタデータ:** | キー | 入力例 | 説明 | | ------------------------------- | ------------------------------------ | ---------------- | | `shopify_product_gid` | `gid://shopify/Product/789` | Shopify 商品へのリンク | | `shopify_product_variant_gid` | `gid://shopify/ProductVariant/101` | 特定のバリエーションへのリンク | | `shopify_selling_plan_gid` | `gid://shopify/SellingPlan/202` | 販売計画へのリンク | | `shopify_subscription_line_gid` | `gid://shopify/SubscriptionLine/303` | サブスクリプション項目へのリンク | **顧客のメタデータ:** | キー | 入力例 | 説明 | | --------------------- | ---------------------------- | ------------------ | | `shopify_customer_id` | `gid://shopify/Customer/456` | Shopify 顧客へのリンク | | `shopify_shop_domain` | `your-store.myshopify.com` | ショップのドメイン名 | | `stripe_merchant_id` | `acct_xxx` | 連結された Stripe アカウント | **商品のメタデータ:** | キー | 入力例 | 説明 | | --------------------- | --------------------------- | --------------- | | `shopify_product_gid` | `gid://shopify/Product/789` | Shopify 商品へのリンク | **価格のメタデータ:** | キー | 入力例 | 説明 | | ----------------------------- | ---------------------------------- | -------------------- | | `shopify_product_variant_gid` | `gid://shopify/ProductVariant/101` | Shopify バリエーションへのリンク | ### Shopify サブスクリプション契約のカスタム属性 Shopify サブスクリプション契約で定義されるすべてのカスタム属性は、サブスクリプションの作成時に、それと対応する Stripe サブスクリプションのメタデータに自動的にコピーされます。 - カスタム属性はサブスクリプション作成時にのみコピーされます - 値が `nil` のカスタム属性はフィルタで除外され、コピーされません - サブスクリプションの作成後にカスタム属性を変更しても、Stripe に自動では同期されません たとえば、Shopify サブスクリプション契約に`custom_field_1`、`custom_field_2`、`order_notes` というカスタム属性がある場合、Stripe サブスクリプションのメタデータには、標準的な Shopify メタデータに加えてこれらのキーが含まれます。 ```json { "custom_field_1": "custom_value_1", "custom_field_2": "custom_value_2", "order_notes": "Rush delivery requested", "shopify_subscription_contract_id": "gid://shopify/SubscriptionContract/123", "shopify_customer_id": "gid://shopify/Customer/456", "shopify_shop_domain": "your-store.myshopify.com", "shopify_revision_id": "1" } ``` これにより、Shopify から Stripe に対して、レポート作成、分析、導入の目的で使用される追加データを渡せます。Shopify サブスクリプション契約が最初に同期される前にカスタム属性を設定して、Stripe 上に表示されるようにします。 ### Shopify オブジェクトのメタデータ このアプリは Shopify オブジェクトにも属性を追加します。 - **サブスクリプション契約**: `stripe_subscription_id` 属性 (例: `sub_xxx`) は、対応する Stripe サブスクリプションにリンクします。 - **販売計画のメタフィールド** (名前空間: `Stripe`): `free_trial_amount` メタフィールドに無料トライアルの日数が格納されます (設定されている場合)。 ### 特別な制御属性 次の属性は、移行中の Webhook 処理を制御します。 | 属性キー | 値 | 説明 | | ------------------------------------ | ------------------ | ---------------------------------------------------------------------- | | `disable_shopify_webhook_processing` | `true` または `false` | Shopify サブスクリプション契約で `true` に設定すると、その契約の Webhook は無視されます。一括移行時に使用されます。 | ## Stripe Sigma によるサブスクリプションレポート Shopify 経由で作成されたサブスクリプションはすべて Stripe 対応のサブスクリプションです。したがって、[Stripe Sigma](https://docs.stripe.com/stripe-data/sigma.md) とダッシュボードレポートを使用してStripe オブジェクトと同期された Shopify メタデータを用いたカスタムのレポートを作成できます。 ### 使用可能な Sigma テーブル | テーブル | 説明 | キー列 | | ----------------------------- | ---------------------- | -------------------------------------------- | | `subscriptions` | すべてのサブスクリプションデータ | `id`、`status`、`customer_id`、`created` | | `subscription_items` | サブスクリプション内の項目 | `subscription_id`、`price_id`、`quantity` | | `subscription_metadata` | サブスクリプションに関連付けられたメタデータ | `subscription_id`、`key`、`value` | | `subscription_items_metadata` | サブスクリプション項目のメタデータ | `subscription_item_id`、`key`、`value` | | `customers` | 顧客情報 | `id`、`email`、`name` | | `customer_metadata` | 顧客に関連付けられたメタデータ | `customer_id`、`key`、`value` | | `products` | 商品カタログ | `id`、`name`、`description` | | `product_metadata` | 商品のメタデータ | `product_id`、`key`、`value` | | `prices` | 料金体系に関する情報 | `id`、`product_id`、`unit_amount`、`currency` | | `price_metadata` | 価格に関するメタデータ | `price_id`、`key`、`value` | | `invoices` | 請求書データ | `id`、`subscription_id`、`amount_due`、`status` | ### Shopify ショップドメイン別のサブスクリプション ```sql SELECT sm.value AS shopify_shop_domain, COUNT(s.id) AS subscription_count, SUM(CASE WHEN s.status = 'active' THEN 1 ELSE 0 END) AS active_count FROM subscriptions s JOIN subscription_metadata sm ON s.id = sm.subscription_id AND sm.key = 'shopify_shop_domain' GROUP BY sm.value ORDER BY subscription_count DESC ``` ### サブスクリプションを Shopify contracts にリンク ```sql SELECT s.id AS stripe_subscription_id, s.status, s.customer_id, c.email AS customer_email, sm_contract.value AS shopify_subscription_contract_id, sm_domain.value AS shopify_shop_domain FROM subscriptions s JOIN customers c ON s.customer_id = c.id LEFT JOIN subscription_metadata sm_contract ON s.id = sm_contract.subscription_id AND sm_contract.key = 'shopify_subscription_contract_id' LEFT JOIN subscription_metadata sm_domain ON s.id = sm_domain.subscription_id AND sm_domain.key = 'shopify_shop_domain' WHERE sm_contract.value IS NOT NULL ``` ### Shopify プロダクト ID 別の商品 ```sql SELECT p.id AS stripe_product_id, p.name AS product_name, pm.value AS shopify_product_gid FROM products p JOIN product_metadata pm ON p.id = pm.product_id AND pm.key = 'shopify_product_gid' ``` ### Shopify バリエーションの詳細を含むサブスクリプション項目 ```sql SELECT si.subscription_id, si.id AS subscription_item_id, si.quantity, p.name AS product_name, sim_product.value AS shopify_product_gid, sim_variant.value AS shopify_product_variant_gid, sim_plan.value AS shopify_selling_plan_gid FROM subscription_items si JOIN prices pr ON si.price_id = pr.id JOIN products p ON pr.product_id = p.id LEFT JOIN subscription_items_metadata sim_product ON si.id = sim_product.subscription_item_id AND sim_product.key = 'shopify_product_gid' LEFT JOIN subscription_items_metadata sim_variant ON si.id = sim_variant.subscription_item_id AND sim_variant.key = 'shopify_product_variant_gid' LEFT JOIN subscription_items_metadata sim_plan ON si.id = sim_plan.subscription_item_id AND sim_plan.key = 'shopify_selling_plan_gid' ``` ### Shopify ストア別の月間経常収益 ```sql SELECT sm.value AS shopify_shop_domain, s.currency, SUM(si.quantity * pr.unit_amount) / 100.0 AS monthly_recurring_revenue FROM subscriptions s JOIN subscription_items si ON s.id = si.subscription_id JOIN prices pr ON si.price_id = pr.id JOIN subscription_metadata sm ON s.id = sm.subscription_id AND sm.key = 'shopify_shop_domain' WHERE s.status = 'active' AND pr.recurring_interval = 'month' GROUP BY sm.value, s.currency ORDER BY monthly_recurring_revenue DESC ``` ### Shopify 顧客マッピングを使用する顧客 ```sql SELECT c.id AS stripe_customer_id, c.email, c.name, cm_shopify.value AS shopify_customer_id, cm_domain.value AS shopify_shop_domain FROM customers c LEFT JOIN customer_metadata cm_shopify ON c.id = cm_shopify.customer_id AND cm_shopify.key = 'shopify_customer_id' LEFT JOIN customer_metadata cm_domain ON c.id = cm_domain.customer_id AND cm_domain.key = 'shopify_shop_domain' WHERE cm_shopify.value IS NOT NULL ``` ### ビジネスレポートのカスタム属性 Shopify サブスクリプション契約にカスタム属性 (Stripe メタデータにコピーされる) を追加した場合は、レポート用にクエリできます。 ```sql SELECT sm_tier.value AS plan_tier, COUNT(s.id) AS subscription_count, SUM(CASE WHEN s.status = 'active' THEN 1 ELSE 0 END) AS active_subscriptions, SUM(CASE WHEN s.status = 'canceled' THEN 1 ELSE 0 END) AS canceled_subscriptions FROM subscriptions s JOIN subscription_metadata sm_tier ON s.id = sm_tier.subscription_id AND sm_tier.key = 'plan_tier' GROUP BY sm_tier.value ORDER BY subscription_count DESC ``` ### Sigma にアクセスする 1. [Stripe ダッシュボード](https://dashboard.stripe.com) にアクセスします。 1. **レポート作成** > **Sigma** に移動します。 1. クエリエディタを使用して SQL クエリを作成します。 1. 繰り返し使用できるように、クエリを保存します。 1. クエリを自動的に実行し、CSV にエクスポートするようにスケジュールを設定します。 Sigma は AI クエリアシスタントもサポートしています。必要な内容を平易な英語で述べると、SQL が生成されるようになっています。 ### ダッシュボード財務レポート Sigma に加えて、Stripe ダッシュボードの財務レポートを使用できます。財務レポートはメタデータ列に対応しています。 1. **レポート** > **財務レポート** に移動します。 1. レポートの種類 (残高、入金照合、アクティビティ) を選択します。 1. **すべての列**をクリックして、メタデータフィールドを含めます。 1. レポートをダウンロードします。 Shopify オブジェクトのメタデータは、これらのレポートに追加列として表示され、Stripe データと Shopify ストアのデータを照合することができます。 ## 重要な考慮事項 ### Stripe で直接利用できる決済手段 このアプリは、デフォルトで Shopify が管理する決済手段を使用します。サブスクリプションが移行されるか、顧客の決済手段がStripe が管理する決済手段で更新された場合、次のようになります。 - 決済が Stripe を通じて直接処理される - サブスクリプションが引き続き Shopify に表示される - Shopify で注文が *作成されない* - 支払いレコードが Shopify で *作成されない* > サブスクリプションが Stripe が管理する決済手段に移行すると、そのサブスクリプションの注文は Shopify では自動作成されなくなります。これは、Shopify で構築されたフルフィルメントロジックに影響を与える可能性があります。 ### 自動請求 このアプリは、プランの請求期間に基づく継続請求の自動化、決済処理に失敗した場合のカスタムの督促ポリシー、サブスクリプションステータスの自動更新、サイクル途中の変更に対応しています。 ### 既存のサブスクリプションを移行する サブスクリプションの移行については、サポートにお問い合わせください。専用の移行プロセスにより、顧客の決済手段を維持しながらサブスクリプションデータを移行することができます。 ### 返金する Shopify で返金を処理します。