3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Stripe AppsでアプリUIを構築するための、`@stripe/ui-extension-sdk`入門

Last updated at Posted at 2022-12-05

この記事は、Stripe Apps を25日間紹介し続ける Advent Calendar 2022 5日目の記事です。

スクリーンショット 2022-11-24 17.56.45.png

Stripe AppsアプリのUIは専用フレームワークで構築する

Stripe Appのアプリを構築するには、専用のUIフレームワークを利用する必要があります。

@stripe/ui-extension-sdkのインストール方法

stripe apps createでセットアップしたアプリには、デフォルトでインストールされています。

現状、Stripe CLI以外を利用してアプリを開発することはありませんので、基本的に手動インストールの必要はありません。

[Tips]: Stripe Appsの外で動かすには、@remote-ui/reactを使う

Stripe AppsのUIフレームワークは、内部で@remote-uiを利用しています。

そのため、Apps以外で利用したい場合は、こちらの設定なども必要ですのでご注意ください。

Remote UIの仕組みなどについては、Shopifyのブログにて紹介されています。

実装はReactとTypeScrtriptを利用

このフレームワークは、TypeScriptとReactをベースに作られています。

import { Box } from "@stripe/ui-extension-sdk/ui";

export const Demo = () => (
    <Box>Hello World</Box>
)

JavaScriptでも利用できますが、コンポーネントの型情報をIDE内で確認できるTypeScriptをお勧めします。

@stripe/ui-extension-sdkで、「Stripe Dashboardと統一された」UIを構築

このフレームワークを利用するメリットは、「Stripeのダッシュボードに馴染んだUIを簡単に作れる」ことです。

ダッシュボードに埋め込むためのレイアウトや、フォーム・ボタンなどのUIが、提供されたコンポーネントを配置するだけで実装できます。

スクリーンショット 2022-12-05 11.56.13.png

この画像のマークアップは、一部簡略化した形ですが、おおよそこのような書き方をします。

    <ContextView
      title='Querystring Builder'
      brandColor='#F6F8FA'
      externalLink={{
        label: 'Learn about querystrings',
        href: 'https://stripe.com/docs/payments/payment-links#selling',
      }}
      actions={
        <Box
          css={{
            stack: 'y',
            gap: 'medium',
          }}
        >
          <Button
            type='primary'
            css={{ width: 'fill', alignX: 'center' }}
            onPress={() => isOpen(!open)}
          >
            Generate QR code
          </Button>
        </Box>
      }
    >
...

[注意] @stripe/ui-extension-sdkの要素以外(HTML)などは使えません

Sandboxを利用して描画していることなどの理由から、通常のHTMLタグは利用できません。

extensions-structure.d6d4d0512ef2194eda5c7ffd214e894e.jpg
https://stripe.com/docs/stripe-apps/how-ui-extensions-work#ui-%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B

エラーになるコードの例

const App = ({ userContext, environment }: ExtensionContextValue) => {
  return (
    <div>
      <h1>Hello</h1>
    </div>
  )

divh1@stripe/ui-extension-sdkで定義された要素を使用していませんので、エラーが発生します。

スクリーンショット 2022-12-05 12.11.09.png

誤って利用しないように、ESLintのルールも設定されています。

スクリーンショット 2022-12-05 12.12.25.png

この他の制約事項については、以下のドキュメントをご確認ください。

コンポーネントの分割や、Context / Providerなどは利用可能

Reactをベースにしていますので、コンポーネントの分割もできます。

import { FC } from 'react'
import { Box } from '@stripe/ui-extension-sdk/ui'

const Greeding: FC = () => {
  return (
    <Box>Hello World</Box>
  )
}

また、useStatecreateContextも利用できます。

import { FC, createContext , useState } from 'react'
const ExampleContext = createContext({
  flag: true
})
const ExampleProvider:FC = ({children}) => {
  const [flag, setFlag] = useState(false)
  return (
    <ExampleContext.Provider
      value={{
        flag
      }}
    >
      {children}
    </ExampleContext.Provider>
  )
}

利用できるコンポーネントを調べる方法

どのようなコンポーネントが利用できるかを調べるには、2つの方法があります。

方法1: stripe.com/docsのサイトで調べる [開発者向け]

Stripeのドキュメントサイトには、要素ごとのプロパティや描画サンプルなどを紹介するページがあります。

記事で紹介されているサンプルコードを動かしながら、使い方などを調べることができます。

方法2: Figmaのデータを利用する [デザイナー向け]

コンポーネントの情報は、Figmaに公開されています。

スクリーンショット 2022-12-05 12.20.03.png

このデータを利用して、アプリのUIデザインを作成できます。

Stripe Appsひとりアドベントカレンダー 2022

今年ベータリリースされたばかりのStripe Appsは、まだ日本語の情報が多くありません。

そこでQiita Advent Calendar 2022にて、毎日Stripe Appsについての情報を投稿します。

ノーコードで利用する方法や、開発するためのTipsなども紹介予定ですので、ぜひ購読をお願いします。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?