2024.02.26[Mon]

Shopify Flowの新機能 Run codeの利用方法を考えてみる

    目次

    こんにちは。
    ディレクターの田辺です。

    2024年1月31日(日本時間では、2月1日)にShopify Winter '24 Editionが開催されました。
    https://www.shopify.com/jp/editions/winter2024

    今回のShopify Editionでも様々な新機能のアナウンスがなされました。

    その中でも個人的に注目しているのが、Shopify Flowの新機能「Run code」です。
    https://www.shopify.com/jp/editions/winter2024#shopify-flow-updates
    https://help.shopify.com/ja/manual/shopify-flow/reference/actions/run-code

    "Run code"は、まだ「早期アクセス(Early Access)」であるため、ストアによっては使用できない場合もありますが、下図のように2024年2月にはバグ修正が終わりそうですので、近い将来、正式にリリースされるのではないかと思います。

    Run codeで今までできなかった何かができるようになる予感はするのですが、具体的なイメージが湧いてこないのが正直なところです。

    そこで、本記事では、Run codeの利用方法を考えてみました。

    Shopify Flowの新アクション"Run code"とは

    詳細は公式ドキュメントをご確認いただくのがおすすめです。
    Run codeは、簡単に言うと、Shopify Flowの中で、

    1. ストア内のデータをクエリを通して読み込む
    2. そのデータを、JavaScriptで加工できる
    3. 加工したデータを、Flow内の後続のアクションや条件分岐に渡せる

    ということになります。
    下図は、実際のRun codeの編集画面です。

    Run codeを触ってみる

    まず、何ができるのか、が分からないと考察しようがありませんので、下記の確認をしてみました。

    公式ドキュメントには「入力」のクエリとして下記のような例が記されています。

    {
      order {
        note
        lineItems {
          title
        }
      }
    }
    

    このクエリのorderは、どの注文情報を取得するのか調べるために、下図のように、Order CreatedをトリガーとするRun codeの実行結果をLogに出力してみました。

    実行結果を確認すると、上記クエリによって取得できる注文情報は、当然のことながら、Order Createdを引き起こした注文の情報でした。

    続いて、下記のようなクエリを試してみました。

    {
      order {
        lineItems {
          title
          quantity
        }
        customer {
          orders {
            name
            createdAt
            lineItems {
              title
              quantity
            }
          }
        }
      }
    }
    

    このクエリが期待通り動作した場合、customer.ordersによって、Order Createdを引き起こした注文者の過去の注文履歴が取得できるはずです。

    実行結果はというと、期待した通り、注文者の過去の注文履歴が取得できました。

    この過去の注文履歴がどれくらい過去まで取得できるのか、何件取得できるのが気になります。

    公式ドキュメントを確認すると、下記のように記されていました。

    クエリにおけるページングの処理やedgesおよびnodesの使用は、Flowによって処理されるため、自分で処理する必要はありません。

    ページング処理をFlowが良きようにしてくれるようなので、おそらく、注文者の過去の注文履歴を全て取得できるものと思われます。

    Run codeの利用方法を考えてみる

    本記事内でRun codeについてわかったことをまとめます。

    • Order Createdにおいて、Run codeのorderクエリは、Order Createdを引き起こした注文情報そのものを取得する
    • Order Createdにおける、Run codeのorderクエリに、customer.orderを含めると、おそらく、その注文者の注文履歴を全て取得できる

    この2つ仕様からだけでも、下記のような利用方法が思いつきます。

    利用例: 1人の顧客が、特定の期間内に、特定の商品を、何個購入できるかを規制する

    上記を実現するためのShopify Flowの流れは、例えば、下記のようなものになるでしょう。

    1. 購入制限を効かせたい商品に、期間と個数のメタフィールドを用意し、設定
    2. Order Createdトリガー
    3. Run codeで、注文した商品の個数、その商品のメタフィールド、注文者の注文履歴を取得し、メタフィールドに設定された値と、注文履歴に応じて、購入制限に抵触していないかを判断し、抵触していればfalseを出力
    4. 条件分岐でRun codeの出力値を評価
    5. falseであれば、保留アクションで、注文の発送ステータスを保留にする

    まとめ

    いずれ、上記の「購入制限」のFlowを実際に組んでご紹介しようと考えています。

    また、本記事でのRun codeの利用例はあくまで一例に過ぎません。
    Run codeはかなりのポテンシャルを秘めていそうですので、これまで公開アプリに頼っていた処理や、手動オペレーションでなんとかしてきたものも、Shopify Flowで実現できるようになるかもしれません。

    それでは。

    Share

    Shopifyで商品の在庫が少ない時に管理者へ通知を送る方法Shopifyで不正な注文があった場合、配送状況を保留にする方法