MORE

BLOG

Shopify PolarisでShopify埋め込みアプリ管理画面を作成しよう①

  • Shopify
  • Shopify Polaris
  • Shopify アプリ
  • UI/UX
  • デザイン
  • 初心者向け
  • 埋め込みアプリ
  • 導入方法
  • 開発
25.04.24

参考資料・関連記事

https://polaris.shopify.com/

https://help.shopify.com/ja/partners/dashboard/managing-stores/development-stores

https://shopify.dev/docs/apps/build/scaffold-app

https://remix-docs-ja.techtalk.jp/file-conventions/routes

https://polaris.shopify.com/component

1. はじめに

Shopifyアプリは、目的に応じた機能をShopifyストアにインストールしてカスタマイズできるソフトウェアです。

中でも、操作画面がShopifyの管理画面内に直接埋め込まれる「埋め込みアプリ」は、マーチャントにとってより自然でシームレスな操作体験を提供できます。

このような埋め込みアプリを構築する際に役立つのが、Shopify公式のデザインシステム「Shopify Polaris」です。デザインに自信がない方でも、Shopify Polarisを使えば簡単に高品質なUIを実現できます。

本記事では、初心者の方にもわかりやすいステップで、Shopify Polarisを使った埋め込みアプリ管理画面の作り方を解説します。第1弾では、Shopify Polarisの導入方法と、主要なコンポーネントを使った実装例をご紹介します!

1.1 記事について

本記事では、埋め込みアプリの管理画面を初めて作成する方に向けて、Shopify Polarisの導入方法と基本的な使い方を紹介します。

1.2 記事の対象

この記事は、以下の方々におすすめです:

・Shopify埋め込みアプリを初めて作る開発者

・コーディングには自信があるが、デザインに不安がある開発者

1.3 記事を読み終えるまでの時間

この記事を読み終えるまでに、約20分です。

2. Shopify Polarisとは?

Shopify Polarisは、Shopifyが管理画面を作成する際に使用しているUIコンポーネント群とそのドキュメントを提供するデザインシステムです。ボタン、入力欄、テキストなどの標準化された要素を用いることで、一貫したUIを実現できます。

また、Shopify Polarisには以下のようなメリットもあります!

利点:

レスポンシブ対応:画面サイズに応じて最適化

豊富なコンポーネント:用途別にサンプルコードが提供されている

アクセシビリティ対応:すべてのユーザーに配慮した設計

国際化対応:多言語対応が可能

https://polaris.shopify.com/

…とはいえ、実際に触ってみることでイメージが湧きやすくなるかと思いますので、

早速、Shopify Polarisをあなたの埋め込みアプリで使ってみましょう!

3. Shopify Polarisの導入方法

まずは、ShopifyアプリにShopify Polarisを導入する手順を紹介します。

3.1 前提条件

以下の前提条件を満たしていることを確認してください:

・開発ストアとRemixアプリが作成されていること

もし、開発ストアやRemixアプリをまだ作成していない場合は、以下の手順を参考にしてください。※ RemixテンプレートはTypeScriptを使用しています。

【開発ストア構築手順】

https://help.shopify.com/ja/partners/dashboard/managing-stores/development-stores

【Remixアプリ作成手順】

※ ステップ3まで実施してください。

https://shopify.dev/docs/apps/build/scaffold-app

3.2 Shopify Polarisのインストール

・開発環境でRemixアプリのルートディレクトリに移動します。

・以下のコマンドを入力し、Shopify Polarisの関連パッケージをインストールします。

npm install @shopify/polaris

Remixアプリのpackage.jsonに@shopify/polaris が追加されていればOKです!

Shopify PolarisでShopify埋め込みアプリ管理画面を作成しよう① - 株式会社テックディレクション
package.json の内容(一部抜粋)

4. 初期状態の確認

埋め込みアプリの管理画面を編集する前に、編集前のソース内容と画面表示を確認してみましょう!

