Shop Minis / 2026年3-4月アップデート

Shop Minis が「拒否されても動ける」
&「文脈つき起動」に進化

スコープ同意の任意化(Optional Consent)、Shop アプリからの Intents 起動、ストレージ制限、availableForSale 露出など、Mini の作り方を変える大きな更新。

このページの構成
  1. 30秒で要点 : 何が変わるのか
  2. Optional Consent : 拒否されても動ける Mini へ
  3. 新しい 3 つの Hook(スコープ/権限)
  4. Intents : 文脈付きで Mini が呼ばれる
  5. ストレージとデータ仕様の変更
  6. 廃止・その他の変更
  7. 技術者が押さえるべき5つのポイント
  8. 業務に活かせる3つのユースケース
  9. 提案で使える1行サマリ

130秒で要点 : 何が変わるのか

Shop Minis は「同意を全部もらう前提」「Explore タブからの起動前提」から、
拒否されても動く前提・文脈つきで呼ばれる前提 の SDK へとモデルが変わった。

Optional Consent

同意は全か無かではない。拒否されたスコープがあっても Mini を継続させる必要あり。新 3 hook で対応。

Shop

Intents

Shop アプリの商品ページ等から「文脈つき」で Mini を起動。try_on / view_in が現行で利用可能。

10K · 1MB

運用ガードレール

async storage に上限。localStorage/sessionStorage 廃止。availableForSale 露出で在庫整合性。

2Optional Consent : 拒否されても動ける Mini へ

ユーザー スコープ要求 product_lists:write 等 ユーザーが個別に判断 granted フル機能を表示 SaveToListButton 等 declined 代替 UI を表示 SignInPrompt 等で温存 request_blocked 再プロンプト不可 「未確認」と区別可能
従来の「同意してもらえなければ Mini を止める」設計はそのままだと動かなくなる可能性あり。ハードフェイルしている既存 Mini は新 hook で書き直す必要があるとアナウンスされている。
状態遷移は granted / declined / request_blocked の 3 値。「null(未確認)」と「request_blocked(拒否後ブロック中)」が別物になり、UI を分岐できる。

3新しい 3 つの Hook(スコープ/権限)

scope

useCheckScopesConsent : 付与済みスコープを実行時にチェック

スコープに依存する UI を条件レンダリングする時に使う。

import {useCheckScopesConsent} from '@shopify/shop-minis-react'
function MyMini() {
  const {scopes} = useCheckScopesConsent()
  if (scopes.includes('product_lists:write')) {
    return <SaveToListButton />
  }
  return <SignInPrompt />
}
scope

useRequestScopesConsent : 拒否後の再リクエスト(要ユーザー操作)

自動で再プロンプトはできない。ボタン押下など ユーザー操作起点で呼び出すことが必須

import {useRequestScopesConsent} from '@shopify/shop-minis-react'
function GrantAccessButton() {
  const {requestScopesConsent} = useRequestScopesConsent()
  return (
    <button onClick={() => requestScopesConsent(['product_lists:write'])}>
      Enable saving products
    </button>
  )
}
permission

useCheckPermissions : OS 権限(カメラ・写真など)をチェック

スコープとは別レイヤー。カメラ/フォトライブラリ等 OS 権限の有無を確認できる。

import {useCheckPermissions} from '@shopify/shop-minis-react'
function CameraFeature() {
  const {permissions} = useCheckPermissions(['camera'])
  if (permissions.camera === 'granted') {
    return <CameraView />
  }
  return <RequestCameraButton />
}
「スコープ=Shopify 機能アクセス権」「permission=OS 権限」の二層構造になった。同じ camera 機能でも、スコープと OS 権限の両方を別々にチェックする必要がある。

4Intents : 文脈付きで Mini が呼ばれる

Shop アプリの商品詳細ページなど 「買い意欲が高い瞬間」 から、コンテキスト(通常は商品)を渡しながら Mini を起動できる新しい通信レイヤー。Explore タブ以外の流入導線が開いた。
Shop App 商品詳細 Try on → View in room → intent + product useIntent() intent.action intent.productId 起動コンテキストを パースして分岐 try_on バーチャル試着 view_in AR / 部屋配置 今後追加予定 レシピ/ギフト探し カスタム構成 等

現在サポートされる Intent

Intent用途主な対象
try_on バーチャル試着の Mini 衣服・アクセサリー・身に着けるもの全般
view_in AR / 部屋配置の Mini 家具・インテリア・空間に置いて見たいもの

useIntent Hook の使い方

import {useIntent} from '@shopify/shop-minis-react'
function MyMini() {
  const intent = useIntent()
  if (intent?.action === 'try_on') {
    return <TryOn productId={intent.productId} />
  }
  return <DefaultExperience />
}
サポート対象外でも、レシピ作成・ギフト探し・カスタム構成など別のユースケースがあれば Shop Minis チームに直接連絡 することで新 intent のスコーピング対象になり得る、と明記。

5ストレージとデータ仕様の変更

10 keys 1 MB / key

Async Storage の上限

useAsyncStorage と useSecureStorage に 1 Mini あたり 10 keys / key あたり 1 MB の上限。Mini を軽量に保つため。

画像など大きいアセットは「アップロード hook で URL 化して保存」が推奨。

availableForSale を Product Hook が露出

variant に availableForSale が出るように。AddToCartButton/BuyNowButton は在庫切れ状態を自動でハンドル。カスタムカート UI を作る場合は明示チェック。

$ pnpm

CLI が pnpm をサポート

