はじめに
- Sidekick連携ってそもそも何なのか知りたい
- 自分のShopifyアプリも対応できるのか知りたい
- どういう仕組みで動いているのかを理解したい
このような方のための記事です。
この記事では、Shopify Spring '26 で追加された Sidekick app extensions の仕組みと、自分のアプリを Sidekick 対応させる流れを、コードよりも仕組みの理解を中心に解説します。実際に自社アプリで対応させたときに踏んだ注意点も、 2026年6月時点の情報としてまとめました。
そもそも Sidekick 連携とは|なぜ「対応」が必要なのか
Sidekick は Shopify 管理画面に組み込まれたAIアシスタントです。
マーチャントは質問を投げるだけで、売上の確認や設定の操作を手伝ってもらえます。
Sidekick が標準で見られるのは、注文・商品・顧客といった Shopify本体のデータだけ です。
あなたのアプリが自前のDBに持っている独自データを、Sidekick はそのままでは一切知りません。
だから「うちのアプリのお気に入りを取得して」「設定方法を教えて」に答えさせるには、アプリ側が「窓口」を用意してあげる必要があります。
それが Sidekick app extensions です。
仕組みの核心|Sidekick は「ツールを呼ぶAI」
Sidekick の中身はLLMで、function calling と呼ばれるツール呼び出しの仕組みで動いています。
あなたのアプリが実装するのは「答え」そのものではなく、道具となるツールとデータです。質問の解釈と回答文の生成は Sidekick がやってくれます。
処理の流れはこうです。
- マーチャントが自然文で質問する
- Sidekick が、どのアプリのどのツールを使うかを判断する
- サンドボックスで index.js が実行され、構造化データを返す
- Sidekick がそのデータを読んで、日本語の回答に組み立てる

LLMが見ているのは、あなたが書いた説明文と、ツールが返したデータだけです。
アプリのDBを直接見たり、SQLを叩いたりはしません。
だから説明文が雑だと、そもそもツールを呼んでもらえません。
構成要素ごとに読み手が違うので、そこを押さえると設計がブレません。
- shopify.app.toml の extensions_summary:Sidekickが「どのアプリに質問を振るか」を判断する要約
- tools.json の description:「このツールを呼ぶべきか」を判断する説明
- tools.json の inputSchema:「どんな引数で呼ぶか」の定義
- instructions.md:使い方・答え方のLLMへのガイド
- index.js が返すデータ:Sidekickが読んで回答を生成する素材
2種類の拡張|データ拡張とアクション拡張
Sidekick app extensions には大きく2種類あります。
- データ拡張:読み取り専用。「〜を取得して」「〜を検索して」に答える。一覧・統計・設定ガイドなど。target は admin.app.tools.data。
- アクション拡張:操作系。「〜を編集して」に対し、該当画面に連れて行き、マーチャントが確認して実行する。target は admin.app.intent.link。
アクション拡張は intent の type がShopify定義のスキーマ参照で、対応 type の全リストは2026年6月時点で「Coming soon」とされています。
まずは データ拡張から始める のが現実的です。
外部記事Use 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ならバックエンドをfetch、ShopifyデータならDirect APIでデータを返す。
- instructions.md:LLMへの使い方ガイド。
- 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、という役割分担は変わりません。

外部記事Use extensions to surface app data
実装でハマったポイント|2026年6月時点
実際に自社のShopifyアプリを対応させたときに踏んだ、ドキュメントだけでは分かりにくい点をまとめます。
- テンプレ名は app_data:公式ドキュメントには app_tools と書いてありますが、現行のCLIでは app_data です。app_tools を指定すると Unknown extension type エラーになります。生成後、target が admin.app.tools.data になっていれば正解です。
- extensions_summary は必須:無いと shopify app dev で「An extensions_summary is required」で起動しません。逆に言うと、このエラーが出る=拡張は認識されている、というサインでもあります。
- テーマエディタへのディープリンクは api_key:設定画面を直接開くリンクを返したい場合、activateAppId / addAppBlockId の ID は api_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 changelog
外部記事Configure theme app extensions
できること・できないこと
- できる:アプリの独自データを答えさせる、設定ガイドを返す、ディープリンクで設定画面に誘導する。
- できない:「URLを渡すだけでドキュメントを検索」という機能はありません。ドキュメント検索をさせたいなら、検索の実体は自前バックエンドで実装し、結果をツールで返します。LLMがあなたのDBを直接見ることはありません。
さいごに
Sidekick対応は「AIに道具を渡す」発想で理解すると一気にシンプルになります。
データ拡張を1つ作るところから始められ、質問のバリエーションはLLMが引数を変えて対応してくれます。
Spring '26の全体像は Shopify Spring '26 Edition 全発表まとめ 、構築者目線の要点は Spring '26 徹底解説 で解説しています。
Shopifyのアプリ開発や Sidekick 対応については、お問い合わせからお気軽にご相談ください。