Pro: CSV 出力値の設定(固定値・注文情報・置換・条件分岐・コード)

plan: Pro プラン限定 (R6)
screens: 「設定」→「CSVテンプレート」→ テンプレートの「編集」→「フィールド定義」→ 列の「編集」(値を編集する画面)
verified_from: CSV 画面の実装 (値の編集画面・出力エンジン・トークン定義) + 人間向けマニュアル
ui_verified: 項目名はコードから確認。実画面での目視確認は未実施
related: 注文CSV出力の基本は [Pro: 注文CSV出力の基本](/cc-delivery-date-time/ai/090/csv-basics/)

SUMMARY

CSV の 1 列 (1 つの「フィールド」) の値は、A デフォルト値 → B 条件分岐 (例外) → C 出力の制約 の 3 層で決まる。注文ごとに B を上から順に評価し、最初に一致した分岐の値を使う。どれにも一致しなければ A を使う。最後に C (文字数制限) をかける。

値の決まり方

V-1  画面の構成: 「値を編集」画面に3つの層がある。
       A 「デフォルト値」 … 条件分岐に一致しない全ての注文に使う値
       B 「条件分岐 — 例外ルール」 … 上から評価し、最初に一致した分岐の値を採用。どれにも一致しなければ A
       C 「出力」 … 「フィールド名」(CSV のヘッダ行の列名) と「文字数制限」。A/B どちらの結果にも最後にかかる
V-2  A の値の作り方は2種類:
       「固定値」 … 全行に同じ文字列を出す (例: 送り状種別 "0")。注文情報としては解釈されない
       「組み立て(注文情報、コード)」 … 注文情報・自由入力文字・コードを1つ以上並べ、区切り文字で結合して1セルに出す
V-3  「組み立て」の1行の種類は3つ: 注文情報 (トークン) / 自由入力 (入力した文字をそのまま出力) / コード (JavaScript)。
V-4  複数の行を並べると、「区切り文字で結合」(区切り文字 (be)) で結合する。区切り文字の既定はカンマ。
V-5  「注文情報」の行が日付系 (配送希望日・配送希望時間・オーダー作成日・出荷予定日・Today±N・「属性: Key名」) のときだけ、
     「日付フォーマット」を指定できる (例: YYYY-MM-DD / YYYY/MM/DD / YYYY年M月D日)。日付に変換できる文字列だけが整形される。
V-6  「置換ルール」は「注文情報」の行にだけ付けられる (自由入力・コードの行には付けられない)。「置換ルールを追加」で複数追加でき、
     「正規表現にする」で変換前の文字列に正規表現を使える。不正な正規表現は文字どおりの文字列として扱われる。
V-7  固定値と組み立ての値が両方入っているデータでは、組み立て (selectVal) が優先され、固定値は無視される。
V-8  「文字数制限」は、出力する文字列の最大文字数。空欄は無制限。
V-9  「値は分岐で決定」と表示される列は、A が空で、値を分岐だけで決めている列。

「注文情報」で選べる主な項目

画面では「注文」「顧客 / 配送先」「請求先」「商品」「金額」「日時 / 属性」「注文属性 (customAttributes)」のグループに分かれる。

