はじめに

  • Sidekick連携ってそもそも何なのか知りたい
  • 自分のShopifyアプリも対応できるのか知りたい
  • どういう仕組みで動いているのかを理解したい

このような方のための記事です。

この記事では、Shopify Spring '26 で追加された Sidekick app extensions の仕組みと、自分のアプリを Sidekick 対応させる流れを、コードよりも仕組みの理解を中心に解説します。実際に自社アプリで対応させたときに踏んだ注意点も、 2026年6月時点の情報としてまとめました。

そもそも Sidekick 連携とは|なぜ「対応」が必要なのか

SidekickShopify 管理画面に組み込まれたAIアシスタントです。

マーチャントは質問を投げるだけで、売上の確認や設定の操作を手伝ってもらえます。

Sidekick が標準で見られるのは、注文・商品・顧客といった Shopify本体のデータだけ です。

あなたのアプリが自前のDBに持っている独自データを、Sidekick はそのままでは一切知りません。

だから「うちのアプリのお気に入りを取得して」「設定方法を教えて」に答えさせるには、アプリ側が「窓口」を用意してあげる必要があります。

それが Sidekick app extensions です。

外部記事Sidekick app extensionsSidekick app extensions

仕組みの核心|Sidekick は「ツールを呼ぶAI

Sidekick の中身はLLMで、function calling と呼ばれるツール呼び出しの仕組みで動いています。

あなたのアプリが実装するのは「答え」そのものではなく、道具となるツールとデータです。質問の解釈と回答文の生成は Sidekick がやってくれます。

処理の流れはこうです。

  1. マーチャントが自然文で質問する
  2. Sidekick が、どのアプリのどのツールを使うかを判断する
  3. サンドボックスで index.js が実行され、構造化データを返す
  4. Sidekick がそのデータを読んで、日本語の回答に組み立てる
Sidekickのツール呼び出しフロー
Sidekickのツール呼び出しフロー

LLMが見ているのは、あなたが書いた説明文と、ツールが返したデータだけです。

アプリのDBを直接見たり、SQLを叩いたりはしません。

だから説明文が雑だと、そもそもツールを呼んでもらえません。

構成要素ごとに読み手が違うので、そこを押さえると設計がブレません。

  • shopify.app.tomlextensions_summarySidekickが「どのアプリに質問を振るか」を判断する要約
  • tools.jsondescription:「このツールを呼ぶべきか」を判断する説明
  • tools.jsoninputSchema:「どんな引数で呼ぶか」の定義
  • instructions.md:使い方・答え方のLLMへのガイド
  • index.js が返すデータSidekickが読んで回答を生成する素材

2種類の拡張|データ拡張とアクション拡張

Sidekick app extensions には大きく2種類あります。

  • データ拡張:読み取り専用。「〜を取得して」「〜を検索して」に答える。一覧・統計・設定ガイドなど。targetadmin.app.tools.data
  • アクション拡張:操作系。「〜を編集して」に対し、該当画面に連れて行き、マーチャントが確認して実行する。targetadmin.app.intent.link

アクション拡張は intenttypeShopify定義のスキーマ参照で、対応 type の全リストは2026年6月時点で「Coming soon」とされています。

まずは データ拡張から始める のが現実的です。

外部記事Use extensions to surface app actionsUse extensions to surface app actions

対応の流れと「4つの構成要素」

データ拡張を例に、対応の流れを見ます。まずCLIで雛形を生成します。

shopify app generate extension --template app_data --name my-tools

スキャフォルドされたら、以下4つの役割を理解するのが近道です。

  • tools.json:ツールの宣言。名前・説明・入力スキーマを書く。Sidekickが「いつ呼ぶか」を読む部分。
  • src/index.js:ツールの実体。自前DBならバックエンドをfetchShopifyデータならDirect APIでデータを返す。
  • instructions.mdLLMへの使い方ガイド。
  • shopify.app.toml の [sidekick] extensions_summary:どのアプリに振るかの要約。

index.js は、概念だけ見ればこんな形です。ツールを登録して、結果を返すだけ。

export default async function extension() {
  shopify.tools.register("get_xxx", function (input) {
    // 自前バックエンド or Direct API からデータ取得
    return { results: [ /* resource_link の配列 */ ] };
  });
}

設定の要約は shopify.app.toml に書きます。これが無いと起動でエラーになるので必須です。

[sidekick]
extensions_summary = "このアプリのツールが何をできるかの要約"

データの出どころは2つです。自前DBのデータはバックエンド経由、Shopifyのデータは Direct API。どちらでも、検索・取得はあなた、回答の生成は Sidekick、という役割分担は変わりません。

4つの構成要素と誰が読むかマップ
4つの構成要素と誰が読むかマップ

外部記事Use extensions to surface app dataUse extensions to surface app data

実装でハマったポイント|2026年6月時点

実際に自社のShopifyアプリを対応させたときに踏んだ、ドキュメントだけでは分かりにくい点をまとめます。

  • テンプレ名は app_data:公式ドキュメントには app_tools と書いてありますが、現行のCLIでは app_data です。app_tools を指定すると Unknown extension type エラーになります。生成後、targetadmin.app.tools.data になっていれば正解です。
  • extensions_summary は必須:無いと shopify app dev で「An extensions_summary is required」で起動しません。逆に言うと、このエラーが出る=拡張は認識されている、というサインでもあります。
  • テーマエディタへのディープリンクは api_key:設定画面を直接開くリンクを返したい場合、activateAppId / addAppBlockIdIDapi_key、つまり client_id を使います。古い資料にある uuid は廃止予定です。
  • TypeScriptの型エラーは実害なしCannot find name shopify のような型エラーが出ますが、shopify は実行時にサンドボックスが注入するグローバルなので、ビルド・実行には影響しません。気になれば型定義に declare const shopify を足せば消えます。
  • CLIは最新にapp_data テンプレが無い場合はCLIが古い可能性があるので、アップデートしてから再度 generate します。

外部記事Sidekick app extensions available today - Shopify developer changelogSidekick app extensions available today - Shopify developer changelog

外部記事Configure theme app extensionsConfigure theme app extensions

できること・できないこと

  • できる:アプリの独自データを答えさせる、設定ガイドを返す、ディープリンクで設定画面に誘導する。
  • できない:「URLを渡すだけでドキュメントを検索」という機能はありません。ドキュメント検索をさせたいなら、検索の実体は自前バックエンドで実装し、結果をツールで返します。LLMがあなたのDBを直接見ることはありません。

さいごに

Sidekick対応は「AIに道具を渡す」発想で理解すると一気にシンプルになります。

データ拡張を1つ作るところから始められ、質問のバリエーションはLLMが引数を変えて対応してくれます。

Spring '26の全体像は Shopify Spring '26 Edition 全発表まとめ 、構築者目線の要点は Spring '26 徹底解説 で解説しています。

Shopifyのアプリ開発や Sidekick 対応については、お問い合わせからお気軽にご相談ください。