Shopify Vite Plugin でテーマ拡張機能の開発体験を改善する

Shopify Vite Plugin でテーマ拡張機能の開発体験を改善する

今回は Barrel が提供する Shopify Vite Plugin を導入して、テーマ拡張機能の開発体験を改善する方法をご紹介します。

対象読者

テーマ拡張機能の開発経験がある方

はじめに

Shopifyのテーマ拡張機能 (Theme app extensions) はShopify アプリ開発において、ストアフロントに機能を追加するための機能です。

Liquid、JavaScript、CSSなどを使って開発することができますが、通常のアプリ開発と比較すると、ローカルでの開発体験はそれほどよくありません。

そこで、今回は Shopify Vite Plugin を導入して、開発体験を改善していきます。

Shopify Vite Plugin とは

Barrel が提供する Vite用プラグインです。ViteをShopify テーマ開発に組み込んで開発体験を改善することを目的として作られていますが、テーマ拡張機能においてもその恩恵を受けることができます。

主な機能は、ViteでビルドしたスクリプトなどをLiquidから簡単に利用することができます。また、ホットリロードにも対応することができます。(単純にViteを組み込むだけだとスクリプトのホットリロードが難しい)

Shopify テーマ拡張機能向けのサンプルプロジェクト集も用意されています。

以降は、公式が用意しているサンプルプロジェクトを元に導入をしていきます。

Shopify Vite Plugin のインストール

環境

  • node: v18.12.0
  • npm: v8.19.2 (pnpmでもyarnでも大丈夫です)

テーマ拡張機能のディレクトリがある前提で進めますので、ない方はShopifyの公式ドキュメントを参考に作成してください。

素のテーマ拡張機能のディレクトリ (例: extensions/theme-extension) に各種パッケージを導入していくため、まずは npm init を実行します。

続いて必要なパッケージをインストールします。

npm i -D vite vite vite-plugin-page-reload vite-plugin-shopify

vite.config.js の設定

テーマ拡張機能のディレクトリに vite.config.js ファイルを作成します。

import { defineConfig } from 'vite'
import pageReload from 'vite-plugin-page-reload'
import shopify from 'vite-plugin-shopify'

export default defineConfig({
  plugins: [
    shopify(),
    pageReload('/tmp/extension.update', {
      delay: 1800,
    }),
  ],
})

.shopifyignore の設定

テーマ拡張機能のディレクトリに .shopifyignore ファイルを作成します。

テーマ拡張機能のデプロイ (shopify app deploy) 時に、テーマ拡張機能と関係のないディレクトリやファイル類があるとエラーが発生するため、以下のディレクトリやファイルを無視するように指定してします。