グループ主な項目 (画面の表示名)
注文注文番号、注文番号-ID、Shopify Order ID、オーダータグ、E-mail、注文のメモ、割引コード、決済ゲートウェイ(支払い方法)の名称、支払いのステータス、フルフィルメント状況、除外商品のタイトル一覧
顧客 / 配送先電話番号、配達方法、配送タイトル、配送先氏名(名前)、配送先氏名(苗字)、配送先会社名、配送先電話番号、配送先郵便番号、配送先住所、配送先アドレス 1 / 2、配送先国名 (英語)
請求先請求先の会社名・氏名・電話番号・郵便番号・住所・アドレス 1 / 2・国名
商品商品名、商品のタグ、SKU、商品のバリアントID、商品の単価、商品の個別金額 (割引など適用後)、商品の注文時の個別個数、商品の出荷が必要な個別個数、商品のラインプロパティ
金額総重量(g)、合計金額、割引金額、合計送料、合計税額、商品合計金額、ストアクレジット利用額 ほか (各 通貨 の項目あり)
日時 / 属性配送希望日(アプリ)、配送希望時間(アプリ)、配送方法(アプリ)、出荷予定日(アプリ)、オーダー作成日、Today-1 / Today+0 / Today+1 / Today+2 (前日・本日・翌日・明後日)
注文属性追加の詳細のKey / Value、および画面で Key 名を指定した「属性: Key名」
  • 「配送希望日(アプリ)」などは、このアプリがウィジェットで書き込んだ配送日時 (注文の「追加の詳細」)。
  • 「割引コード」は注文に使われた割引コード。複数あるときは、列の「区切り文字 (be)」で区切って出力する (タグと同じ扱い) (コード記載の変数や判定対象では「, 」区切り)。コードを使っていない注文は空欄。自動割引 (コード無し) の名前は出力できない。
  • 「今日から N 日 (自由入力)」で Today+N の任意の日数を指定できる (マイナスで過去)。
  • メタフィールドは、「設定」→「取得設定」の「注文のメタフィールドを取得する」に登録したキーが「メタフィールド[namespace.key]」として選択肢に並ぶ。登録していないキーは取得されないので選べない。登録後は再取得が必要。判定対象 (条件分岐) にも同じ形で並ぶ。

条件分岐 (B) の作り方

形式: 「もし 注文の [判定対象] が [判定方法] とき、[出力する値]」
判定対象: 注文情報と同じ項目 (配送先住所・商品名・商品のタグ・オーダータグ・合計金額・総重量・追加の詳細のKey、取得設定に登録したメタフィールド「メタフィールド[namespace.key]」 など)
判定方法:
  文字列 … 「を含む」「を含まない」「のいずれかを含む」「のいずれも含まない」(複数の語はカンマ区切り)
  数値   … 「数値範囲 (min〜max)」 (合計金額・総重量・個数など)
  日付   … 「日付範囲 (YYYY-MM-DD)」
AND   : 「条件を追加 (かつ)」で条件を足すと、全ての条件を満たすときだけ一致する
出力する値: 固定値 / 組み立て (注文情報・コード) / 「条件に一致した値 (判定した項目の値)」
評価順: 上から順。最初に一致した分岐を採用する (並び替えで順番を変える)

PROC-V1 固定値を出す (例: 送り状種別を常に “0” にする)

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > 対象の列の「編集」
手順:
1. 「設定」→「CSVテンプレート」→ 対象テンプレートの「編集」
2. 「フィールド定義」で対象の列の「編集」を押す
3. A「デフォルト値」で「固定値」を選び、「固定文字列」に値を入れる
4. 「保存」→ 画面上部の「保存する」

PROC-V2 注文情報を出す・複数の値をつなげる (例: 姓と名を1セルに)

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > 対象の列の「編集」
手順:
1. 列の「編集」→ A「組み立て(注文情報、コード)」を選ぶ
2. 1行目で「配送先氏名(苗字)」を選ぶ
3. 「値を追加 (結合)」で2行目を足し、「配送先氏名(名前)」を選ぶ
4. 「区切り文字 (be)」に、つなぐ文字 (半角スペースや空) を入れる
5. 保存

PROC-V3 文字を置き換える (例: 電話番号の +81 を 0 に)

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > 対象の列の「編集」
手順:
1. 列の「編集」→ A「組み立て」で「電話番号」(など) の行を選ぶ
2. その行の下の「置換ルールを追加」を押す
3. 変換前の文字列に「+81」、変換後に「0」を入れる
4. 正規表現で置き換えたい場合は「正規表現にする」にチェックを入れる
補足:
- 空白 (値が無い) 状態のときに文字を入れたいときは、変換前を空のままにして変換後に文字を指定する (人間向けマニュアルの記載)
- 置換は「注文情報」の行だけに付けられる。自由入力・コードの行には付けられない (V-6)
- 郵便番号の分割 (前3桁・後4桁) や電話番号の分割は、正規表現の置換で行う。具体例は人間向けマニュアル「出力値の文字変換 (正規表現)」

