.../articles/

Shopify の Storefront API を使ってサイトにEC機能を追加する

新規・既存問わず、ウェブサイトに簡単にEC機能を追加できるShopify の Storefront APIを紹介します。

弊社の担当したプロジェクトでサイトにEC機能を追加したいというを話をいただくことが度々あります。
参考事例)
・ 秘密厨房 -Himitsu Kitchen- https://himitsu.kitchen/
・ Julie - ジュリー|世界中のワインからあなただけの1本を https://julie.page/

その際に弊社では Shopify の利用をおすすめすることが多いのですが、どれだけ簡単にECのカート機能を追加できるのかというのをご紹介します。

カート機能を追加する際に利用するのは Shopify の Storefront API を利用します。
Storefront APIのメリットは、Shopifyのサービス上にサイトを移行するわけではなく、既存のコードにJavaScriptのコードを追加するだけでECカート機能が構築できるため、開発コストを下げることができます。
またサイト構成の自由度や、使い慣れたテンプレートエンジンやフレームワークの利用が可能になります。
Shopifyで構築する場合、Liquidというテンプレート言語を利用する必要があり、不慣れな人には辛いかもしれません。

Shopify Storefront API ドキュメント

JS・iOS・AndroidのSDKが Storefront API には用意されており、それを使うだけで簡単にShopifyで管理されている商品データやカートを取り扱うことができます。

今回はウェブサイトの話なので、JSのSDKを利用した方法をご紹介します。

必要なパッケージのインストール

$yarn add shopify-buy

使い方

カートの作成

const fetch = require('node-fetch')
const shopify = require('shopify-buy')

// Checkout(カートのこと)を作成する

const shopifyClient = shopify.buildClient(shopifyConfig, fetch)
// Doc : https://github.com/Shopify/js-buy-sdk#creating-a-checkout
const checkout = await shopifyClient.checkout.create()

// 作成した Checkout から Checkout tokenを取得する
const checkoutToken = checkout.id
// 過去に作成した Checkout token から作成済みの Checkout を取得することもできる
const checkout = await shopifyClient.checkout.fetch(checkoutToken)

カートに任意の情報追加

カートに対して何かしら任意の情報を追加することができます。
Shopify のカートには CustomAttributesが用意されており、任意の情報を付与することが可能です。それらの内容はShopifyの受注画面で確認することが可能です。
ユースケースはサービスで利用しているニックネームを追加する場合や、配送希望日などを追加する場合にご利用いただけます。

// Doc : https://github.com/Shopify/js-buy-sdk#fetching-a-checkout
const shopifyClient = shopify.buildClient(shopifyConfig, fetch)
const userName = 'サイト上で使っているニックネームなどカートに保存したい情報'
const input = { customAttributes: { key: 'userName', value: `${userName}` } }
await shopifyClient.checkout.updateAttributes(checkoutToken, input)

カートに商品の追加

const shopifyVariantId = '1234567891011'
// ※ Shopify の商品情報についているID
// Shopifyの商品画面のURLに表示されている Product ID とは異なるので注意

const variantId = btoa(`gid://shopify/ProductVariant/${shopifyVariantId}`)
// カートに追加するデータを作成する
// カートの商品単位でも CustomAttributes に情報を追加することができる
// 今回はカート画面で表示する内容(商品の画像や値段)を追加
const lineItemsObject = {
  variantId,
  quantity: 1,
  customAttributes: [
    { key: 'price', value: `${payload.price}` },
    { key: 'imageUrl', value: `${payload.coverImageUrl}` },
  ],
}
const shopifyClient = shopify.buildClient(shopifyConfig, fetch)
const checkout = await shopifyClient.checkout.addLineItems(checkoutToken, lineItemsObject)

決済画面に遷移

決済ボタンなどをクリックされた際に以下のコードを実行することで遷移が可能です。

const checkout = await shopifyClient.checkout.fetch(checkoutToken)
location.href = checkout.webUrl

