← inaro.devShopify学習ツール
11-02

セクション再描画とイベント

エディタとSection Renderingの再描画に対応し、コンポーネント間をイベントで疎結合にできる

最終確認: 2026-09

解説

受託の現場でなぜ必要か: この回では、「カートが更新された」という出来事をイベントで知らせ、部品どうしを疎結合(お互いを知らなくても動く関係)にできるようになります。
受託では、自作したカートがこの通知を出さないと、定期購入やギフト系のアプリがカートの更新を検知できず動かない、という事故を防げます。

エディタの再描画に対応するには

テーマエディタは、設定を変えるたびにセクションのDOMを差し替えます。
テーマはshopify:section:load / unload / selectshopify:block:selectなどのイベントを受けて、初期化と破棄を行います。
Custom ElementならconnectedCallback / disconnectedCallbackがそのまま初期化と破棄になるので、この対応が自然に済みます。

Pub/Sub(発行と購読)とは

「カートが更新された」という出来事を1つ発行し、知りたい側がそれぞれ購読する仕組みです。
追加する側がバッジやドロワーを知らなくてよいので、部品を足しても追加処理を直さずに済みます。
Dawnはsubscribe / publishPUB_SUB_EVENTScartUpdate / variantChange / quantityUpdate)を持っています。
標準のCustomEventdocument.dispatchEvent(new CustomEvent('cart:updated', { detail })))でも同じ設計ができ、ライブラリは要りません。

差し替えたあとの状態はどうなるか

Section RenderingでDOMを置き換えると、その中に付けたリスナーや開閉の状態は消えます。
documentに付けたリスナーは残ります。
差し替える前にフォーカス位置や開いているドロワーを記録し、差し替えたあとに復元します。

発展:標準ストアフロントイベントとアクション

テーマがshopify:cart:lines-update / shopify:product:view / shopify:search:updateなどの標準イベントを発行し、アプリやAIエージェントが購読します。
逆にアプリはShopify.actions.updateCart / getCart / openCartを呼び、テーマはconfigureで自分のカートUIに接続します。
テーマのカートのマークアップを認識できない場合は、ページ全体のリロードにフォールバックします。
自前のイベント名に加えて標準イベントも発行すると、アプリとの互換性が上がります。
公開時期・対応テーマ・イベント名とdetailの形は、公式リファレンスで確認します。

ステップ1 / 2

ShopifyはShopify Inc.の商標です。本サイトは個人が制作した非公式の学習教材であり、同社の承認・提携・後援を受けていません。記載内容は2026-09時点のものです。料金・上限値・管理画面のラベルは変わるため、作業の前に公式ドキュメントで確認してください。