For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/ja/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/ja/llms-full.txt, and this page is available as Markdown at https://docs.dataplatform.ovh.net/ja/connectors-sources-shopify.md.
  • 🇯🇵 日本語
  • ShopifyストアのデータをGraphQL Admin APIで抽出する

    Shopifyコネクタは、GraphQL Admin APIを介してShopifyストアからデータを抽出します: 商品、顧客、注文、在庫、マーケティング、B2B、決済

    目的

    The Shopify connector extracts data from your Shopify store via the GraphQL Admin API: products, customers, orders, inventory, marketing, B2B, payments, content, and more.

    40種類の組み込みエンドポイント + カスタムクエリのエスケープハッチで任意のGraphQLを実行します。

    このコネクタは、Shopify API から 生のJSON を返します。プラットフォームは、入れ子になったフィールドを自動的に列に平坦化し、その結果をレイクハウスに保存します。手動でのスキーマ定義は必要ありません。

    1. 管理APIアクセストークンを取得する

    あなたが自分のカスタムアプリをストアにインストールします。その後、コネクタはそのアプリの資格情報を使用してデータを読み取ります。それ以外のことは行いません。

    2つの方法で認証情報を取得できます。どちらもサポートされています:

    1. OVHcloud Control Centerから直接取得する方法です。
    2. OVHcloud APIを使用して取得する方法です。

    どちらの方法を選択しても、認証情報を取得することができます。

    1. partners.shopify.com にアクセスし、サインインします(無料でクレジットカードは不要です)。
    2. Dev Dashboard を開き、Create app をクリックし、名前を付けます(例: data-connector)。
    3. 新しいアプリで、VersionsCreate a new version に移動します。
    4. AccessAccess scopes の下に、以下の推奨スコープリストを貼り付けます。
    5. Access セクションの上部にある Request access を開き、Customer data(および Order data など)→ Data analytics を有効にし、保存します。 開発ストアではこの承認が即時行われます。
    6. バージョンをPublishします。
    7. Distribution セクションからアプリをストアにインストールします。
    8. アプリのSettings を開き、Client IDClient Secret をコピーします。
    9. コネクタのUIでShopを入力し、Access Tokenを空白のままにし、Client ID + Client Secretを貼り付けます。コネクタは最初の実行時にそれらをオフライントークンと交換します。

    パスB: 既存のトークン(既にトークンをお持ちの場合は短縮可能)

    既に、レガシーの「アプリ開発」フロー(トークンはshpat_で始まります)を通じてAdmin APIアクセストークンを取得しているか、OAuth client_credentials交換を自分で実行した場合(shpua_)は、アクセストークンフィールドに直接貼り付けてください。クライアントID / クライアントシークレットは空白のままにしてください。

    2. 資格情報の設定

    コネクタは、2つの相互に交換可能な認証モードを受け入れます。

    FieldMode A (direct token)Mode B (OAuth exchange)
    Shopmy-store または my-store.myshopify.com同じです
    Access Tokenshpat_xxx… または shpua_xxx…空です
    Client ID空ですDev Dashboard からの hex 文字列
    Client Secret空ですshpss_ で始まります

    どちらも入力されている場合、直接トークンが優先されます。

    このコンマ区切りリストを、カスタムアプリのバージョンのアクセススコープフィールドに貼り付けてください(Dev Dashboard → アクセス → アクセススコープ)。

    read_products, read_customers, read_orders, read_draft_orders,
    read_inventory, read_locations, read_discounts,
    read_shopify_payments_payouts, read_shopify_payments_disputes,
    read_shopify_payments_accounts, read_marketing_events,
    read_content, read_users, read_shipping, read_metaobjects,
    read_metaobject_definitions, read_publications, read_locales,
    read_markets, read_files, read_companies, read_assigned_fulfillment_orders,
    read_audit_events

    スコープ名が拒否された場合は、そのスコープを削除してください。ShopifyはAPIバージョン間でスコープ名を変更しますが、コネクタは欠落したスコープを優しく処理します(警告を伴う[]を返す代わりにクラッシュしません)。

    Customer / Order / Draft Order / Abandoned Checkout データの場合、Protected Customer Data の承認を有効にする必要があります(Path A、ステップ 5を参照)。これを行わない場合、これらのエンドポイントは行を返しますが、PII フィールドは空白になります。

    4. Data PlatformにShopifyソースを追加する

    1. Data Platform の Connectors で、ソースストアから Shopify を探し、Select をクリックします。
    2. 手順 2に記載されている Mode A(直接トークン)または Mode B(クライアント ID + クライアント シークレット)のいずれかを使用して、接続フィールドを入力します。
    3. Connect をクリックします。Mode B の場合、このステップでコネクタがクライアント ID/シークレットをオフライン アクセス トークンと交換します。
    4. Add an Endpoint をクリックし、ドロップダウンからエンドポイントの種類を選択します(例: products, orders, custom_query)。その後、必要なパラメータを入力します(例: segment_id, query_filter, max_items)。
    5. このソースで取り込みたい追加のエンドポイントがあれば、手順 4 を繰り返します。各エンドポイントは、Lakehouse の別々のテーブルになります。
    6. ソースに名前を付け、Create をクリックします。
    Warning

    技術名 はソースが作成された後、変更できません。これは Data Platform SDK を使用してソースを開く際に使用されます。

    5. 利用可能なエンドポイントの種類

    コアコマース (14)

    Endpoint説明必須パラメータ
    productsカタログ商品
    product_variants全商品のすべてのバリエーション
    collectionsマニュアル + スマートコレクション
    customers顧客記録
    customer_segment_members特定セグメントのメンバーsegment_id
    orders注文(フィルタ可能)任意 query_filter
    draft_orders変換されていない保留中の注文
    abandoned_checkoutsファネルデータ
    fulfillment_ordersロジスティクスキュー
    tender_transactions支払いタイプの内訳
    locations店舗 / 倉庫
    inventory_itemsSKU + コストマスタデータ
    segments顧客セグメント定義
    companiesB2B企業

    B2B & マーケット (4)

    EndpointDescriptionRequired parameters
    company_locationsB2B 配送先住所
    price_listsB2B / 卸売価格
    catalogsB2B カタログ割り当て
    markets複数地域構成

    プロモーション & ロイヤルティ (4)

    EndpointDescriptionRequired parameters
    discount_nodes自動割引、コード割引、手動割引のすべて
    code_discount_nodesコード割引のみ
    gift_cardsギフトカード(Shopify Plusのみ)
    selling_plan_groupsサブスクリプションプラン

    マーケティング & Shopify決済 (5)

    EndpointDescriptionRequired parameters
    marketing_eventsキャンペーンの追跡
    publications販売チャネルの公開
    payoutsShopify Paymentsの支払い
    disputesShopify Paymentsの紛争
    balance_transactionsShopify Paymentsの詳細な元帳

    メタデータ & カスタムデータ (3)

    エンドポイント説明必須パラメータ
    metaobjectsカスタムデータインスタンスmetaobject_type
    metaobject_definitionsメタオブジェクトスキーマ
    metafield_definitionsメタフィールドスキーマ(所有者タイプごと)owner_type (PRODUCT, CUSTOMER, ORDER, ...)

    コンテンツ (5)

    EndpointDescriptionRequired parameters
    articlesブログ記事
    blogsブログコンテナ
    pagesオンラインストアの静的ページ
    url_redirectsURL リダイレクト ルール
    filesアップロードされたメディアアセット

    管理 & オペレーション (4)

    EndpointDescriptionRequired parameters
    eventsShop audit log
    staff_membersStore team
    delivery_profilesShipping zones & rates
    fulfillment_services3PL integrations

    シングルオブジェクト (1)

    エンドポイント説明必須パラメータ
    shop店舗レベルの設定(1レコードを返します)

    カスタムGraphQL (1)

    エンドポイント説明必須パラメータ
    custom_queryユーザーが記述した任意のGraphQLクエリを実行しますquery(GraphQLクエリ)、オプションのvariables、オプションのconnection_path

    custom_query の場合、GraphQL $first: Int!$after: String を変数として宣言し、pageInfo { hasNextPage endCursor } で接続をページネーションする必要があります。コネクタはカーソルを自動的に挿入します。

    6. ページネーション & max_items

    ShopifyのGraphQL APIは、一度にすべての結果を返すことはありません。すべてのリストはページネーションされています。コネクタは自動的にページネーションを処理します。UIで制御できるのは、max_itemsフィールドだけです。

    max_itemsフィールド

    すべてのエンドポイント(組み込みとcustom_query)は、最大項目数フィールドを公開しています。これは「Nレコードを収集した後で停止する」とコネクタに指示します。さらに多くのレコードが利用可能でも。

    目的最大項目数を設定結果
    すべてのレコードコネクタはShopifyがhasNextPage: falseと言うまでループします。1つのリクエスト(小規模な店舗)または1000以上のリクエスト(大規模な店舗)になる可能性があります。
    最初のレコードのみ1ページサイズ1の1つのリクエスト。即座に停止します。
    最初の5レコード5ページサイズ5の1つのリクエスト。停止します。
    最初の100レコード100ページサイズ100の1つのリクエスト。停止します。
    最初の250レコード250ページサイズ250(Shopifyの最大)の1つのリクエスト。停止します。
    最初の1000レコード1000250ずつの4つのリクエスト。
    テスト用に50レコード、その後すべて50を最初に設定し、その後空で再実行反復処理中の一般的なパターンです。

    背景で動作する仕組み

    コネクタはページサイズを動的に選択します。

    page_size = min(100, max_items - already_collected)   # if max_items is set
    page_size = 100                                        # if max_items is empty

    各リクエストは、その数のレコードをShopifyに要求します。max_itemsに達したりhasNextPage: falseしたりすると、ループが停止します。

    したがって、max_items: 5は正確に1つのHTTPリクエスト(first=5, after=null)をトリガーします。ページネーションループはありません。2回目の呼び出しはありません。自分でページネーションロジックを記述する必要はありません。

    「最初のページのみを取得」

    「最初のページのみ」を明示的に切り替えるトグルはありません。ただし、Shopifyがページサイズを250に制限しているため、max_itemsを250以下に設定すると、1つのHTTPリクエストが保証されます。「自然なShopifyページサイズ」(デフォルトで50–100)が必要な場合は、max_items: 50または100を設定します。

    すべてのエンドポイントに適用

    これは、次のように同じ方法で動作します。

    • 40の組み込みエンドポイント(productsorderscustomers、...)。
    • custom_queryエンドポイント:コネクタは引き続きfirstafterをクエリに注入し、max_itemsを尊重します。

    GraphQLクエリ自体でfirst: 5を記述する必要はありません。first: $firstを記述し、コネクタがmax_itemsに基づいて正しい値を注入させます。

    7. カスタムクエリ:例

    custom_queryエンドポイントは、Admin APIに対して記述した任意のGraphQLを受け付けます。3つのルールが適用されます。

    1. クエリ変数に$first: Int!$after: Stringを宣言します。
    2. pageInfo { hasNextPage endCursor }で1つの接続をページネーションします。
    3. 接続パスフィールドを設定するか(例:products)、コネクタが接続を自動検出するようにします。

    以下は、一般的なケースの具体的なテンプレートです。どれかをGraphQLクエリフィールドに貼り付け、Variablesフィールドに必要に応じて入力し、実行します。

    例1:基本的な製品(いくつかのフィールドのみ)

    ダウンストリームの結合にIDとタイトルのみが必要な場合、20フィールドのデフォルトproductsエンドポイントの代わりに便利です。

    query ($first: Int!, $after: String) {
      products(first: $first, after: $after) {
        edges {
          node {
            id
            title
            handle
            vendor
            createdAt
          }
        }
        pageInfo { hasNextPage endCursor }
      }
    }
    • Variables:空にします
    • 接続パスproducts(または自動検出のために空にします)

    例2:日付フィルター付きの注文

    組み込みordersエンドポイントを複製しますが、フィルターとフィールド選択の両方を調整できます。フィルターはVariablesを通じて渡します。

    query ($first: Int!, $after: String, $query: String) {
      orders(first: $first, after: $after, query: $query, sortKey: CREATED_AT) {
        edges {
          node {
            id
            name
            createdAt
            displayFinancialStatus
            totalPriceSet { shopMoney { amount currencyCode } }
            customer { id email }
          }
        }
        pageInfo { hasNextPage endCursor }
      }
    }
    • Variables{"query": "created_at:>=2026-04-01 AND financial_status:paid"}
    • 接続パスorders

    完全な検索構文は、shopify.dev/docs/api/usage/search-syntaxでドキュメント化されています。

    例3:バリアントとメタフィールド付きの製品

    デフォルトのproductsエンドポイントが不十分な場合。各製品のバリアントをインラインで取得し、いくつかの特定のメタフィールドを取得します。

    query ($first: Int!, $after: String) {
      products(first: $first, after: $after) {
        edges {
          node {
            id
            title
            variants(first: 50) {
              edges {
                node { id sku price inventoryQuantity }
              }
            }
            metafields(first: 10, namespace: "custom") {
              edges {
                node { key value type }
              }
            }
          }
        }
        pageInfo { hasNextPage endCursor }
      }
    }
    • Variables:空にします
    • 接続パスproducts
    Warning

    各ネストされたfirst:はクエリコストに加算されます。Standardプラン(クエリあたり100ポイントの予算)では、products(first: $first)variants(first: 50)metafields(first: 10)を使用すると、約first × (50 + 10 + 1)ポイントが消費されます。この種類のネストされたクエリでは、親ページサイズを小さく(例:max_items: 20)保つようにします。

    例4:注文行項目(トップレベルのエンドポイントとして公開されていないサブリソース)

    各注文の行項目は組み込みエンドポイントではありません。それらを取得する唯一の方法はカスタムクエリです。

    query ($first: Int!, $after: String) {
      orders(first: $first, after: $after, query: "status:any", sortKey: CREATED_AT) {
        edges {
          node {
            id
            name
            lineItems(first: 50) {
              edges {
                node {
                  id
                  title
                  quantity
                  originalUnitPriceSet { shopMoney { amount currencyCode } }
                  variant { id sku }
                }
              }
            }
          }
        }
        pageInfo { hasNextPage endCursor }
      }
    }
    • Variables:空にします
    • 接続パスorders

    例5:ネストされた接続(接続パスを使用)

    接続がルートにない場合、例:特定のShopify Payments残高取引の注文。接続パスを明示的に設定します。

    query ($first: Int!, $after: String) {
      shopifyPaymentsAccount {
        payouts(first: $first, after: $after) {
          edges {
            node {
              id
              status
              issuedAt
              summary {
                chargesGross { amount currencyCode }
                refundsFee { amount currencyCode }
              }
            }
          }
          pageInfo { hasNextPage endCursor }
        }
      }
    }
    • Variables:空にします
    • 接続パスshopifyPaymentsAccount.payouts*(必要です。自動検出はここで動作しますが、複数の接続が異なる深さにある場合は明示的な方が明確です)

    ヒント

    • GraphiQL Explorerで最初にテストします。Shopifyはhttps://{shop}.myshopify.com/admin/api/explorerでGraphiQLを提供しています。クエリを構築して検証した後、コネクタに貼り付けます。自動補完とスキーマドキュメントにより、反復処理がはるかに高速になります。
    • フィールドの発見。完全なスキーマは、shopify.dev/docs/api/admin-graphql/latestでドキュメント化されています。各タイプのページには、利用可能なフィールドとそのコストがリストされています。
    • 2つの場所、2つの役割。クエリ文字列は、変数リストに$first: Int!$after: Stringを宣言する必要があります。これは、Shopifyがそれらを期待するGraphQL宣言です。コネクタはその後、ページごとにそのを実行時に注入します。Variables UIフィールドは、クエリで宣言した追加変数の(例:$query$ownerType$segmentId)用です。firstafterをそこに入力しないでください。コネクタはそれらを上書きします。
    • max_itemsは組み込みエンドポイントと同様に適用されますセクション6を参照してください。

    8. クイック例:製品の抽出

    1. エンドポイントタイプproducts
    2. 最大項目数1000(または空にしてすべてを抽出)
    3. テーブル抽出を実行します。

    コネクタは生のJSONを返します。プラットフォームは自動的にネストされたフィールドをフラット化します(例:featuredImage.urlは列featuredimage_urlになります)。

    焦点を当てたクエリ:例:過去30日間の注文のみ

    1. エンドポイントタイプorders
    2. クエリフィルターcreated_at:>=2026-04-01
    3. 最大項目数:空

    query_filterフィールドはShopify検索構文を受け付けます。

    9. ベストプラクティス

    ショップ名を1回正規化

    コネクタはmy-storemy-store.myshopify.com、またはhttps://my-store.myshopify.com/を受け付けます。3つとも同じホストに解決します。最も読みやすいものを選択します。

    狭い抽出にcustom_queryを使用

    デフォルトのクエリは、レコードごとに約10–20フィールドを返します。数百万のレコードがあり、数十のフィールドのみが必要な場合は、そのフィールドのみを含むcustom_queryを記述します。クエリコストはフィールド数にほぼ比例します。

    クライアントID + シークレットでトークンを更新

    Mode B(クライアントID + クライアントシークレット)を設定した場合、コネクタは各ジョブ開始時にOAuth交換を再実行します。これにより、漏洩/回転したトークンは、Devダッシュボードでシークレットを再発行することで置き換えられ、コネクタ構成を変更する必要はありません。

    注文のデフォルトquery_filter

    注文エンドポイントは、デフォルトでstatus:anyを使用して、すべての注文(開いている、閉じている、キャンセルされた)を含めます。開いている注文のみが必要な場合は、query_filter: status:openを設定します。

    10. プランおよびスコープによるゲーティング

    一部のエンドポイントは、プランまたはスコープによって制限されています:

    エンドポイントゲーティング
    gift_cardsShopify Plusのみ
    payouts, disputes, balance_transactionsストアでShopify Paymentsが有効になっている必要があります
    companies, company_locations, catalogs, price_listsB2Bが有効になっている必要があります
    customers, orders, draft_orders, abandoned_checkouts, fulfillment_orders, tender_transactions保護された顧客データの承認(Path Aのステップ5を参照)

    スコープまたはプランが不足している場合、コネクタは警告をログに記録し、そのエンドポイントに対して空のリストを返します。他のテーブルは引き続き動作します。

    Info

    詳細な技術情報(認証の内部構造、完全なエンドポイントリファレンス、ページネーション、レート制限、出力形式、制限)については、Shopify Technical Referenceを参照してください。

    さらに詳しく

    当社のソリューションを実装するためのトレーニングや技術サポートが必要な場合は、営業担当者にお問い合わせください、またはこのリンクをクリックして見積もりを依頼し、当社のプロフェッショナルサービスの専門家にプロジェクトのカスタム分析を依頼してください。

    Data Platformの開発チームと直接質問したり、フィードバックを送信したり、交流したりするには、専用のDiscordチャネルにアクセスしてください。

    OVHcloudサービスについてサポートが必要な場合は、ヘルプセンターでリクエストを作成してください。

    ユーザーコミュニティに参加してください。