POS UI Extensions 2026-07 / 新 API

Printing API 登場
POS 拡張から「レシートプリンタへ直接印刷」できるようになった

これまでの shopify.print はシステムの印刷ダイアログを開くことしかできず、専用レシートプリンタを狙い撃ちできなかった。新しい shopify.printing は端末に繋がったプリンタを列挙し、ダイアログ無しで直接印刷ジョブを飛ばせる。

このページの構成
  1. 30 秒で理解 : 何が変わったか
  2. 仕組み図解 : 印刷が飛ぶまでの流れ
  3. 2 つの API : getPrinters() と print()
  4. 旧 shopify.print との比較
  5. src とドキュメント形式のルール
  6. 実装の型(フォールバック必須)
  7. 技術者が押さえるべき 5 つのポイント
  8. 業務に活かせる 3 つのユースケース
  9. 提案で使える 1 行サマリ

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

POS UI Extensions 2026-07Printing API(shopify.printingが追加された。
拡張から 端末に繋がっているハードウェアプリンタを列挙 し、印刷ダイアログを出さずに レシートプリンタへ直接ドキュメントを送れる。

これまで : shopify.print

できるのは「システムの印刷ダイアログを開く」ことだけ。ダイアログは専用レシートプリンタをターゲットにできないため、スタッフが毎回手で選ぶ/そもそも出せないという状態だった。

これから : shopify.printing

getPrinters() で繋がっているプリンタを取得し、print(src, {printer}) で直接印刷。ダイアログは出ない。printer を省略すれば従来どおりダイアログも使える。

shopify.print は deprecated(非推奨)になったが、即時対応は不要。2026-07 を採用するタイミングで移行を計画すればよい。それより前の POS UI Extensions API バージョンは変更なし。

2仕組み図解 : 印刷が飛ぶまでの流れ

POS UI Extension getPrinters() print(src, opts) 拡張コード ① 列挙 Shopify POS 端末 id / name / connected ペアリング済み一覧 POS 11.11.0 以上が必要 ハードウェア探索 ② 取得 分岐 printer を渡した? src は PDF? 実装側の判断 レシートプリンタへ直接 ダイアログ無し / HTML・画像 システム印刷ダイアログ printer 省略時 / PDF はこちら
ドキュメントは 拡張のセッショントークンを使って fetch される。つまりアプリ側の印刷用エンドポイントは、そのトークンで認証して中身を返す作りにしておけばよい。

32 つの API : getPrinters() と print()

shopify.printing.getPrinters()

その端末で利用できる ハードウェアプリンタの一覧 を返す。各プリンタは id / name / connected(接続状態)を持つ。

POS 11.11.0 未満では常に空配列。レシートプリンタがペアリング済みでも空になる。

shopify.printing.print(src, options?)

src のドキュメントを印刷する。

options.printer 省略 → システム印刷ダイアログが開く。
getPrinters() が返したプリンタを渡す → ダイアログ無しでそのプリンタに直接印刷。

プリンタ情報内容
idプリンタの識別子
nameプリンタ名
connected接続状態。実装では connected が true のものを選ぶのが基本

Printing API は すべての POS UI extension ターゲット で利用できる。

4旧 shopify.print との比較

項目shopify.print(非推奨)shopify.printing(2026-07〜)
プリンタの列挙 不可 getPrinters() id / name / connected
レシートプリンタ指定 不可 ダイアログは専用レシートプリンタをターゲットにできない 可能 ダイアログ無しで直接印刷
システム印刷ダイアログ これだけ printer 省略で従来どおり利用可
ステータス deprecated ただし即時対応不要 推奨 2026-07 採用時に移行
旧 API バージョン それ以前の POS UI Extensions API バージョンは変更なし

5src とドキュメント形式のルール

src に渡せるもの

OK

アプリの application_url に付く相対パス

例 : '/print/receipt'

OK

同一オリジンのフル URL

オリジンが違う URL は対象外。

ドキュメントの取得は 拡張のセッショントークン を使って行われる。

ドキュメント形式ごとの扱い

HTML

HTML

レシートプリンタが直接レンダリングできるprinter を渡してダイアログ無し印刷が可能。

画像

HTML と同様、レシートプリンタが直接レンダリングできる。

PDF

PDF

システム印刷ダイアログが必須src が PDF のときに printer を渡すと printエラーを throw する。PDF では必ず options.printer を省略する。

6実装の型(フォールバック必須)

getPrinters() が空配列を返すケースは 必ず ハンドリングし、システム印刷ダイアログにフォールバックする。これは POS 11.11.0 未満の端末だけでなく、レシートプリンタを持たないマーチャント のカバーにもなる。

const printers = await shopify.printing.getPrinters();
const receiptPrinter = printers.find((printer) => printer.connected);

if (receiptPrinter) {
  await shopify.printing.print('/print/receipt', {printer: receiptPrinter});
} else {
  await shopify.printing.print('/print/receipt');
}
1

プリンタを探す

getPrinters() で一覧取得し、connected が true のものを選ぶ。

2

あれば直接印刷

print(src, {printer})。ダイアログは開かない。

3

無ければダイアログ

print(src) のみ。旧環境・プリンタ無し店舗もこれで動く。

ハードウェアプリンタ探索には Shopify POS 11.11.0 以上が必要。 それ未満のバージョンでは、レシートプリンタがペアリング済みでも getPrinters() は空配列を返す。 なお、この制約はシステム印刷ダイアログには影響せず、ダイアログは引き続き利用できる。

動作確認の方法

開発ストアで POS 11.11.0 以上ペアリング済みレシートプリンタ を用意し、getPrinters() で取得したプリンタを shopify.printing.print に渡す。ダイアログが出ずに印刷されれば直接印刷が効いている

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

11.11

1. 空配列は「異常」ではなく通常フロー

POS 11.11.0 未満、またはレシートプリンタ非所持の店舗では getPrinters() が空配列を返す。常にダイアログへフォールバックする分岐を必ず書く。例外扱いにするとその環境で印刷できなくなる。

PDF

2. PDF × printer 指定は throw する

src が PDF を指しているときに printer を渡すと shopify.printing.print はエラーを投げる。PDF は常に options.printer を省略してダイアログに任せる。レシート系は HTML/画像で作るのが素直。

3. src はオリジン制約あり・トークン付きで fetch

渡せるのは application_url 起点の相対パスか、同一オリジンのフル URL のみ。取得は拡張のセッショントークン経由なので、印刷用エンドポイントはそのトークンで認証して描画結果を返す設計にする。

old new

4. 移行は 2026-07 採用と同時でよい

shopify.print は deprecated だが 即時対応は不要。それ以前の API バージョンは変更されないので、既存拡張は動き続ける。2026-07 に上げるタイミングで一緒に置き換えるのが最小コスト。

5. 全ターゲットで使える = 印刷導線をどこにでも置ける

Printing API は すべての POS UI extension ターゲット で利用可能。特定の画面に縛られないので、注文詳細・カート・カスタムアクションなど、業務動線に合わせて印刷ボタンを配置できる。検証は開発ストア+POS 11.11.0 以上+ペアリング済みレシートプリンタで、ダイアログが出ずに印字されるかを見る。

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

USE CASE 1

店頭オペレーションの「印刷ダイアログ地獄」を撲滅する

課題
レジ横に専用レシートプリンタがあるのに、POS 拡張からの印刷は毎回システム印刷ダイアログが開き、スタッフが出力先を選び直す必要があった。そもそもダイアログは専用レシートプリンタをターゲットにできない。
打ち手
2026-07 に上げて getPrinters()connected なプリンタを選択 → print(src, {printer}) の 3 行に置き換える。
効果
タップ 1 回で印字完了。レジ待ち時間の短縮と、出力先誤選択によるやり直しの解消。
技術メモ
レシート本体は HTML か画像 で生成する(PDF だと直接印刷不可)。空配列時のダイアログ・フォールバックは必ず残す。
旧POS 11.11+ ダイアログ 直接印刷
USE CASE 2

多店舗チェーンで「端末バージョンがバラバラ」でも壊れない印刷を作る

課題
店舗ごとに POS アプリのバージョンやプリンタ構成が違う。新機能を入れた途端、旧端末の店舗で印刷が動かなくなるのが怖い。
打ち手
getPrinters() の結果が空かどうかだけで分岐する実装にする。バージョン判定を書かず、空配列=ダイアログ の 1 本のフォールバックで両方を吸収する。
効果
端末バージョンの棚卸しやアップデート完了を待たずに機能をリリースできる。プリンタ未導入店舗も同じコードで動く。
技術メモ
ハードウェア探索は POS 11.11.0 以上が条件。それ未満はペアリング済みでも空配列になるが、システム印刷ダイアログは引き続き利用可能なので機能全体が落ちることはない。
/print/label 印字
USE CASE 3

取り置き票・修理伝票など「レシート以外の店頭帳票」を拡張から刷る

課題
取り置きや修理受付の控えを、スタッフが別端末や手書きで用意していて、POS 側の業務動線と分断されている。
打ち手
アプリ側に /print/<帳票> エンドポイントを用意し、POS UI extension のカスタムアクションから shopify.printing.print で同じレシートプリンタへ流す。
効果
帳票発行が POS の 1 操作に統合される。Printing API は全ターゲットで使えるため、業務に合った画面に印刷ボタンを置ける。
技術メモ
srcapplication_url 起点の相対パス or 同一オリジン URL。拡張のセッショントークンで fetch されるため、エンドポイント側でそのトークンを検証して HTML を返す。

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

「POS UI Extensions 2026-07 の Printing API で、拡張からレシートプリンタへダイアログ無しの直接印刷が可能に。
HTML/画像は直接印字、PDF はダイアログ必須。POS 11.11.0 未満は空配列なのでフォールバック必須。
shopify.print は非推奨だが即時対応は不要 = 2026-07 採用時にまとめて移行すればよい。」