まとめ

このような形でSDKを利用してカートの機能を追加することができました。
残るはそれぞれ必要な機能を関数化して、画面から呼び出してあげれば良いだけです。
反響があれば、もう少し詳しい実装も紹介できればと思います。

.../articles/

Articles

記事

AWS AmplifyにmonorepoのNext.js(App Router)をデプロイする

AWS AmplifyにmonorepoのNext.js(App Router)をデプロイする

monorepo管理しているNext.jsをAmplifyにデプロイしようとした際にいくつか躓く内容があったのでまとめておきます。

リモートワーク・オンライン会議でも、スムーズに制作を進めるために大切なこと[資料編]

リモートワーク・オンライン会議でも、スムーズに制作を進めるために大切なこと[資料編]

コロナ禍の影響により、リモートワークの導入をおこなっている制作会社も多く、実際に弊社でも導入しています。

売れるECサイトデザインを作るために。参考にしたいおしゃれな事例の探し方。

売れるECサイトデザインを作るために。参考にしたいおしゃれな事例の探し方。

売れるECサイトのデザインは、「この形式」という決まりはありません。ECサイトで売り上げを上げるなら、しっかりとしたコンセプトと、コンセプトを決定するまでのリサーチが必要です。

制作会社の考える、業務効率化ツールのおすすめ。個人でも使いやすいサービスなど。

制作会社の考える、業務効率化ツールのおすすめ。個人でも使いやすいサービスなど。

新型コロナウイルス感染拡大の影響で、リモートワークが主流になり、弊社でも週のほとんどは各自宅で作業をしています。

Figmaでデザインのコミット履歴を残せるプラグイン【Thought Recorder】をリリースしました

Figmaでデザインのコミット履歴を残せるプラグイン【Thought Recorder】をリリースしました

Figmaを利用するWebデザイナーの助けになれると嬉しいです。使い方は本記事をご覧ください。

ECの構築方法、おすすめのECサービス。

ECの構築方法、おすすめのECサービス。

ファッションや家電、スーパーの買い物でさえもECサイトを利用することが当たり前になりました。加えて新型コロナウイルスの影響もあり、弊社にも「どんなプラットフォームを利用したら良いか」「どれくらいコストがかかるのか」などECに関するさまざまなご相談を頂きます。

FastAPIのスキーマクラスをOpenAPIから生成する方法

FastAPIのスキーマクラスをOpenAPIから生成する方法

PythonでAPIを構築する要件があり、フレームワークに比較的モダンなFastAPIを採用しました。FastAPIはバックエンドの開発を行えば自動でOepnApi定義を生成する機能が備わっていますが、今回はこれを使わず、事前に用意したOepnApi定義からFastAPIで利用するスキーマクラスを生成する方法を紹介します。

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel + MySQLで全文検索を実装する

とあるPythonのソースで sys.path.append としたく無かった話

とあるPythonのソースで sys.path.append としたく無かった話

とあるプロジェクトのとあるソースコードのレビューをしてた時、「ソースコードの参照がうまくいってなかったので修正しました」とレビュー依頼がきました。 ディレクトリ構造 ``` module L __init__.py L main.py L tests L __init__.py L test_main.py ``` ソースコード ``` python tests/test_main.py sys.path.append(os.path.abspath("..")) from main import fuga ``` 今まで案件でPythonに触れる機会も結構ありましたが、なんとなく使ってきた部分も多く、この書き方が良いのか悪いのか判別できなかったので、改めてPythonのモジュールのインポートに関して調べてみたのでブログにしました。普段PHPを書いている事が多くPythonに関して何も分からないので初心者向けの内容になっていると思います。

GiFT1号目新卒デザイナーの2021年振り返り

GiFT1号目新卒デザイナーの2021年振り返り

いつの間に、年末ですね。入社してもう、9ヶ月も立っていたようです。2021年の振り返りを記事にしました。

すべての記事

お問い合わせ