Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Next.js Shopify Headless Commerce 構築のことはじめ

Middle
September 28, 2021

Next.js Shopify Headless Commerce 構築のことはじめ

Next.jsとShopify Storefrontの構成についてことはじめ的な部分を紹介します。

紹介・使用する技術等

* Next.js
* SSR (Server Side Rendering)
* SSG (Static Site Generation)
* ISR (Incremental Static Regeneration)
* Emotion
* CSS-In-JS
* Apollo
* GraphQL

Middle

September 28, 2021
Tweet

Other Decks in Programming

Transcript

  1. SSRのおさらい
 1: サーバーサイド (Node.js) でReactをコン ポーネントをレンダリングした結果のHTML をブラウザに渡す
 
 2: ブラウザはまず、その静的なHTMLを表

    示。
 
 3: 今度はクライアントサイドで同じReactコン ポーネントをレンダリングすることで、クライ アントサイド側のJavaScriptで制御可能にす る。

  2. npm install --save graphql @apollo/client @emotion/react @emotion/styled 
 必要なnpmモジュールをインストール
 yarn

    add -D @graphql-codegen/cli @graphql-codegen/introspection @graphql-codegen/typescript @graphql-codegen/typescript-operations @graphql-codegen/typescript-react-apollo 

  3. データの取得はApollo Clientで行います。
 
 GraphQL Code Generatorを使えば、Apollo でAPIアクセスするための関数を型つきで自 動生成してくれます。
 
 


    設定の一例を見てみましょう。
 
 https://www.graphql-code-generator.com/ 
 Apollo Clientを使ってデータを取得する (設定)

  4. graphqlディレクトリにQuery一覧
 を配置して、GraphQL Code Generator のコ マンドを叩くと
 自動生成が走ります。
 
 試しにProductsを取得するQueryを書いて みます。(ProductsExample)


    
 
 ※ 設定で graphqlディレクトリ以下の
 .graphql ファイルから生成するようにしてい ます。
 Apollo Clientを使ってデータを取得する (設定)

  5. GraphQL エンドポイントに対して 
 Apollo Clientでリクエストするためには Apollo ProviderでWrapする必要がありま す。
 
 


    どのページでも使えるように
 pages/_app.tsx など共通で使われるファイ ル等でWrapしておきます。
 Apollo Clientを使ってデータを取得する

  6. Next.jsではpagesディレクトリ以下に作った ファイルがそのままページになります。 
 
 例えば、pages/csr.tsx というファイル内部で Reactコンポーネントをdefault export してい たら、/csr

    でページにアクセスできるように なります。
 
 ※ 各ページがSSRされます。
 ※ サーバー側でデータ取得してSSRする方 法は別途後述します。
 Next.jsでのページの作成

  7. SSR時にStorefront APIを叩く時の注意点
 ShopifyのStorefront APIではIPアドレスベー スでAPIの利用上限が決まっています。
 
 https://shopify.dev/api/usage/rate-limits 
 
 Node.jsサーバーでレンダリングする時には

    そのサーバーのIPアドレスごとに計算される ので、本当にそのデータをサーバーサイド 側で取得してレンダリングすべきかどうか、 考慮が必要です。