Shop Minis が「拒否されても動ける」 &「文脈つき起動」に進化
原題: Shop Minis March April 2026 update
- Shop Minis
- SDK
- React Hooks
- Intents
- Optional Consent
- CLI
- TypeScript
- 新機能
図解 : Shop Minis 2026年3-4月アップデート Shop Minis / 2026年3-4月アップデート Shop Minis が「拒否されても動ける」 &「文脈つき起動」に進化 スコープ同意の任意化(Optional Consent)、Shop アプリからの Intents 起動、ストレージ制限、availableForSale 露出など、Mini の作り方を変える大きな更新。 このページの構成 30秒で要点 : 何が変わるのか Optional Consent : 拒否されても動ける Mini へ 新しい 3 つの Hook(スコープ/権限) Intents : 文脈付きで Mini が呼ばれる ストレージとデータ仕様の変更 廃止・その他の変更 技術者が押さえるべき5つのポイント 業務に活かせる3つのユースケース 提案で使える1行サマリ 1 30秒で要点 : 何が変わるのか Shop Minis は「同意を全部もらう前提」「Explore タブからの起動前提」から、 拒否されても動く前提・文脈つきで呼ばれる前提 の SDK へとモデルが変わった。 Optional Consent 同意は全か無かではない。拒否されたスコープがあっても Mini を継続させる必要あり。新 3 hook で対応。 Intents Shop アプリの商品ページ等から「文脈つき」で Mini を起動。try_on / view_in が現行で利用可能。 運用ガードレール async storage に上限。localStorage/sessionStorage 廃止。availableForSale 露出で在庫整合性。 2 Optional Consent : 拒否されても動ける Mini へ 従来の「同意してもらえなければ 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 権限の両方を別々にチェックする必要がある。 4 Intents : 文脈付きで Mini が呼ばれる Shop アプリの商品詳細ページなど 「買い意欲が高い瞬間」 から、コンテキスト(通常は商品)を渡しながら Mini を起動できる新しい通信レイヤー。Explore タブ以外の流入導線が開いた。 現在サポートされる 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 ストレージとデータ仕様の変更 Async Storage の上限 useAsyncStorage と useSecureStorage に 1 Mini あたり 10 keys / key あたり 1 MB の上限。Mini を軽量に保つため。 画像など大きいアセットは「アップロード hook で URL 化して保存」が推奨。 availableForSale を Product Hook が露出 variant に availableForSale が出るように。 AddToCartButton/BuyNowButton は在庫切れ状態を自動でハンドル 。カスタムカート UI を作る場合は明示チェック。 CLI が pnpm をサポート npx minis create が npm/yarn に加え pnpm を自動検出。プロジェクト作成時のプロンプトで pnpm を選択可能になった。 6 廃止・その他の変更 localStorage / sessionStorage はもう使えない : Mini の webview ではブラウザストレージが許可されなくなった。Android では無効、iOS ではセッション間でリセット。 ESLint が検知して flag する 。useAsyncStorage(永続)または useSecureStorage(暗号化)に移行。 Package Versions Package Version @shopify/shop-minis-platform 0.17.0 @shopify/shop-minis-react 0.20.0 @shopify/shop-minis-cli 0.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つのポイント 1. consent は 3 値で扱う granted / declined / request_blocked。とくに request_blocked は「もう聞けない」状態なので、Mini 側で 「促す UI」ではなく「説明 UI」 に切り替える設計が必要。 2. 再リクエストは「user gesture」必須 useRequestScopesConsent は ユーザー操作からしか発火できない 。useEffect 等での自動再プロンプト実装はそもそも動かない仕様。 3. スコープと OS 権限を分離して設計 同じ「カメラ機能」でも、scope(Shopify 権限)と permission(OS 権限)を別レイヤーで判定する必要がある。useCheckScopesConsent と useCheckPermissions を組み合わせる。 4. localStorage / sessionStorage は禁止 既存コードベースの移行が必要。ESLint で機械的に検知できるため CI で fail させる運用 に組み込むのが安全。useAsyncStorage / useSecureStorage に置換。 5. Intents は「分布チャネル」として扱う Shop アプリ側の商品詳細などからの起動 = Explore タブだけに依存していた分布が広がる 。useIntent で起動文脈を読んで適切な画面に飛ばす設計(ルーティング)を最初から組み込むのがよい。サポートされていない intent でも Shop Minis チームに連絡すれば新規 scoping 対象になり得るとアナウンスあり。 8 業務に活かせる3つのユースケース USE CASE 1 既存 Mini を「同意拒否で落ちない」状態にリファクタリング 課題 これまでは「同意取れなかったら止める」前提で Mini を実装してきた。Optional Consent によって、拒否されたまま使い続けるユーザーが今後発生する。 打ち手 useCheckScopesConsent で必要スコープを実行時判定し、未付与時は代替 UI(SignInPrompt 等)にフォールバック。再付与は useRequestScopesConsent をユーザー操作起点で配置。 効果 同意拒否ユーザーの離脱を防げる + 「拒否されたら何もできない」レビュー減 + プラットフォームポリシー違反リスクを除去。 技術メモ 状態は granted / declined / request_blocked の 3 値。request_blocked では再プロンプト不可なので「なぜ必要か」を説明する UI に切り替える。 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 対象になり得る。 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 は「拒否されても動く」前提で書き直すのが今期の最優先タスク。 」 source : shopify.dev / changelog / shop-minis-march-april-2026-update generated 2026-05-23