4.1 編集前のソース内容を確認

Remixアプリ内の/app/routes/app._index.tsxファイルを開き、return部分を確認します。

Remixアプリをインストールしたばかりの状態では、こちらに書かれた内容がそのまま埋め込みアプリの管理画面に表示されます!

Shopify PolarisでShopify埋め込みアプリ管理画面を作成しよう① - 株式会社テックディレクション
app._index.tsxのreturn部分 内容(一部抜粋)

4.2 編集前の埋め込みアプリ管理画面を確認

ターミナルを開いて以下のコマンドを実行します。開発中のアプリが実際にどのように動作するか確認できます。

shopify app dev

ターミナルに表示される Preview URL をクリックすると、アプリの管理画面が確認できます!

例えば、上記のapp._index.tsx 127行目に記載されている「Congrats on creating a new Shopify app 🎉」というメッセージ等が確認できますね!

Shopify PolarisでShopify埋め込みアプリ管理画面を作成しよう① - 株式会社テックディレクション
埋め込みアプリ 管理画面の表示内容

上記の画面が確認できたら、今度はこの内容を編集していきましょう!

参考 Remixファイルのルーティングについて

もし「Remixアプリの各ソースファイルがアプリ管理画面のどのURLに対応しているのか?」が

気になった方は、以下のリンクを参考にしてください。

https://remix-docs-ja.techtalk.jp/file-conventions/routes

5. 基本的なShopify Polarisコンポーネント

Shopify PolarisでShopify埋め込みアプリ管理画面を作成しよう① - 株式会社テックディレクション
埋め込みアプリ管理画面 サンプル

上記を実現するために使用した基本的なShopify Polarisコンポーネントをご紹介します。

5.1 Page – ページ全体の構成を定義

Pageは、タイトルや全体レイアウトの土台を定義するコンポーネントです。

<Page title="Polarisでアプリ管理画面を作ろう!">
  {/* 子要素をここに入れる */}
</Page>

5.2 Layout – 情報のまとまりを区切る

Layoutは、画面の中でセクションを縦や横に分割したり、均等に配置するためのコンポーネントです。

<Layout>
  <Layout.Section>
    {/* 通常幅のセクション */}
  </Layout.Section>
  <Layout.Section variant="oneThird">
    {/* 画面幅の1/3サイズのセクション */}
  </Layout.Section>
  <Layout.Section variant="fullWidth">
    {/* フル幅のセクション */}
  </Layout.Section>
</Layout>

5.3 Card – コンテンツを見やすく囲うボックス

Cardは、情報を視覚的に分けるために使用するコンポーネントです。セクションをまとめ、見やすいUIを構築します。

<Card title="Cardコンポーネント">
  <Text as="p">ここに説明や内容を記載します。</Text>
</Card>

PolarisのCardには roundedAbove や padding など、見た目を調整するプロパティも用意されています。

5.4 Text – 見出しや本文を整える

Textは、見出しや本文を簡潔に表示するためのコンポーネントです。Polarisを使うと、文章が美しく整い、管理画面がよりわかりやすくなります。

<Text as="h2" variant="headingSm">見出しの例</Text>
<Text as="p">ここに本文を記載します。</Text>

asやvariantのプロパティを使って、見出しや本文のスタイルを簡単に調整できます。

Link コンポーネントは、ユーザーがクリックできるリンクを表示するために使用します。これを使って、別のページや外部サイトへ遷移できるリンクを作成できます。

<Link url="<https://polaris.shopify.com/components/navigation/link>" target="_blank">
  Linkコンポーネントの詳細
</Link>

url: リンク先のURLを指定します。

・target="_blank": 新しいタブでリンクを開くオプション。

Shopify Polarisでは、リンクのスタイルが統一されており、どこに使っても自然に馴染みます。外部リンクやマーチャント向けのドキュメントリンクを設定する際に便利です。

