Storefront API

Storefront API @inContext に
channelId 引数が追加

2026-10より、チャネル単位でカタログ・価格・在庫を一括制御できるように

@inContext (〜2026-07)countrylanguagepresentmentCurrencies@inContext (2026-10〜)country / languagepresentmentCurrencies✦ channelId (NEW)チャネル固有価格 / 在庫カタログルール

Storefront API バージョン 2026-10 より、@inContext ディレクティブに channelId 引数が追加されました。対象は 複数のセールスチャネルを持つアプリ開発者 で、クエリ全体に特定チャネルのコンテキストを適用し、チャネルごとの商品可用性・価格をAPIレベルで自動適用できます。既存の country・language 引数と同様に任意指定で、省略時は API クライアントが所有する最初のチャネルにフォールバックします。

1Before / After 図解

BEFORE (〜2026-07)AFTER (2026-10〜)query @inContext( country: $country) { product { ... } }⚠ チャネル判定はアプリ側ロジックで対応query @inContext( country: $country, channelId: $channelId) { product { ... } }取得結果・デフォルトチャネルの価格/在庫・チャネル差異はアプリ側で処理→ カスタムロジックが複雑化しやすい取得結果・指定チャネルの価格/在庫を直接取得・マーチャンダイジングルールも適用済み→ APIがチャネル差異を自動解決

2業務に活かせるユースケース

課題
マーケットプレイス向けチャネルとDtoCチャネルで価格が異なるが、同じStorefront APIクライアントで両方を参照すると価格が混在してしまう
打ち手
クエリ変数としてchannelIdを切り替えるだけで、各チャネルに紐づく正確な価格を返すよう実装する
効果
チャネル間の価格混在バグをAPIレベルで排除し、アプリ側の条件分岐コードを削減できる
技術メモ
渡せるのは「そのAPIクライアント自身が作成したチャネルのID」のみ。他クライアント所有チャネルのIDは不可
課題
BtoBチャネルと一般向けチャネルで取り扱いSKUが異なり、BtoB向けストアフロントに不要な商品が表示される
打ち手
@inContext(channelId: $btobChannelId)を指定することで、BtoBチャネルに公開されている商品のみがavailableForSaleなどに反映される
効果
カタログフィルタリングのカスタムロジック不要。チャネルのカタログ設定をそのままストアフロントに反映できる
技術メモ
channelIdを省略した場合はAPIクライアントが所有する最初のチャネルにフォールバックするため、複数チャネル所有時は明示的に指定することを推奨
課題
ヘッドレスコマース構成で複数ブランドのストアを1つのNext.jsアプリで管理しており、ブランドごとに異なるチャネルを使用している
打ち手
リクエスト時にブランドコンテキストからchannelIdを動的に解決し、@inContextに渡すことで単一コードベースで複数ブランドのカタログ・価格を出し分ける
効果
ブランドごとに個別のStorefront APIクライアントを用意する必要がなく、運用コストを削減できる
技術メモ
channelIdはGraphQL変数として渡す実装が推奨。クエリ文字列への直接埋め込みは避けセキュリティリスクを低減する

3技術者が押さえるべきポイント

項目 詳細 ステータス
対応APIバージョン Storefront API 2026-10 以降 新機能
引数の必須/任意 任意(optional)。省略時はAPIクライアント所有の最初のチャネルにフォールバック 後方互換
アクセス制限 渡せるchannelIdは「そのAPIクライアント自身が作成したチャネル」のIDのみ。他クライアント所有のIDはエラーになる可能性あり 要注意
適用スコープ クエリ全体に適用。商品可用性・価格・マーチャンダイジングルールが対象。フィールド単位での上書きは記載なし クエリ全体
既存引数との関係 country・languageなど既存の@inContext引数と併用可能。それぞれ独立して動作 併用可
移行・影響範囲 channelIdを省略しても挙動は変わらないため既存クエリへの影響なし。複数チャネル利用アプリのみ対応を検討 既存影響なし

4クエリ構造サンプル

query Product($handle: String!, $channelId: ID!) @inContext(channelId: $channelId) { product(handle: $handle) { id title availableForSale priceRange { minVariantPrice { amount currencyCode } } }}← channelIdをここで指定← チャネル固有の価格が返る

※上記は元記事のサンプルコードを図解化したものです。実際の実装はShopify公式ドキュメントでご確認ください。

「Storefront API 2026-10のchannelId対応により、マーケットプレイス・BtoB・複数ブランドなど多チャネル構成のアプリでチャネルごとの正確な価格・在庫・カタログをAPIレベルで取得でき、カスタムロジックの削減と保守性向上を同時に実現できます。」

Source: https://shopify.dev/changelog/new-channelid-argument-for-incontext-directive-in-storefront-api-2026-10 | 公開日: 2026年7月15日