Developer Changelog / Admin GraphQL API

バリエーションが
「複数バーコード」に対応
— barcode は非推奨へ

1 バリエーション = 1 バーコードだった制約が外れ、UPC / EAN / ISBN / GTIN / ASIN を型付きで最大 20 件まで保持できるようになった。従来の barcode フィールドは動き続けるが deprecated。読み取りだけを続けると「他のバーコードの存在に気づけない」状態になる。

このページの構成
  1. 30秒で理解 : 何が変わったのか
  2. 仕組み図解 : 読み書きの経路
  3. 扱えるバーコードタイプと検証
  4. 利用上のルール(数量・上書き・排他)
  5. barcode(非推奨)との互換動作
  6. 最大の落とし穴 : サイレント切り捨て
  7. 移行の 3 ステップ
  8. 技術者が押さえるべき5つのポイント
  9. 業務に活かせる3つのユースケース
  10. 提案で使える1行サマリ

130秒で理解 : 何が変わったのか

同じバリエーションを、メーカーの UPC / プライベートブランドの EAN / GTIN / 再発行された ISBN / マーケットプレイス用の ASIN …と複数の識別子で売る現場は多い。
これまではバリエーションが持てるバーコードが 1 件だけだったため、余りはメタフィールド・タグ・あるいは Shopify の外に逃がすしかなかった。今回、複数バーコードが正式なデータ構造になった。

従来 : 1 件しか入らない

2 つ目以降の識別子はメタフィールド/タグ/外部システムに退避。どこに何が入っているかがストアごとに属人化していた。

今後 : 型付きで最大 20 件

ProductVariant.barcodes connection で読み、barcodes input で書く。タイプを宣言すれば規格ルールで検証される。

書き込みに使えるミューテーションは productSetproductVariantsBulkCreateproductVariantsBulkUpdate の 3 つ。いずれも barcodes input を受け付ける。

2仕組み図解 : 読み書きの経路

書き込み(mutation) productSet productVariantsBulkCreate productVariantsBulkUpdate input : barcodes(送信=全置換) ProductVariant barcodes[0](先頭) barcodes[1] barcodes[2] … 最大 20 件 barcode(非推奨・先頭を指す) barcodes を読むアプリ 全識別子が見える ✓ 推奨 barcode だけ読むアプリ 1 件しか見えない △ 他の存在に気づけない
検索側も追随済みproductsproductVariants クエリの barcode フィルタは、バリエーションが持つ いずれかの バーコードにマッチするようになった。先頭だけしか引っかからない、ということはない。

3扱えるバーコードタイプと検証

各バーコードは type を宣言できる。宣言した場合、その規格の 文字種・桁数・プレフィックス・チェックディジット のルールに従って検証される。

UPC
EAN
ISBN
GTIN
ASIN
type あり

規格に沿って検証される

文字種・長さ・プレフィックス・チェックディジットのルールに合致しない値はエラー。データ品質を API レイヤで担保できる。

type なし

送った値をそのまま保存

タイプを宣言しなければ、送信された値がそのまま格納される。型なしの既存データは今まで通り動くので、一括で型付けし直す必要はない。

4利用上のルール(数量・上書き・排他)

ルール内容実装上の意味
件数上限 20 件 / バリエーション 21 件目を入れたいケースは設計を見直す(別バリエーション or メタフィールド)
文字数上限 255 文字 / 1 バーコード 実運用の識別子には十分。連結値を詰め込む用途ではない
並び順 最初に送った値が connection の先頭にソートされる 「主識別子」を先頭に置く設計が可能
書き込み挙動 全置換 barcodes 送信はセット全体を置き換える 残したいバーコードも必ず含めて送る。差分パッチではない
排他制約 不可 1 つの variant input で barcodebarcodes の両方は設定できない 移行期のコードで「両方セット」を書くと落ちる。どちらか一方に寄せる
検索フィルタ products / productVariants の barcode フィルタは任意の 1 件にマッチ サブ識別子で検索してもヒットする
「全置換」がいちばん事故りやすい : 1 件だけ追加したいつもりで barcodes: [新しい値] を送ると、既存のバーコードは全部消える。必ず 読み取り → マージ → 全件送信 の順で実装すること。

5barcode(非推奨)との互換動作

ProductVariant.barcode は非推奨になったが、今日時点で壊れるものは何もない。挙動は「常に connection の先頭を指す」と覚えれば足りる。

読み取り

barcode を読むと、barcodes connection の先頭のエントリが返る。

書き込み

barcode への書き込みは 先頭の 1 件だけを更新し、他のバーコードには触れない

空値の送信

空値を送ると先頭がクリアされ、セット内の次のバーコードが繰り上がる。以降、残りが無くなるまで同じ挙動。

先頭ポジションのバーコードを足したり差し替えたりすることで、まだ移行できていない画面や連携先の見え方をコントロールしつつ、複数バーコードの恩恵は受けられる。移行を段階的に進めるための逃げ道として使える。
削除時期 : 廃止日は将来のアナウンスで告知される予定。フィールドが無くなる前に API バージョン 1 つ分の予告期間が置かれる、とされている。具体的な日付は記載なし。

6最大の落とし穴 : サイレント切り捨て