5.6 MediaCard – 画像 + 説明文 + アクションをまとめて表示

MediaCardは画像付きのカードUIで、アプリの概要やナビゲーションリンクの提示に最適です。

<MediaCard
  title="MediaCardコンポーネント"
  primaryAction={{
    content: "詳細を見る",
    onAction: () => console.log("クリックされました"),
  }}
  description="画像と説明文を組み合わせて情報を魅力的に伝えます。"
  size="small"
>
  <img
    alt="サンプル画像"
    width="100%"
    height="160px"
    style={{ objectFit: "cover" }}
    src="https://cdn.shopify.com/s/files/1/0757/9955/files/empty-state.svg"
  />
</MediaCard>

5.7 Button & ButtonGroup – 操作ボタンを表示

Buttonは操作を促す要素です。ButtonGroupと組み合わせることでボタン間のスペース調整も簡単にできます。

<ButtonGroup gap="loose">
  <Button onClick={() => alert("通常ボタン")}>通常ボタン</Button>
  <Button variant="primary" tone="critical">Criticalボタン</Button>
  <Button disabled>クリック不可</Button>
</ButtonGroup>

variant="primary":主ボタンのスタイル

tone="critical":注意を促す赤色ボタン

disabled:無効化されたボタン

FooterHelp は、ページのフッター部分にヘルプ情報や追加リンクを表示するためのコンポーネントです。FooterHelp コンポーネント内に Link を組み合わせて、関連ドキュメントやヘルプページへの誘導を行います。

<FooterHelp>
  他にもたくさんのコンポーネントがあります。{" "}
  <Link url="<https://polaris.shopify.com/components>" target="_blank">
    公式ドキュメント
  </Link>{" "}
  を参考にカスタマイズしてみてください。
</FooterHelp>

次章では、こちらで紹介したコンポーネントを使って、アプリ管理画面のトップページを構築する実装ステップに進みます!

6. 実践:Shopify Polarisで管理画面を構築してみよう!

それではいよいよ、皆さんのRemixアプリ内のソースコードを編集していきましょう!

※今後、元のサンプルコードを見直したくなったときのために、編集前のソースコードをバックアップしておくことをお勧めします。

app._index.tsx のコードを全て削除した後、以下のサンプルコードを丸ごとコピーして、app._index.tsx にそのまま貼り付けます。

import { Page, Layout, Card, Text, Link, MediaCard, FooterHelp, ButtonGroup, Button } from "@shopify/polaris";

