API CHANGE

POS UI Extensions 2026-07
割引計算が単価ベースに変更

FixedAmount行割引の解釈ロジックが変わる — アプリ側の計算式の見直しが必要

API VERSION COMPARISON2026-04 以前合計割引額を渡すsetLineItemDiscount(5.00)数量2のライン → 合計 $5.00Shopify POSが自動で単価換算(÷数量)を実行各ユニット $2.50 引き2026-07 以降単価割引額を渡すsetLineItemDiscount(5.00)数量2のライン → 合計 $10.00⚠ 自動換算なし。渡した値がそのまま各ユニットに適用各ユニット $5.00 引きBREAKING対象: FixedAmount 行割引のみ / Percentage 割引は影響なし

POS UI ExtensionsのAPIバージョン2026-07から、setLineItemDiscountおよびbulkSetLineItemDiscountsに渡すFixedAmount(固定金額)行割引の値が、合計額ではなくユニットあたりの割引額として直接解釈されます。従来バージョン(2026-04以前)では自動換算が行われていましたが、2026-07ではその変換処理が廃止されます。2026-07を採用するアプリは、割引計算ロジックの修正が必要です。

WHAT CHANGED

01変更内容:Before / After 図解

Fixed Amount 行割引:動作の変化BEFORE: 2026-04 以前AFTER: 2026-07 以降アプリが渡す値$5.00(合計割引のつもり)POS の自動変換処理$5.00 ÷ 数量2 = $2.50/unit適用結果合計 $5.00 割引✓ 意図通りの合計割引が適用アプリが渡す値$5.00(単価として解釈)⚠ 自動換算なし$5.00 × 数量2 = $10.00 割引適用結果合計 $10.00 割引⚠ 意図した2倍の割引が適用されるBREAKING2026-07合計 $5.00 割引を意図して $5.00 を渡した場合の比較(数量 2 のラインアイテム)USE CASES

02業務に活かせる具体ユースケース

ユースケース 1:数量まとめ買い割引アプリの対応

課題
「3点で300円引き」のような合計固定割引を実装しているPOSアプリが、2026-07移行後に割引額が3倍になってしまう
打ち手
setLineItemDiscountを呼ぶ前に totalDiscount ÷ quantity を計算し、その値を渡す。例:数量3で300円引き → 100を渡す
効果
2026-07採用後も割引金額が意図通りに適用され、過剰割引によるマージン損失を防げる
技術メモ
割り切れない場合は端数ポリシー(切り捨て・四捨五入)をアプリ内で統一定義し、ユーザー向けレシートと照合すること

ユースケース 2:bulkSetLineItemDiscountsを使う一括割引処理

課題
カート内の複数ラインに一括で固定金額割引を設定するアプリが、数量の異なる各ラインで正しい単価割引を計算できていない
打ち手
bulkSetLineItemDiscountsに渡す配列を生成する際、各ラインの数量(line.quantity)で割り算を行い、ラインごとに個別の per-unit 値を計算する
効果
数量が1のラインと複数のラインが混在するカートでも、意図した合計割引額を正確に適用できる
技術メモ
Cart APIリファレンスで各ラインオブジェクトのスキーマを確認し、quantityフィールドへのアクセス方法を事前に把握しておくこと

ユースケース 3:旧バージョンと新バージョンの並行サポート

課題
異なるPOS端末で2026-04と2026-07が混在している環境で、同じコードベースから割引を正しく適用したい
打ち手
使用しているAPIバージョンをランタイムで判定し、2026-04以前の場合は合計額をそのまま渡し、2026-07以降の場合は単価額に変換してから渡すという分岐ロジックを実装する
効果
段階的な移行期間中もどちらの端末でも正しい割引が適用され、移行リスクを最小化できる
技術メモ
元記事によると2026-04以前のアプリは変更不要とされているため、移行スケジュールが確定してから切り替えを検討することを推奨
FOR DEVELOPERS

03技術者目線のポイント

影響範囲の限定

この変更はFixedAmount(固定金額)行割引のみ対象。Percentage(パーセンテージ)割引はまったく影響を受けない。パーセンテージ割引のみを使用しているアプリは対応不要。

旧バージョンアプリの扱い

APIバージョン2026-04以前を使用しているアプリはコード変更不要。自動換算処理は引き続き2026-04以前では機能する。変更が必要なのは2026-07を新規採用する場合のみ

割り切れない端数の処理

合計割引額が数量で割り切れない場合(例:$5を数量3で割る)、どの端数処理(切り捨て/切り上げ/四捨五入)を採用するかはアプリ側で決定する。元記事には「アプリの意図する割引動作に合った値を選択」とあるが、具体的な推奨方式の記載はなし。

対象APIメソッド

変更対象は Cart API の setLineItemDiscountbulkSetLineItemDiscounts の2メソッド。詳細なスキーマや型定義はShopify公式のCart APIリファレンスで確認すること(元記事にリンクあり)。

移行タイミングの判断

2026-07への移行を決断する前に割引計算ロジックの修正を完了させる必要がある。元記事は「新バージョン使用前に更新を完了すること」と明示。段階的移行の場合はバージョン分岐ロジックの実装も検討する。

2026-07 移行チェックフローSTEP 01使用バージョン確認2026-04以前?STEP 02割引種別を確認FixedAmount使用?STEP 03計算ロジックを修正合計÷数量をAPIに渡すSTEP 042026-07 へ移行テスト後バージョン切替✓ 変更不要2026-04以前✓ 変更不要Percentage割引のみ端数が出る場合はSTEP03で丸め処理ポリシーも合わせて定義すること

POS UI Extensions 2026-07では固定金額行割引が「単価ベース」に統一されるため、2026-07採用前に合計割引 ÷ 数量の変換ロジックをアプリ側に実装することで、過剰割引による損失リスクを回避できます。

Source: https://shopify.dev/changelog/pos-ui-extensions-2026-07-uses-per-unit-fixed-amount-line-item-discounts | 公開日: 2026年7月8日