npx minis create が npm/yarn に加え pnpm を自動検出。プロジェクト作成時のプロンプトで pnpm を選択可能になった。

6廃止・その他の変更

localStorage / sessionStorage はもう使えない : Mini の webview ではブラウザストレージが許可されなくなった。Android では無効、iOS ではセッション間でリセット。ESLint が検知して flag する。useAsyncStorage(永続)または useSecureStorage(暗号化)に移行。

Package Versions

PackageVersion
@shopify/shop-minis-platform0.17.0
@shopify/shop-minis-react0.20.0
@shopify/shop-minis-cli0.3.11

その他

Lint

Phantom dep 禁止

package.json に宣言していないパッケージの import は ESLint で flag される。

Allowed

推移依存の明示許可

clsx / tailwind-merge / cva はパートナー側からの利用が明示的に許可された。

TypeScript

TS 6.0.2 へ

SDK のビルドが TypeScript 6.0.2(旧 5.8.3 から)に更新。

ドキュメント更新

Scopes Consent

shopify.dev の Scopes Consent ページが optional consent に対応。granted/declined/request_blocked の状態機械と、新 3 hook のガイダンスを掲載。

Intents

新ドキュメントページが追加。intents とは何か、現行 intent(try_on/view_in)、launch-context contract、useIntent でのパース方法をエンドツーエンドで解説。

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

3-state consent

1. consent は 3 値で扱う

granted / declined / request_blocked。とくに request_blocked は「もう聞けない」状態なので、Mini 側で 「促す UI」ではなく「説明 UI」 に切り替える設計が必要。

2. 再リクエストは「user gesture」必須

useRequestScopesConsent は ユーザー操作からしか発火できない。useEffect 等での自動再プロンプト実装はそもそも動かない仕様。

SC OS

3. スコープと OS 権限を分離して設計

同じ「カメラ機能」でも、scope(Shopify 権限)と permission(OS 権限)を別レイヤーで判定する必要がある。useCheckScopesConsent と useCheckPermissions を組み合わせる。

localStorage

4. localStorage / sessionStorage は禁止

既存コードベースの移行が必要。ESLint で機械的に検知できるため CI で fail させる運用 に組み込むのが安全。useAsyncStorage / useSecureStorage に置換。

intent

5. Intents は「分布チャネル」として扱う

Shop アプリ側の商品詳細などからの起動 = Explore タブだけに依存していた分布が広がる。useIntent で起動文脈を読んで適切な画面に飛ばす設計(ルーティング)を最初から組み込むのがよい。サポートされていない intent でも Shop Minis チームに連絡すれば新規 scoping 対象になり得るとアナウンスあり。

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

decline
USE CASE 1

既存 Mini を「同意拒否で落ちない」状態にリファクタリング

課題
これまでは「同意取れなかったら止める」前提で Mini を実装してきた。Optional Consent によって、拒否されたまま使い続けるユーザーが今後発生する。
打ち手
useCheckScopesConsent で必要スコープを実行時判定し、未付与時は代替 UI(SignInPrompt 等)にフォールバック。再付与は useRequestScopesConsent をユーザー操作起点で配置。
効果
同意拒否ユーザーの離脱を防げる + 「拒否されたら何もできない」レビュー減 + プラットフォームポリシー違反リスクを除去。
技術メモ
状態は granted / declined / request_blocked の 3 値。request_blocked では再プロンプト不可なので「なぜ必要か」を説明する UI に切り替える。
商品 Try on Mini
USE CASE 2

アパレル/家具ブランドで「文脈つき Mini」を新規導線として獲得

課題
Shop App の Explore タブ経由でしか Mini が起動されず、PDP(商品詳細)の購買温度の高いユーザーにリーチできていない。
打ち手
アパレルなら try_on、家具・インテリアなら view_in の Intent に対応した Mini を実装。useIntent で intent.productId を読み、ピンポイントの商品で AR / 試着体験を提供。
効果
購買意欲が最も高い瞬間に Mini が起動 → 試着/AR で迷いを解消 → CVR と AOV の向上を狙える新規分布チャネル。
技術メモ
サポート intent は try_on / view_in の 2 種類のみ(記載通り)。それ以外の用途は Shop Minis チームに直接コンタクトすれば新 intent の scoping 対象になり得る。
localStorage × phantom dep × storage 上限 × ESLint pass ✓
USE CASE 3

Mini 開発の CI/健全性チェックを一気に強化

課題
複数 Mini を並行で運用していて、ストレージや禁止 API の利用が時間経過とともに崩れていく。リリース後の不具合検知に時間がかかる。
打ち手
SDK 同梱の ESLint 設定で localStorage / sessionStorage と phantom dep(未宣言 import)を CI で fail に。Storage は 10 keys / 1 MB の上限を前提に key 設計を見直し、画像は URL 化保存に統一。availableForSale 必須チェックも追加。
効果
新規メンバーでも自動で違反を検知 / 在庫切れ商品の誤購入導線を撲滅 / ストア横断のコードレビュー基準が統一できる。
技術メモ
SDK は TypeScript 6 にアップ。clsx/tailwind-merge/cva は推移依存として利用許諾済み(明示記載あり)。pnpm 採用プロジェクトの新規作成も npx minis create 一本で対応可能。

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

「Shop Minis は 『同意は任意』『起動は文脈つき』 の SDK に進化。
Optional Consent 3 hook で graceful degrade、Intents(try_on / view_in)で PDP からの新導線、
Storage 上限・localStorage 廃止で運用ガードレールも強化。既存 Mini は「拒否されても動く」前提で書き直すのが今期の最優先タスク。