EコマースやShopifyの初学者にとって、できるだけ “やさしく” “わかりやすく” “正確に” 難しいコマース用語やマーケティング用語、ストア構築から販売までの仕組み・ノウハウを伝えることを心がけて、記事コンテンツを作成しています。

PostmanでShopify Admin APIのクエリを実行・管理する
Tsun Inc. CTOの小笠原です!今回はShopify APIをPostmanで簡単に実行するノウハウをまとめました。 Shopify APIに限...
「RuffRuff 予約販売」は在庫切れや新商品販売前、入荷待ちなどタイミングで発生する機会損失の削減をサポートします。
ノーコードかつ3ステップで簡単にセットアップでき、日本語に対応しています。
無制限で予約商品を登録および無制限で予約注文を受け付けることが可能です。引用元: RuffRuff 予約販売
Tsun Inc.でCTOをしている小笠原です!
このブログではShopify開発に役立つ情報を共有していきます。
Shopifyエンジニアの方の参考になれば嬉しいです!
今回のテーマは「ShopifyのMetafieldsをGraphQL APIを使って一括更新する」です。
メタフィールド(Metafields)とは
メタフィールド(Metafields)とは、Shopifyのデフォルトで設定できる情報とは別に情報を付加したい場合に、付加したい情報の定義設定及び追加できる仕組みのことです。引用元:https://tsun.ec/blogs/articles/43
下記の記事では、メタフィールドやメタフィールドの一括編集におすすめのShopifyアプリも紹介していますので参考にしてください。
Shopifyのメタフィールドとは?おすすめのShopifyアプリも紹介
Metafieldsの追加は専用のShopifyアプリを使って行っていましたが、一括更新は有料プランが必要なため、今回はGraphQL APIを使ってやってみようかなーと思いました。
また、GraphQL APIを使った一括更新(bulk update)は以前やったことがあったため、同じ要領でMetafieldsも更新できるなというのがある程度わかっていました。
今回はサンプルとしてProductVariantのMetafieldsを一括更新してみます。
ProductVariantには小売価格を表すretail_priceというMetafieldが1つ設定されています。
GraphQL APIを使った一括更新 (bulk update) のやり方は 公式リファレンス にある通りにやればOKです。
大まかなステップとしては下記の4ステップあります。
まずは更新のためのJSONLファイルを用意します。(JSONではなくJSONLなので注意してください)
このJSONLファイルは更新する対象を特定するためのidと更新する値さえ入っていればOKです。
今回は下記のようなJSONLファイル(bulk-update-metafields.jsonl)を作成しました。
{ "input": { "id": "gid:\/\/shopify\/ProductVariant\/1", "metafields": { "namespace": "global", "key": "retail_price", "type": "number_integer", "value": "1805" } } }
{ "input": { "id": "gid:\/\/shopify\/ProductVariant\/2", "metafields": { "namespace": "global", "key": "retail_price", "type": "number_integer", "value": "6397" } } }
{ "input": { "id": "gid:\/\/shopify\/ProductVariant\/3", "metafields": { "namespace": "global", "key": "retail_price", "type": "number_integer", "value": "5115" } } }
{ "input": { "id": "gid:\/\/shopify\/ProductVariant\/4", "metafields": { "namespace": "global", "key": "retail_price", "type": "number_integer", "value": "7896" } } }
{ "input": { "id": "gid:\/\/shopify\/ProductVariant\/5", "metafields": { "namespace": "global", "key": "retail_price", "type": "number_integer", "value": "1443" } } }
更新するストアに対して下記のmutationクエリを実行します。
mutation {
stagedUploadsCreate(input:{
resource: BULK_MUTATION_VARIABLES,
filename: "bulk-update-metafields",
mimeType: "text/jsonl",
httpMethod: POST
}){
userErrors{
field,
message
},
stagedTargets{
url,
resourceUrl,
parameters {
name,
value
}
}
}
}
クエリが成功すると、アップロードに必要なkeyなどの情報が返ってくるのですべてメモします。
上記でメモした情報とJSONLファイルを指定してShopifyのサーバーにPOSTすることでファイルのアップロードが完了します。(この時点ではShopifyのサーバーにファイルをアップロードされただけで更新はされない)
Shopifyのサーバーにアップロードしたファイルを元にクエリを投げることでShopifyに一括更新してね!と伝えます。
具体的には下記のようなクエリを実行します。
mutation bulkOperationRunMutation($mutation: String!, $stagedUploadPath: String!) {
bulkOperationRunMutation(mutation: $mutation, stagedUploadPath: $stagedUploadPath) {
bulkOperation {
id
url
status
}
userErrors {
field
message
}
}
}
{
"mutation": "mutation call($input: ProductVariantInput!) { productVariantUpdate(input: $input) { productVariant { metafields(first: 10) { edges { node { namespace key type value } } } } userErrors { message field } } }",
"stagedUploadPath": "tmp/55523704929/bulk/d1cbc8f2-a3a7-4808-a148-f9024cfb1126/bulk-update-metafields"
}
更新件数によっては更新完了まで結構時間がかかるので気長に待ちます。(Webhookを設定しておけば、完了したタイミングでWebhookを受け取ることも可能)
今回は下記のクエリを投げて完了したかどうかを確認します。
query {
currentBulkOperation(type: MUTATION) {
id
status
errorCode
createdAt
completedAt
objectCount
fileSize
url
partialDataUrl
}
}
statusがCOMPLETEDになったら更新完了です。
対象のProductVariantを取得してみて、更新が確認できたらOKです。
今回はShopifyのProductVariantに設定されたMetafieldsをGraphQL APIで一括更新してみました。
もちろんMetafieldsの一括更新に対応したアプリを使えばクエリを投げたりする手間なくできると思います。
ただ、一括更新するアプリも内部的には今回紹介したbulk updateの仕組みを使って一括更新していますので、仕組みを知っておくと役に立つかなーと思います。
Tsun Inc.ではShopifyのMetafieldsもバリバリ使って快適なストア構築を行っています。
もし、ストア構築をしたい方は、Tsun Inc.へお問い合わせください。
Tsun Inc. CTOの小笠原です!今回はShopify APIをPostmanで簡単に実行するノウハウをまとめました。 Shopify APIに限...
RuffRuff 目次作成の機能や料金プランを知りたい方は下記のページをご参考にしてください。 Shopifyに目次を自動生成するアプリ「RuffRuff...
EコマースやShopifyの初学者にとって、できるだけ “やさしく” “わかりやすく” “正確に” 難しいコマース用語やマーケティング用語、ストア構築から販売までの仕組み・ノウハウを伝えることを心がけて、記事コンテンツを作成しています。
掲載している各種情報は、株式会社Tsunが調査した情報をもとにしています。できるだけ“最新“かつ“正確“な情報の掲載に努めておりますが、内容を完全に保証するものではありません。当サイトによって生じた損害について、株式会社Tsunではその賠償の責任を一切負わないものとします。掲載情報に誤りがある場合には、お手数ですが株式会社Tsunまでご連絡をいただけますようお願いいたします。
{"one"=>"比較する2つまたは3つのアイテムを選択します", "other"=>"選択された3つのアイテムの{{ count }}"}