AI時代の記事執筆・更新・改善フロー|AIエージェントとCMSを連携した実運用
VIEW →
Shopifyのサイトリニューアルでは、テーマを実装するだけでなく、管理画面でページを作成し、URLやメニューを設定する作業も発生します。
ページ数が増えると、ページ名やURLを一件ずつ入力し、メニューへリンクを登録するだけでも時間がかかります。テーマ側で決めた情報を管理画面へ繰り返し入力するため、入力間違いや設定漏れも起きやすくなります。
そこで、管理画面作業を減らす方法として、CLI実行権限を持つAIコーディングエージェントとShopify CLIを組み合わせました。AIにテーマコードを書かせるだけでなく、ページの作成とメニューの更新まで実行させています。
テーマ実装とストア設定に同じページ情報を使うことで、管理画面への再入力を減らせました。実際の作業では、リンク間違いや設定漏れも発生していません。
この記事では、AIコーディングエージェントとShopify CLIを使って、テーマ開発と管理画面設定を連携した方法と、その効果を紹介します。
ページ構成とURL設計は人が先に決め、AIコーディングエージェントが同じページ定義からテーマファイルとGraphQLの入力を作成しました。そのうえで、Shopify CLIからAdmin GraphQL APIを実行し、ストア側の設定へ反映しています。
実施した内容は、次の4点です。
pageCreateで複数のページを作成menusで既存メニューを取得し、menuUpdateでナビゲーションを更新ポイントは、ページタイトル、ハンドル、テンプレートサフィックス、メニュー項目のリンク先を一つのページ定義で管理したことです。AIはその定義を使い、テーマファイルとGraphQLの入力を作成しました。
これにより、管理画面を何度も行き来して同じ情報を入力する作業が減り、ローカルの実装とストア上の設定を合わせやすくなりました。
対象となった環境は次のとおりです。
項目 | 内容 |
|---|---|
Shopify | Online Store 2.0 |
開発方法 | ローカルでのテーマ開発 |
主なテーマ技術 | Liquid、JSONテンプレート、セクション、ブロック |
AIの実行環境 | CLIを操作できるAIコーディングエージェント |
Shopifyとの接続 | Shopify CLI |
ストアデータの操作 | Admin GraphQL API |
ページ | 複数のページ(Page) |
テンプレート | ページごとのJSONテンプレート |
構造化データ | メタオブジェクト、メタフィールド |
Shopify公式ドキュメントでは、Online Store 2.0の多くの機能がJSONテンプレートを利用し、各ページでセクションを追加・削除・並べ替えられる仕組みになっています。実装では、ページごとのJSONテンプレートと管理画面上のページを対応させる構成を採用しました。
参考:Online Store 2.0|Shopify公式ドキュメント
Shopifyでは、ローカルのテーマ開発とストア管理画面の設定が分かれています。LiquidやJSONテンプレートを実装しても、管理画面上のページやナビゲーションメニューは自動では作成されません。
管理画面側では、ページごとに次の作業が必要です。
一方、テーマ側ではページ用のセクションとJSONテンプレートを実装し、Liquidからメタオブジェクトやメタフィールドを参照します。管理画面側の設定とテーマ側の実装を照合しながら進める必要がありました。
たとえば、ローカルでpage.service-a.jsonを作成しても、管理画面側のページハンドルがservice-bになっていれば、想定したURLとテンプレートの関係は崩れます。メニューのURLを手入力すれば、タイプミスや古いハンドルも残ります。
ページ数が増えるほど、管理画面での入力と、テーマコードとの照合作業に時間がかかります。
そこで、ページタイトル、ハンドル、テンプレートサフィックス、メニュー項目を構造化し、その情報をもとにAIがテーマファイルとGraphQLの入力を組み立てる形にしました。
2026年8月時点で、Shopify CLIのstore executeコマンドは、認証済みのストアに対してAdmin GraphQL APIのクエリとミューテーションを実行できます。公式仕様では、先にshopify store authで認証し、ストアを書き換える場合は--allow-mutationsを明示します。
参考:store execute|Shopify CLI公式ドキュメント
Admin GraphQL APIの実行では、AIコーディングエージェントがGraphQLと変数を組み立て、Shopify CLIから実行しました。コマンドの形を単純化すると、次のようになります。
shopify store execute \
--store your-store.myshopify.com \
--query-file ./operations/page-create.graphql \
--variable-file ./operations/page.json \
--allow-mutations
認証情報や実際のストアドメインはコマンドや原稿へ直接書かず、AIには対象ストアと実行する操作を限定して渡します。更新前に現在のデータを取得し、更新後にレスポンスとストア上の状態を再取得する流れにすると、AIが何を変更したのかを確認できます。
最初に、各ページのタイトル、ハンドル、対応するカスタムテンプレートのサフィックスを決めました。その一覧をもとに、AIがpageCreateミューテーションを実行し、Shopify上へページを作成しています。
pageCreateは、Shopifyのページ(Page)を作成するAdmin GraphQL APIです。タイトルとハンドルに加え、本文、公開状態、カスタムテンプレートのサフィックスも入力できます。
参考:pageCreate|Shopify Admin GraphQL API
構造を単純化したGraphQLは次のようになります。
mutation CreatePage($page: PageCreateInput!) {
pageCreate(page: $page) {
page {
id
title
handle
templateSuffix
}
userErrors {
code
field
message
}
}
}
複数ページ分の入力データを用意し、各ページに対してpageCreateを実行しました。ここでいう「まとめて作成」は、AIがページ一覧から複数回の作成処理を進めたという意味で、ShopifyのBulk Operationsを使った一括ミューテーションではありません。
APIのレスポンスからページID、タイトル、ハンドル、userErrorsを確認できるため、管理画面を開いて一件ずつ登録するよりも、作成結果を構造化されたデータとして追いやすくなりました。
ページを作成したあと、menusクエリでストアに登録されているナビゲーションメニューを取得しました。その結果をもとに、menuUpdateでリンク構造を更新しています。
menusではメニューのID、ハンドル、タイトル、階層化されたメニュー項目を取得できます。menuUpdateは、メニューのタイトルと項目構造を更新するミューテーションです。
参考:menus|Shopify Admin GraphQL API / menuUpdate|Shopify Admin GraphQL API
メニューの更新では、いきなり新しい構造を書き込まず、最初に現在のメニューを読み取りました。そのうえで、pageCreateの実行後に返された情報と、コード側で決めたリンク構造を組み合わせて更新しています。
この順番にしたことで、既存項目を確認したうえで、追加・変更する内容を整理できました。ページハンドルとメニューURLを別々に手入力していないため、コード側で定義したハンドルとナビゲーションのリンク先が直接一致します。
ShopifyのJSONテンプレートは、表示するセクションと、その設定値を保持するデータファイルです。テーマエディタでは、JSONテンプレートに定義されたセクションをもとに並べ替えや設定変更を行えます。
参考:JSON templates|Shopify公式ドキュメント
ページの一覧と対応させながら、各ページ用のJSONテンプレートも自動作成しました。テンプレート内には、ページの初期表示に必要なセクションとブロック、設定値を入れています。
作業の流れは次のとおりです。
pageCreateでページを作成するテーマ側と管理画面側で同じページ定義を使うため、「テンプレートはあるがページがない」「ページはあるがメニューから到達できない」といった状態を防ぎやすくなりました。
ページに表示するデータをテンプレート内へ直接書くと、内容を変更するたびにテーマコードの修正が必要になります。そこで、データをメタオブジェクトとメタフィールドで管理し、Liquid側で対象データを動的に解決して表示するロジックを実装しました。
メタフィールドは、商品やページなどのShopifyリソースへ追加できるカスタムフィールドです。複数の関連フィールドを持つ独立したデータは、メタオブジェクトとして定義できます。Liquidでは、メタオブジェクトのタイプとハンドルを使って対象エントリーを参照できます。
参考:About metafields|Shopify公式ドキュメント / metaobject Liquid object|Shopify公式ドキュメント
Liquid側では、表示対象となるメタオブジェクトのエントリーやメタフィールド値を自動解決する形にしました。ページごとに同じマークアップを複製せず、共通のセクションから該当データを表示できます。
メタオブジェクト連携では、メタオブジェクトやメタフィールド自体の作成ではなく、登録済みのデータをテーマ側で動的に参照し、ページごとの表示へ連動させる部分を検証しました。
ページを一件ずつ作成し、ページタイトルとハンドルを確認しながらメニューへURLを貼り付ける作業が不要になりました。
AIコーディングエージェントがローカルのページ定義を読み取り、そのままGraphQLの入力へ変換するため、テーマを編集する画面とShopify管理画面を何度も往復せずに進められました。
コード側で定義したページハンドルを、pageCreateの入力とメニュー項目のリンク先に再利用しました。
人が同じ文字列を複数の場所へ入力する工程を減らしたことで、実際の作業ではリンク間違いや設定漏れが起きませんでした。ページ数が増えるほど、この一致を機械的に保てる効果は大きいと感じています。
これまでのAIコーディングは、Liquid、JavaScript、CSS、JSONテンプレートなどのファイル生成が中心でした。AIにAdmin GraphQL APIも実行させることで、Shopify側の初期データと設定まで進めています。
AIが作ったコードを人が管理画面へ転記するのではなく、決めた構造をAPI経由でストアへ反映する。ここまでを一つの作業として扱えることに、実務上の価値がありました。
記事制作でも、AIエージェントからCMSの取得・更新までつなげる運用を試しています。詳しくは「AIエージェントとCMSを連携した記事運用」で紹介しています。
AIからShopifyを操作できるようにする場合、実装方法より先に、変更範囲と確認手順を決めておく必要があります。
テーマ開発と管理画面設定を連携する場合は、次の順番にすると変更内容を追いやすくなります。
userErrorsと返却されたID・ハンドルを確認するshopify store executeはミューテーションが初期状態で無効になっており、書き込みには--allow-mutationsが必要です。このオプションを使い、読み取りと書き込みを分けて扱います。
また、AIへ渡す権限は、ページやナビゲーションメニューの操作に必要なスコープへ限定します。ストアドメイン、アクセストークン、顧客情報などを、記事、リポジトリ、AIへの不要な入力へ含めないことも前提です。
Shopify CLIのstore executeからAdmin GraphQL APIのクエリとミューテーションを実行できます。事前にshopify store authで対象ストアを認証し、必要なアクセススコープを設定します。書き込み時は--allow-mutationsが必要です。
shopify theme pushは、Liquid、JSON、CSS、JavaScriptなどのテーマファイルをストアへ反映するコマンドです。shopify store executeはAdmin GraphQL APIを実行し、ページやナビゲーションメニューなどのストアデータを取得・更新します。テーマ開発とストア設定を一つの流れで進める場合は、役割を分けて使います。
参考:theme push|Shopify CLI公式ドキュメント
AIが実行する対象、アクセススコープ、確認手順を決めたうえで使います。特に、現在データの取得、変更内容の確認、userErrorsの確認、更新後の再取得を一つの流れにします。ページ削除、商品や顧客データの変更、公開テーマへの反映など、影響の大きい操作は別の承認工程に分ける設計が必要です。
数ページだけを一度作る場合は、管理画面での手入力の方が早いこともあります。ページ数が多い、同じ構成を複数ストアへ展開する、ページハンドルとメニューリンクを厳密にそろえたい、設定を再実行できる形で残したい場合は、API連携の効果が大きくなります。
AIコーディングエージェントとShopify CLIを使い、テーマ開発とストア管理画面の設定を一つの流れで進めました。
具体的には、pageCreateによるページの作成、menusとmenuUpdateによるナビゲーション更新、ページごとのJSONテンプレート作成、メタオブジェクト・メタフィールドのLiquid連携を行っています。
コード側で定義したページハンドルを、pageCreateの入力とメニュー項目のリンク先へ直接つなげたことで、管理画面での再入力が減り、実際の作業ではリンク間違いや設定漏れも起きませんでした。
AIコーディングの効果は、コードを早く書くことだけではありません。CLIとAPIを安全に実行できる環境を用意すれば、テーマ実装とプラットフォーム側の設定を一つの流れとして進められます。