PROC-V4 条件によって値を変える (例: 冷凍食品を含む注文はクール区分を変える)

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > 対象の列の「編集」
手順:
1. 列の「編集」→ B「条件分岐 — 例外ルール」で「分岐を追加」
2. 「判定対象」に「商品のタグ」(または商品名)、判定方法に「を含む」/「のいずれかを含む」、値に「冷凍」など
3. 出力する値を入れる (例: クール区分の値)
4. A のデフォルト値は、どれにも一致しない注文の値
5. 保存
注意:
- 上から順に評価され、最初に一致した分岐が使われる。順番を確認する
- 複数条件を全て満たすときだけにしたい場合は「条件を追加 (かつ)」

PROC-V4a ご依頼主の列を、まとめてギフト対応にする

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 右の「基本情報」
前提: テンプレートの「運送会社」(種別) が「指定なし」でないこと
手順:
1. 「ご依頼主をギフト対応にする (N 列)」を押す。一覧のモーダルが開く (ご依頼主の各列が、どの請求先の値になるか)
2. 内容を確認して「すべて反映する」を押す (やめるときは「キャンセル」)
3. 画面上部の「保存する」で保存する
注意:
- 反映されるのは、ご依頼主の列 (種別のプリセットの列名と同じ列) だけ。すでにギフト分岐がある列は変えない
- 全列がギフト対応済みのときは、このボタンは出ない
- 列ごとに値を変えたいときは PROC-V4b (列ごとの「テンプレートから追加」) か、列の分岐の編集

PROC-V4b 配送先と請求先が違う注文だけ、請求先の値を出す (ギフト注文のご依頼主)

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > ご依頼主の列の「編集」
前提: テンプレートの「運送会社」(種別) が「指定なし」でないこと (指定なしだとボタンが出ない)
手順:
1. A のデフォルト値に、自社の情報 (ご依頼主の名前・住所・電話番号など) を入れる
2. B「条件分岐 — 例外ルール」の「テンプレートから追加」を押す。カードが開く
3. 「使う請求先の値」を選ぶ (名前 / 電話番号 / 郵便番号 / 住所 / 住所2)。列名が「ご依頼主名」などプリセットのままなら、最初から選ばれている。改名した列は自分で選ぶ
4. 「追加」を押す。分岐が 1 件増える (「配送先住所と請求先住所が同じか」が「false」を含むとき、請求先の値を出す)
5. 列ごとに繰り返し、「保存」→ 画面上部の「保存する」
注意:
- 請求先と配送先が同じ注文は A のデフォルト値のまま。請求先にその項目が無い注文は空欄になる
- 追加される分岐はふつうの条件分岐。値の組み合わせや文字変換は、一覧の「編集」で変えられる
- すでにギフト分岐がある列は「追加済み」と出て、重ねては足せない

PROC-V5 配送希望日・配送希望時間を出す

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > 対象の列の「編集」
手順:
1. 列の「編集」→ A「組み立て」→ 注文情報の「配送希望日(アプリ)」(時間なら「配送希望時間(アプリ)」) を選ぶ
2. 日付の書式を指定する (「日付フォーマット」に YYYY-MM-DD など)
3. 保存
補足: 配送日時が注文に無い注文 (動的チェックアウトなど) は空欄になる。
     注文後に配送日時を後から入れた場合の補完は、メタフィールドを使う方法がある (人間向けマニュアル「注文のメタフィールドの出力設定」)

PROC-V6 コード (JavaScript) で値を作る

場所: アプリの左メニュー「CSV」 > 画面上部のタブ「設定」 > 「CSVテンプレート」 > 対象テンプレートの「編集」 > 「フィールド定義」 > 対象の列の「編集」
手順: 列の「編集」→ A「組み立て」→ 行の種類を「コード (JavaScript)」にして、JavaScript を書く。
      「デバッグしながらコードを編集」でサンプル注文に対する実行結果を確認できる