export default function Index() {
  return (
    <Page title="Polarisでアプリ管理画面を作ろう!">
      <Layout>
        <Layout.Section variant="fullWidth">
          <Card roundedAbove="sm">
            <Text as="h2" variant="headingSm">
              Textコンポーネント
            </Text>
            <Text as="p">
              見出しや本文を表現できます。詳細は{" "}
              <Link
                url="https://polaris.shopify.com/components/typography/text"
                target="_blank"
              >
                こちら
              </Link>
              をご覧ください。
            </Text>
          </Card>
        </Layout.Section>

        <Layout.Section variant="oneThird">
          <Text as="h2" variant="headingSm">
            Layoutコンポーネント
          </Text>
        </Layout.Section>

        <Layout.Section>
          <Card roundedAbove="sm">
            <Text as="p" variant="bodyMd">
              セクションごとにコンテンツを整理して表示するためのレイアウトラッパーです。<br />
              <code>Layout.Section</code> を使うことで、複数のブロックを1行に並べることができます。<br />
              詳細は{" "}
              <Link
                url="https://polaris.shopify.com/components/layout/"
                target="_blank"
              >
                こちら
              </Link>
              をご参照ください。
            </Text>
          </Card>
        </Layout.Section>

        <Layout.Section>
          <Card roundedAbove="sm">
            <Text as="h2" variant="headingSm">
              Cardコンポーネント
            </Text>
            <Text as="p" variant="bodyMd">
              コンテンツをカード形式で表示できます。{" "}
              <Link
                url="https://polaris.shopify.com/components/layout-and-structure/card?example=card-with-section"
                target="_blank"
              >
                ドキュメントページ
              </Link>{" "}
              には、子要素の配置に役立つサンプルコードが多数掲載されています。
            </Text>
          </Card>
        </Layout.Section>

        <Layout.Section>
          <MediaCard
            title="MediaCardコンポーネント"
            primaryAction={{
              content: "MediaCardのドキュメントページに移動",
              onAction: () =>
                window.open(
                  "https://polaris.shopify.com/components/layout-and-structure/media-card?example=media-card-with-small-visual",
                  "_blank"
                ),
            }}
            description="画像と説明文でコンテンツを魅力的に伝えたいときに便利です。"
            size="small"
          >
            <img
              alt="Polarisの空の状態のサンプル画像"
              width="100%"
              height="160px"
              style={{ objectFit: "cover" }}
              src="https://cdn.shopify.com/s/files/1/0757/9955/files/empty-state.svg"
            />
          </MediaCard>
        </Layout.Section>

        <Layout.Section>
          <Card roundedAbove="sm" padding="500">
            <Text as="h2" variant="headingSm">
              Buttonコンポーネント
            </Text>
            <Text as="p" variant="bodyMd">
              様々なスタイルのボタンを作成できます。
            </Text>

            <ButtonGroup gap="loose">
              <Button
                url="https://polaris.shopify.com/components/actions/button?example=button"
                target="_blank"
              >
                通常ボタン
              </Button>
              <Button
                url="https://polaris.shopify.com/components/actions/button?example=button-primary-critical"
                target="_blank"
                variant="primary"
                tone="critical"
              >
                Criticalボタン
              </Button>
              <Button
                url="https://polaris.shopify.com/components/actions/button?example=button-disabled-state"
                target="_blank"
                disabled
              >
                クリック出来ないボタン
              </Button>
            </ButtonGroup>

            <Text as="p" variant="bodyMd">
              各ボタンをクリックすると、該当のドキュメントページへ遷移します。<br />
              なお、ボタンの間隔は{" "}
              <Link
                url="https://polaris.shopify.com/components/actions/button-group"
                target="_blank"
              >
                ButtonGroup
              </Link>{" "}
              コンポーネントの <code>gap</code> プロパティで調整しています。
            </Text>
          </Card>
        </Layout.Section>

        <Layout.Section>
          <FooterHelp>
            他にもたくさんのコンポーネントがあります。{" "}
            <Link url="https://polaris.shopify.com/components" target="_blank">
              公式ドキュメント
            </Link>{" "}
            を参考にカスタマイズしてみてください。
          </FooterHelp>
        </Layout.Section>
      </Layout>
    </Page>
  );
}

ソースを保存できたら、先ほどのプレビューURLからアプリ管理画面を確認してみましょう!

サンプル通りに表示されましたでしょうか…?

アプリ管理画面内のリンクから、各コンポーネントの詳細ドキュメントに遷移できるので、適宜コンポーネントのオプションを試してみてください!

以上で、第1弾は完了です!

まとめ

Shopify Polarisを活用すれば、デザインやCSSに悩むことなく、Shopify埋め込みアプリのUIを迅速かつ美しく構築できます。今回は第1弾として、Shopify Polarisの導入方法と主要コンポーネントの実装方法をご紹介しました。

次回は、より実践的な機能追加やよく使うUIパターンの活用方法について解説予定です。

お楽しみに!

著者:Sakamoto

弊社では、ECサイトのリプレース案件から、Shopifyカスタムアプリ開発、保守案件に至るまで、EC中心にプロジェクトの質にこだわり、お客様に笑顔になってもらえるよう日々邁進しております。

皆様からのお問い合わせ・ご相談をお待ちしております。

お問い合わせはこちら