Shopify 上のバリエーション UPC 0123456789012 EAN 4901234567894 ASIN B0XXXXXXXX 3 件が正しく保存されている barcode のみ読む 既存インテグレーション UPC 0123456789012 残り 2 件は「無い」ように見える ERP マーケットプレイス POS サプライヤーフィード 識別子が欠けたまま 同期される エラーも警告も出ない
2 件目のバーコードが追加された瞬間からbarcode だけを読むインテグレーションは「そのうちの 1 件」しか見えず、他が存在するというシグナルすら受け取れない
商品識別子を ERP・マーケットプレイス・POS・サプライヤーフィード に同期しているアプリは、読み取りを barcodes connection に移すこと。

7移行の 3 ステップ

1

barcode の参照箇所を洗い出す

コード内の barcode 読み取りを全部拾う。特に外部システムへ書き出している経路を優先。

2

読み取りを barcodes に差し替え

connection で全件取得し、必要なら type で絞り込む。先頭 1 件でよい箇所も明示的に先頭を取る形に。

3

書き込みをマージ方式に

barcodes は全置換なので「読む → マージ → 全件送る」に。barcode との併用は不可なので片方に統一。

8技術者が押さえるべき5つのポイント

1. 書き込みは差分ではなく「全置換」

barcodes を送るとバリエーションのセット全体が置き換わる。残したいものを含めて送るのが必須。既存アプリの update 系コードをそのまま流用すると全消しになる。

2. barcode と barcodes は排他

1 つの variant input で両方を設定することはできない。移行途中で「安全のため両方書く」実装は成立しないので、経路ごとにどちらを使うか決め切る。

3. type 宣言=バリデーションの導入

UPC / EAN / ISBN / GTIN / ASIN を宣言すると、文字種・長さ・プレフィックス・チェックディジットが検証される。型を付けた瞬間、今まで通っていた汚いデータが弾かれる可能性がある点に注意。

FIRST

4. 「先頭」が後方互換の要

レガシー画面や未移行の連携先が見るのは常に先頭。先頭に何を置くかがそのまま互換性の設計になる。移行順に合わせて主識別子を先頭に固定しておくと事故が減る。

5. 一番怖いのは「エラーが出ない劣化」

サイレント切り捨ては例外も警告も出さない。ERP / マーケットプレイス / POS / サプライヤーフィードへ識別子を同期しているアプリは、明日壊れなくても「静かに間違ったデータを流し続ける」状態になり得る。廃止日は未定(将来告知+API バージョン 1 つ分の予告)だが、移行の緊急度は廃止日ではなくデータ整合性で決まる

9業務に活かせる3つのユースケース

metafield tag 外部CSV
USE CASE 1

メタフィールドに散らばった識別子を正規のデータ構造へ集約

課題
1 バリエーション = 1 バーコードの制約のせいで、2 つ目以降の UPC / EAN / GTIN がメタフィールド・タグ・Shopify 外のスプレッドシートに散らばり、どれが正なのか誰も分からない。
打ち手
散在している識別子を棚卸しし、productVariantsBulkUpdatebarcodes input で 1 バリエーションに集約。規格が分かるものは type を宣言して検証を通す。
効果
識別子の置き場が 1 か所に定まり、検索も barcode フィルタで全件横断できる。棚卸し過程で不正な値も洗い出せる。
技術メモ
上限は 20 件 / 各 255 文字。移行スクリプトは全置換仕様なので「既存の全件 + 追加分」をまとめて送る形にする。
Shopify ERP POS MP
USE CASE 2

ERP / POS / マーケットプレイス連携の「静かなデータ欠損」を防ぐ健全性チェック

課題
自社・受託の連携アプリが barcode 1 件だけを読んで外部へ同期している。マーチャント側が 2 件目のバーコードを登録した瞬間から、外部システムには不完全な識別子が流れ続ける(警告は出ない)。
打ち手
連携コードの barcode 参照を洗い出し、barcodes connection 読みに置換。移行前の暫定対応として「バーコードが 2 件以上あるバリエーション」を抽出してレポート化する。
効果
マーケットプレイス出品エラー・入荷検品ミス・サプライヤーフィードの不一致といった、原因究明に時間のかかる障害を事前に潰せる。
技術メモ
抽出は productVariants を舐めて barcodes の件数を見る。廃止日は未定だが、影響は廃止前から発生する点が要注意。
UPC ✓ EAN ✓ ISBN ✗
USE CASE 3

型付きバーコードで商品マスタのデータ品質を API 側に担保させる

課題
チェックディジット違いや桁数不足の UPC / EAN が商品マスタに混入し、出品や検品の段階で初めて発覚する。バリデーションを自前実装するとメンテコストがかかる。
打ち手
取り込み時に type(UPC / EAN / ISBN / GTIN / ASIN)を宣言して書き込み、Shopify 側の検証を通す。規格が特定できない値は type 未宣言のまま送り、現状維持で保存する。
効果
不正な識別子を投入時点で弾ける。自前バリデータの保守が不要になり、規格ルールの更新も Shopify 側に委ねられる。
技術メモ
型を付けると既存の不正データが弾かれ得るため、まず dry-run 相当で検証エラー件数を可視化してから本適用するのが安全。type 未宣言なら値はそのまま保存され、従来の挙動と変わらない。

10提案で使える1行サマリ

「1 バリエーション = 1 バーコードの制約が外れ、UPC / EAN / ISBN / GTIN / ASIN を型付きで最大 20 件まで持てるようになった。
従来の barcode は非推奨だが今日は壊れない。ただし 2 件目が登録された瞬間から、barcode しか読まない連携は静かに識別子を取りこぼす。
ERP・POS・マーケットプレイス連携がある案件は、廃止日を待たず読み取りを barcodes へ移すのが先。」