書き方:
- order オブジェクトで注文の情報を参照する。コードは「式」で、その式の結果が出力値になる (例: `order.shippingAddress.formattedArea`)
- 1行の式はそのまま書ける。`const` を使うなど複数行のコードは、必ず即時関数 `(() => { ... return 値; })()` で書く (即時関数にしないと正しい値が出力されない。人間向けマニュアルのサンプル)
- 日付の計算には `dateCalculate(日付, 日数, "YYYY/MM/DD")` が使える。例: `dateCalculate(order.date, -5, "YYYY/MM/DD")` (配送希望日の5日前)、`dateCalculate(new Date(), 5, "YYYY/MM/DD")` (今日から5日後)。書式は day.js の形式
- `dateCalculate(order.date, …)` の結果は、配送希望日の入り方で変わる。配送希望日が日付の注文は、その日付から計算した日付を出力する。「指定しない」「指定なし」などの文字列の注文は、日付として解釈できないため空文字 (空欄) を出力する。配送希望日が入っていない注文 (値そのものが無い) は、**今日の日付から計算した日付**を出力し、空欄にならない。配送希望日が入っていない注文を別の値にしたいときは、B の条件分岐 (PROC-V4) で、判定対象を「配送希望日(アプリ)」、値を空欄にした分岐を追加する。コードがエラーになったときは空文字を出力する。
- 変数宣言は const / let を使う (var は使わない)
- エラーのときは空欄になる (出力は止まらない)
注意 (動作上の落とし穴):
- コード内に文字列 "customAttribute" をそのまま書くと、コードが実行されず「追加の詳細」の全項目を連結した文字列が出力される。
  回避: 文字列を分割する。例: const ATTR = "custom" + "Attributes"; const attrs = Array.isArray(order[ATTR]) ? order[ATTR] : [];
- メタフィールドは、その値を持たない注文では order.metafields 自体が未定義になる。order.metafields?.['namespace.key'] のように ?. で参照する。
  (素のアクセスは例外になり、その行は空欄になる)

QA

  • Q: 郵便番号を前3桁と後4桁に分けたい。 A: 「配送先郵便番号」を2列に分け、置換ルールを正規表現で設定する。例は人間向けマニュアル「出力値の文字変換 (正規表現)」 (PROC-V3)。
  • Q: 電話番号の「+81」を「0」にしたい。 A: PROC-V3。
  • Q: 都道府県と市区町村を別の列に出したい。 A: 都道府県は、都道府県ごとの条件分岐 (B) で出す。市区町村は、置換ルールの正規表現で先頭の都道府県を消す (人間向けマニュアルの例: ^(.{2}[都道府県]|.{3}県) を空に置換)。
  • Q: 条件によって配送業者や値を切り替えたい。 A: 値の切り替えは B の条件分岐 (PROC-V4)。テンプレート自体の切り替えは「振り分けルール」(別ページ)。
  • Q: ギフト注文のとき、ご依頼主を請求先にしたい。 A: 全列を一度に設定するなら PROC-V4a (基本情報の「ご依頼主をギフト対応にする」)、列ごとなら PROC-V4b。B の「テンプレートから追加」で、使う請求先の値を選んで追加する。手順は人間向けマニュアル「配送先住所と請求先住所が違う時にご依頼主の出力を変更する方法」(/blogs/csv-gift/) にもある。
  • Q: 合計金額の計算など、数式で出したい。 A: コード (JavaScript) で計算する (PROC-V6)。値が無いとき 0 として扱いたい場合の注意は人間向けマニュアルを案内する。
  • Q: メタフィールドの値を出したい。 A: 「取得設定」でメタフィールドのキーを登録し、再取得してから、注文情報の「メタフィールド」でキーを選ぶ。持たない注文は空欄になる (PROC-V6 の注意)。
  • Q: コードが動かず、属性の長い文字列が出る。 A: コードに “customAttribute” の文字列が含まれていないか確認する (PROC-V6 の落とし穴)。
  • Q: 商品のラインプロパティを出したい。 A: 商品のラインプロパティは商品ごとの情報のため、人間向けマニュアルでは「商品ごとに行を分割する」を ON にしたうえで、ラインプロパティの Key を指定する手順になっている。実際の画面での手順はストアを見て案内する (ESCALATE)。

ESCALATE

状況依頼する情報
列の値が期待と違う・空欄になるテンプレート名、列の名前、期待する値、対象の注文番号、その列の設定のスクリーンショット (A・B・C)
正規表現・コードが動かないコードまたは正規表現そのもの、対象の注文の該当項目の実際の値、エラーの表示
ラインプロパティ・メタフィールドが出ない設定したキー名、注文の「追加の詳細」/ メタフィールドのスクリーンショット、「取得設定」の画面
運送会社の指定フォーマットに合わせたい運送会社名、取込形式の仕様 (列数・列順・必須項目・文字コード)。個別の設計になるため、開発元への問い合わせの文面を下書きする

SEE

インストール
テックブログ