Storefront API @inContext に
channelId 引数が追加
2026-10より、チャネル単位でカタログ・価格・在庫を一括制御できるように
Storefront API バージョン 2026-10 より、@inContext ディレクティブに channelId 引数が追加されました。対象は 複数のセールスチャネルを持つアプリ開発者 で、クエリ全体に特定チャネルのコンテキストを適用し、チャネルごとの商品可用性・価格をAPIレベルで自動適用できます。既存の country・language 引数と同様に任意指定で、省略時は API クライアントが所有する最初のチャネルにフォールバックします。
1Before / After 図解
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クエリ構造サンプル
※上記は元記事のサンプルコードを図解化したものです。実際の実装はShopify公式ドキュメントでご確認ください。
Source: https://shopify.dev/changelog/new-channelid-argument-for-incontext-directive-in-storefront-api-2026-10 | 公開日: 2026年7月15日





Share:
Shopifyアプリ名重複禁止:要件4.1.2の解説
ExchangeLineItemに4フィールド追加