Run code

[Run code] アクションでは、JavaScriptが実行されます。ワークフローの前のステップに関するデータを [Run code] アクションの入力として渡し、後に続くステップで使用する値を返します。

フィールド

[Run code] アクションには、次のフィールドが含まれます。

[Run code] アクションで使用されるフィールド。
フィールド 説明
入力 必須です。[Run code] アクションへの入力として、前のステップのデータを使用するためのGraphQLクエリを作成します。
出力 必須です。アクションによって返されるデータ表現であり、GraphQLのスキーマ定義言語 (SDL) を使用して定義されます。
コード 必須です。[Run code] アクションによって実行されるJavaScriptです。

入力データ

入力データは、[Run code] アクションの前に発生するステップから渡されます。このデータを組み込むには、[入力] フィールドにGraphQLクエリを記述します。クエリから返されるデータは、export defaultでマークされた関数に対するinput引数として使用できます。規則ではmainと表示されます。

入力クエリは、Shopify Admin APIに対するクエリではなく、Flow環境データに関するクエリです。そのため、入力データにShopifyクエリを挿入することはできません。さらに、Flowはクエリの edges および nodes を処理するため、クエリには、これらやその他のページ構文を追加する必要はありません。

注文メモと項目のタイトルを取得するための入力例:

{
  order {
    note
    lineItems {
      title
    }
  }
}

このデータは、以下のコードで使用できるinput変数に変換されます。

export default function main(input) {
  // input.order.note
  // input.order.lineItems[0].title
}

入力は、以下の関数の署名によって構造分解することもできます。

export default function main({order}) {
  // order.note
  // order.lineItems[0].title
}

メタフィールド ()

Run codeで単一のメタフィールド値にアクセスするには、まず、Flowの環境データにメタフィールドを追加する必要があります。 これは、Run code以外のアクションまたは条件で実行されます。 たとえば、ログ出力アクションを追加し、指示に従ってメタフィールドを追加できます

ワークフロー環境にメタフィールドを追加した後は、[Run code] でアクセスできます。たとえば、OrderメタフィールドをgiftMessageというエイリアス名で追加したとします。すると、次の入力クエリでこのメタフィールドにアクセスできます。

{
  order {
    giftMessage {
      value
    }
  }
}

出力データ

[Run code] アクションでは、カスタムデータを返すことができます。コードが返すデータのタイプを定義するには、[出力] フィールドとGraphQLのスキーマ定義言語 (SDL) を使用します。たとえば、giftMessageという文字列とtotalGiftsという番号を返すには、以下のコードを使用します。

type Output {
  "The message to include in the gift"
  giftMessage: String!
  "The total number of gifts"
  totalGifts: Int!
}

コメントは任意ですが、Flow UIでデータを記述するために使用されます。このデータをJavaScriptコードで出力するために、次のタイプと一致するオブジェクトを返します。

export default function main(input) {
  // your code
  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

さらに複雑なデータを返すカスタムタイプを定義することもできます。たとえば、messageという文字列およびamountという番号を含む、Giftというタイプを返すには、以下のコードを使用します。

type Output {
  "The gift to send"
  gifts: [Gift!]!
}

type Gift {
  "The message to include in the gift"
  message: String!
  "The total number of gifts"
  amount: Int!
}

このアクションに続くステップでこのデータにアクセスするには、[Run code] アクションの設定で定義したOutputスキーマに従って入力されるRun codeという変数を使用します。この変数は、条件とアクションの両方で使用できます。

Console.log

console.logを使用すると、トラブルシューティング用にFlowのワークフロー実行ログにデータを出力できます。出力はワークフローの実行ログに表示されます。例えば、以下のものが有効です。

export default function main(input) {
  console.log('Hello, world!');
  //Hello, world!
  console.log(input);
  // { order: { note: 'Hello', lineItems: [{ title: 'World' }] } }
  console.log(input.order, "is the order");
  // { note: 'Hello', lineItems: [{ title: 'World' }] }
  // is the order

  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

Run codeアクションではconsole.infoconsole.errorなどの関数は使えません。

コード実行アクションの例は、Flowのリポジトリ例で確認できます。

制限

[Run code] アクションには、以下の制限があります。

  • [Run code] アクションは、ECMA2020 JavaScriptに対応しています。NodeJSやCommonJS API、またはモジュールのインポートには対応していません。
  • コードでhttpコール (fetch) を実行することはできません。
  • ランダムな機能やクロックベースの機能を使用することはできません。scheduledAtcreatedAtなどの日付データは、インプットとしてパスされます。
  • Console.logはブラウザーコンソールにログインできません。
  • メタフィールドのエイリアスは、 [Run code] アクションに直接追加することはできません。これを行う方法については、メタフィールドセクションを参照してください。

さらに、以下の制限が適用されます。

  • 入力データのクエリの上限は5000文字です。
  • 出力データのスキーマの上限は5000文字です。
  • 出力データペイロードとConsole.log出力は、合計で50 kbに制限されています。
  • コードの長さの上限は50000文字です。
  • 実行時間の合計の上限は5秒です。
  • メモリ使用量の上限は10MBです。

ロードマップ

今後、Flowチームは、[Run code] アクションの機能を追加していく予定です。次の表では、予定されている改善内容とその実行日程について概説しています。

[コードを実行する] アクションの改善のロードマップ
改善内容 説明 配達予定
ログ 'console.log'を使用して、トラブルシューティングのために実行ログにデータを出力します。 完了。
外部APIコール JavaScriptのfetchを使用してAPIを呼び出します。 2025年第1四半期

フィードバック

[Run code] アクションは、Shopify Flowにおけるステップの新しいタイプです。フィードバックや質問がある場合は、Flowコミュニティのこちらの投稿にコメントしてください。

Shopifyで販売を開始する準備はできていますか?

無料体験を試す