assets/*.json
frontend/
node_modules/
package.json
vite.config.js

実際に使ってみる

エントリーポイントの作成

  1. テーマ拡張機能のディレクトリに frontend/entrypoints ディレクトリを作成します
  2. 上記のディレクトリ内に entry.js ファイルを作成します
  3. entry.js ファイルに Hello World を表示するコードを記載します
function listener() {
  const helloWorld = document.createElement('p')
  helloWorld.textContent = 'Hello World'
  document.body.insertBefore(helloWorld, document.body.firstChild)
}

const options = { passive: true, once: true }
document.addEventListener('DOMContentLoaded', listener, options)

エントリーポイントを呼び出す

素のテーマ拡張機能のディレクトリに元からある blocks/star_rating.liquid の最上部に下記を追記します。

{% liquid
  render 'vite-tag' with 'entry.js'
-%}

テーマ拡張機能をプレビューする

テーマ拡張機能のディレクトリで vite を実行し、いつものようにテーマ拡張機能のプレビューを実行します。

ページ上部に Hello World が表示されることを確認できたら、entry.js のコードを変更してみましょう。ホットリロードで変更が反映されることを確認できたらOKです!

まとめ

Shopify Vite Plugin の導入方法を必要最小限でご紹介しましたがいかがでしたか?

公式のサンプルプロジェクトではPreactを使っているように、中規模から大規模なテーマ拡張機能を開発するときにとても役立つと思います。

弊社のアプリにも積極的に採用していきたいと思いました。

ブログに戻る
1 6
  • Shopify Polarisとは? 効率的なShopifyアプリ開発に!

    Shopify Polarisとは? 効率的なShopifyアプリ開発に!

    Tsunライターチーム

    Shopify Polarisは、Shopifyのエコシステムにおいて重要な役割を果たす包括的なデザインシステムです。本記事では、Shopify Polarisの概要やメリット、デメリット、Polarisを活用したShopifyアプリの事例、Shopify Polarisを使用する際のヒントとコツを紹介します。

    Shopify Polarisとは? 効率的なShopifyアプリ開発に!

    Tsunライターチーム

    Shopify Polarisは、Shopifyのエコシステムにおいて重要な役割を果たす包括的なデザインシステムです。本記事では、Shopify Polarisの概要やメリット、デメリット、Polarisを活用したShopifyアプリの事例、Shopify Polarisを使用する際のヒントとコツを紹介します。

  • 【Tips】Shopify の GraphQL Admin API で顧客総数を取得する

    【Tips】Shopify の GraphQL Admin API で顧客総数を取得する

    小笠原 京平

    Shopifyの GraphQL Admin API の小ネタです。 Shopifyの顧客総数を取得したい場合のクエリは、いざ探そうと思ってもパッと見つからないのでメモしておきます。 対象読者 Shopify GraphQL Admin API を使ったことがある方 顧客総数を取得するクエリ 2023-07 バージョンから CustomerSegmentMemberConnection に変更があったため、2023-07より前と以降で若干クエリが異なります。 ※ changelog 2023-07以降 { customerSegmentMembers(first: 1, query: "") { totalCount } } 2023-07より前...

    【Tips】Shopify の GraphQL Admin API で顧客総数を取得する

    小笠原 京平

    Shopifyの GraphQL Admin API の小ネタです。 Shopifyの顧客総数を取得したい場合のクエリは、いざ探そうと思ってもパッと見つからないのでメモしておきます。 対象読者 Shopify GraphQL Admin API を使ったことがある方 顧客総数を取得するクエリ 2023-07 バージョンから CustomerSegmentMemberConnection に変更があったため、2023-07より前と以降で若干クエリが異なります。 ※ changelog 2023-07以降 { customerSegmentMembers(first: 1, query: "") { totalCount } } 2023-07より前...

  • Shopify Vite Plugin でテーマ拡張機能の開発体験を改善する

    Shopify Vite Plugin でテーマ拡張機能の開発体験を改善する

    小笠原 京平

    今回は Barrel が提供する Shopify Vite Plugin を導入して、テーマ拡張機能の開発体験を改善する方法をご紹介します。 対象読者 テーマ拡張機能の開発経験がある方 はじめに Shopifyのテーマ拡張機能 (Theme app extensions) はShopify アプリ開発において、ストアフロントに機能を追加するための機能です。 Liquid、JavaScript、CSSなどを使って開発することができますが、通常のアプリ開発と比較すると、ローカルでの開発体験はそれほどよくありません。 そこで、今回は Shopify Vite Plugin を導入して、開発体験を改善していきます。 Shopify Vite Plugin とは Barrel が提供する Vite用プラグインです。ViteをShopify テーマ開発に組み込んで開発体験を改善することを目的として作られていますが、テーマ拡張機能においてもその恩恵を受けることができます。...

    Shopify Vite Plugin でテーマ拡張機能の開発体験を改善する

    小笠原 京平

    今回は Barrel が提供する Shopify Vite Plugin を導入して、テーマ拡張機能の開発体験を改善する方法をご紹介します。 対象読者 テーマ拡張機能の開発経験がある方 はじめに Shopifyのテーマ拡張機能 (Theme app extensions) はShopify アプリ開発において、ストアフロントに機能を追加するための機能です。 Liquid、JavaScript、CSSなどを使って開発することができますが、通常のアプリ開発と比較すると、ローカルでの開発体験はそれほどよくありません。 そこで、今回は Shopify Vite Plugin を導入して、開発体験を改善していきます。 Shopify Vite Plugin とは Barrel が提供する Vite用プラグインです。ViteをShopify テーマ開発に組み込んで開発体験を改善することを目的として作られていますが、テーマ拡張機能においてもその恩恵を受けることができます。...

  • Shopify Admin API GraphiQLとは? 使い方やメリット・デメリットを解説

    Shopify Admin API GraphiQLとは? 使い方やメリット・デメリットを解説します

    小笠原 京平

    ShopifyのAdmin APIにはGraphQLを用いたAPIがあります。手軽に試す方法としてGraphiQL (GraphQLではなくGraphiQLなのに注意) というIDEがありますので、今回はShopify GraphiQLの使い方やメリット・デメリットを解説します。 GraphiQLとは GraphQL公式が運営しているオープンソースプロジェクトです。GraphQLをブラウザ上でインタラクティブに操作・実行することができます。 グラフィカル (/ˈɡrafək(ə)l/) と発音します。(graphicalと同じ発音) GraphQLとは GraphQLはAPIのためのクエリ言語であり、既存のデータでクエリを実行するためのランタイムです。 GraphQLはAPI内のデータの完全で理解しやすい説明を提供し、クライアントに必要なものだけを要求する力を与え、APIを長期的に進化させることを容易にし、強力な開発者ツールを可能にします。 引用: GraphQL | A query language for your API Shopify GraphiQLの使い方 Shopify GraphiQLは各ストアにアプリをインストールするだけで使えますが、Shopify Devサイト上でデモを触れるので、まずは触ってみましょう! https://shopify.dev/docs/apps/tools/graphiql-admin-api Workshopをやってみよう! Shopifyが作成した「Learn...

    Shopify Admin API GraphiQLとは? 使い方やメリット・デメリットを解説します

    小笠原 京平

    ShopifyのAdmin APIにはGraphQLを用いたAPIがあります。手軽に試す方法としてGraphiQL (GraphQLではなくGraphiQLなのに注意) というIDEがありますので、今回はShopify GraphiQLの使い方やメリット・デメリットを解説します。 GraphiQLとは GraphQL公式が運営しているオープンソースプロジェクトです。GraphQLをブラウザ上でインタラクティブに操作・実行することができます。 グラフィカル (/ˈɡrafək(ə)l/) と発音します。(graphicalと同じ発音) GraphQLとは GraphQLはAPIのためのクエリ言語であり、既存のデータでクエリを実行するためのランタイムです。 GraphQLはAPI内のデータの完全で理解しやすい説明を提供し、クライアントに必要なものだけを要求する力を与え、APIを長期的に進化させることを容易にし、強力な開発者ツールを可能にします。 引用: GraphQL | A query language for your API Shopify GraphiQLの使い方 Shopify GraphiQLは各ストアにアプリをインストールするだけで使えますが、Shopify Devサイト上でデモを触れるので、まずは触ってみましょう! https://shopify.dev/docs/apps/tools/graphiql-admin-api Workshopをやってみよう! Shopifyが作成した「Learn...

  • ブログ記事 Shopifyの必須Webhooks (Mandatory Webhooks)とは? GDPRや対応例など

    Shopifyの必須Webhooks (Mandatory Webhooks)とは? GDPR...

    小笠原 京平

    今回はShopifyアプリ開発を始めたときに詰まるポイントの1つ「必須Webhooks」について解説します。実装をしていなかったり、実装が不十分なためにレビューが通らなかった経験をされた方は多いんじゃないでしょうか?レビューで詰まらないためにも、ぜひご確認ください! Webhooksとは? Shopifyの必須Webhooksを説明する前に、Webhooksについて理解しましょう。Webhooksとは、Webアプリケーションと連携するために用いられるイベント通知の仕組みです。Webhooksを使うことで、あるWebアプリケーションで特定のイベントが起きたときに、データを受け取ったり、何かしらの動作をすることが可能になります。 エンジニアにとって身近な例でいうと、GitHubにコードをプッシュしたときに自動でビルドやテストをするときにWebhooksが使われています。 ShopifyのWebhooks そんなWebhooksはShopifyでも使うことができます。Shopifyアプリ開発では、Shopify Admin APIからWebhooksを使うことができます。また、アプリ以外でもShopify管理画面からWebhookを作成することもできます。 ShopifyのWebhooksにはHTTPSのエンドポイントのほか、Amazon EventBridgeやGoogle Cloud Pub/Subといったメッセージングサービスを使うこともできます。購読するイベントやマーチャントによっては瞬間的に大量のWebhooksを処理する必要があるため、スケールさせやすいメッセージングサービスを使ってWebhooksを処理することをおすすめします。 必須Webhooks (Mandatory Webhooks) とは? 必須Webhooksとは、Shopifyアプリを開発するときに必ず実装しなければならない3つのWebhooksのことです。この3つのWebhooksはGDPRに対応するために必要なWebhooksで、EU加盟国に関わらず、すべてのShopifyアプリはGDPRに準拠しなければなりません。必須Webhooksを実装していない場合、アプリレビューで却下されます。 (3つの必須Webhooks以外のWebhooksは任意で実装すればOKです。) また、必須Webhooksの3つはHTTPSのエンドポイントでのみ作成可能です。上述したEventBridgeやPub/Subを利用することはできません。 GDPRとは? GDPR(General Data Protection Regulation:一般データ保護規則)は、ヨーロッパ連合(EU)の個人情報保護法規で、2018年5月25日から施行されています。これは、EU全域での個人情報のプライバシーを保護し、データの取り扱い方に関して個々の人々により多くの制御権を付与するためのものです。 GDPRは、EU市民または居住者の個人データを処理する全ての組織に適用されます。これには、EU内外の組織も含まれ、EUの市民や居住者のデータを処理する場合、世界のどこにその組織があろうともGDPRの規定を守る必要があります。 GDPRの主な目的は、個人が自分の個人データをどのように収集、保存、使用されるのかを知り、そしてその制御をする権利を持つべきであるという考え方を強化し、統一化することです。これは、個人情報の透明性、アクセスの権利、修正の権利、忘れられる権利(データ削除の権利)、データ移行の権利など、いくつかの重要な権利を個々の人々に付与します。 参考: ChatGPT 必須Webhooksの対応例 上記で説明したように、必須WebhooksとはGDPRに準拠するためのWebhooksなので、顧客情報、ストア情報をデータベースなどに保存しているかどうかで対応方法が変わります。...

    Shopifyの必須Webhooks (Mandatory Webhooks)とは? GDPR...

    小笠原 京平

    今回はShopifyアプリ開発を始めたときに詰まるポイントの1つ「必須Webhooks」について解説します。実装をしていなかったり、実装が不十分なためにレビューが通らなかった経験をされた方は多いんじゃないでしょうか?レビューで詰まらないためにも、ぜひご確認ください! Webhooksとは? Shopifyの必須Webhooksを説明する前に、Webhooksについて理解しましょう。Webhooksとは、Webアプリケーションと連携するために用いられるイベント通知の仕組みです。Webhooksを使うことで、あるWebアプリケーションで特定のイベントが起きたときに、データを受け取ったり、何かしらの動作をすることが可能になります。 エンジニアにとって身近な例でいうと、GitHubにコードをプッシュしたときに自動でビルドやテストをするときにWebhooksが使われています。 ShopifyのWebhooks そんなWebhooksはShopifyでも使うことができます。Shopifyアプリ開発では、Shopify Admin APIからWebhooksを使うことができます。また、アプリ以外でもShopify管理画面からWebhookを作成することもできます。 ShopifyのWebhooksにはHTTPSのエンドポイントのほか、Amazon EventBridgeやGoogle Cloud Pub/Subといったメッセージングサービスを使うこともできます。購読するイベントやマーチャントによっては瞬間的に大量のWebhooksを処理する必要があるため、スケールさせやすいメッセージングサービスを使ってWebhooksを処理することをおすすめします。 必須Webhooks (Mandatory Webhooks) とは? 必須Webhooksとは、Shopifyアプリを開発するときに必ず実装しなければならない3つのWebhooksのことです。この3つのWebhooksはGDPRに対応するために必要なWebhooksで、EU加盟国に関わらず、すべてのShopifyアプリはGDPRに準拠しなければなりません。必須Webhooksを実装していない場合、アプリレビューで却下されます。 (3つの必須Webhooks以外のWebhooksは任意で実装すればOKです。) また、必須Webhooksの3つはHTTPSのエンドポイントでのみ作成可能です。上述したEventBridgeやPub/Subを利用することはできません。 GDPRとは? GDPR(General Data Protection Regulation:一般データ保護規則)は、ヨーロッパ連合(EU)の個人情報保護法規で、2018年5月25日から施行されています。これは、EU全域での個人情報のプライバシーを保護し、データの取り扱い方に関して個々の人々により多くの制御権を付与するためのものです。 GDPRは、EU市民または居住者の個人データを処理する全ての組織に適用されます。これには、EU内外の組織も含まれ、EUの市民や居住者のデータを処理する場合、世界のどこにその組織があろうともGDPRの規定を守る必要があります。 GDPRの主な目的は、個人が自分の個人データをどのように収集、保存、使用されるのかを知り、そしてその制御をする権利を持つべきであるという考え方を強化し、統一化することです。これは、個人情報の透明性、アクセスの権利、修正の権利、忘れられる権利(データ削除の権利)、データ移行の権利など、いくつかの重要な権利を個々の人々に付与します。 参考: ChatGPT 必須Webhooksの対応例 上記で説明したように、必須WebhooksとはGDPRに準拠するためのWebhooksなので、顧客情報、ストア情報をデータベースなどに保存しているかどうかで対応方法が変わります。...

  • Shopifyアプリの課金ってどうやるの? 課金方法とサブスクリプション設計を解説

    Shopifyアプリの課金ってどうやるの? 課金方法とサブスクリプション設計を解説

    小笠原 京平

    Shopifyアプリの課金とは? Shopifyアプリの課金方法は、大きく分けてShopify内で決済する方法とShopify外で決済する方法の2つあります。 Shopify内で決済する場合、Shopifyアプリの料金は、マーチャントからShopifyに支払われ、税金や手数料を除いた料金がShopifyからアプリベンダーに支払われます。 Shopify内で決済する一番のメリットはマーチャントが課金する際にクレジットカード等の入力が不要なため、そのぶんの課金ハードルが低いことです。 デメリットは手数料をShopifyに支払う必要があることですが、現状ではよっぽど稼ぐアプリを作らない限り気にするほどではないので、Shopify内で決済させるのがよいと思います。 Shopify外で決済する場合、アプリベンダーは独自の決済フローを用意する必要があります。 こちらについては今回は触れません。以下はすべてShopify内の課金についての説明になります。 Shopifyアプリの課金の流れ Shopifyアプリで課金するための道具はすべてShopify側が用意してくれています。 したがって、Shopifyアプリは決められたパターンの実装するだけで、簡単に課金が行なえます。 Shopifyアプリの課金はざっくりと以下の流れで行われます。 【アプリ】Shopifyアプリの画面内に配置された課金ボタンをユーザーがクリック 【サーバー】課金の種類(種類については後述します)、課金額、プラン名などを元にShopify GraphQL APIにリクエストを送る 【サーバー】ユーザーに課金してもらうためのURLを含むデータをAPIから受け取り、アプリに渡す 【アプリ】課金用のURLにリダイレクト 4で表示された課金用のページでユーザーが課金を選択したら、課金が行われます。 (もちろん、キャンセルを選択して離脱する可能性もあります) 課金の種類 Shopifyでの課金方法はいくつかあります。 1つ目は定額料金プラン(固定額プラン)です。 定額料金には月払いと年払いのどちらかを選ぶことができます。 2つ目は使用状況に基づくプランで、いわゆる従量課金と呼ばれるプランです。 何の使用状況によって、どのくらいの課金をするかはアプリが決めることができます。 (メール配信をするアプリならメールの配信量、商品販売に関連するアプリなら販売された商品金額など) 3つ目は1と2を組み合わせたプランです。 ここでは定額料金の年払いは選択できませんので、月払い + 従量課金の組み合わせのみになります。...

    Shopifyアプリの課金ってどうやるの? 課金方法とサブスクリプション設計を解説

    小笠原 京平

    Shopifyアプリの課金とは? Shopifyアプリの課金方法は、大きく分けてShopify内で決済する方法とShopify外で決済する方法の2つあります。 Shopify内で決済する場合、Shopifyアプリの料金は、マーチャントからShopifyに支払われ、税金や手数料を除いた料金がShopifyからアプリベンダーに支払われます。 Shopify内で決済する一番のメリットはマーチャントが課金する際にクレジットカード等の入力が不要なため、そのぶんの課金ハードルが低いことです。 デメリットは手数料をShopifyに支払う必要があることですが、現状ではよっぽど稼ぐアプリを作らない限り気にするほどではないので、Shopify内で決済させるのがよいと思います。 Shopify外で決済する場合、アプリベンダーは独自の決済フローを用意する必要があります。 こちらについては今回は触れません。以下はすべてShopify内の課金についての説明になります。 Shopifyアプリの課金の流れ Shopifyアプリで課金するための道具はすべてShopify側が用意してくれています。 したがって、Shopifyアプリは決められたパターンの実装するだけで、簡単に課金が行なえます。 Shopifyアプリの課金はざっくりと以下の流れで行われます。 【アプリ】Shopifyアプリの画面内に配置された課金ボタンをユーザーがクリック 【サーバー】課金の種類(種類については後述します)、課金額、プラン名などを元にShopify GraphQL APIにリクエストを送る 【サーバー】ユーザーに課金してもらうためのURLを含むデータをAPIから受け取り、アプリに渡す 【アプリ】課金用のURLにリダイレクト 4で表示された課金用のページでユーザーが課金を選択したら、課金が行われます。 (もちろん、キャンセルを選択して離脱する可能性もあります) 課金の種類 Shopifyでの課金方法はいくつかあります。 1つ目は定額料金プラン(固定額プラン)です。 定額料金には月払いと年払いのどちらかを選ぶことができます。 2つ目は使用状況に基づくプランで、いわゆる従量課金と呼ばれるプランです。 何の使用状況によって、どのくらいの課金をするかはアプリが決めることができます。 (メール配信をするアプリならメールの配信量、商品販売に関連するアプリなら販売された商品金額など) 3つ目は1と2を組み合わせたプランです。 ここでは定額料金の年払いは選択できませんので、月払い + 従量課金の組み合わせのみになります。...

1 6

編集プロセス

EコマースやShopifyの初学者にとって、できるだけ “やさしく” “わかりやすく” “正確に” 難しいコマース用語やマーケティング用語、ストア構築から販売までの仕組み・ノウハウを伝えることを心がけて、記事コンテンツを作成しています。

掲載情報に関して

掲載している各種情報は、株式会社Tsunが経験および、調査した情報をもとにしています。できるだけ“最新“かつ“正確“な情報の掲載に努めておりますが、内容を完全に保証するものではありません。当サイトによって生じた損害について、株式会社Tsunではその賠償の責任を一切負わないものとします。掲載情報に誤りがある場合には、お手数ですが株式会社Tsunまでご連絡をいただけますようお願いいたします。