
今回の記事は Shopify App Store で提供されている、Shopify 顧客メタフィールド CSV のインポート・エクスポートに対応した Shopify アプリについての記事です。
「顧客メタフィールド」とは、Shopify の標準項目(メールアドレス、氏名、住所、電話番号など)では足りない情報を、顧客一人ひとりに自由に追加できるカスタム属性のことです。Shopify 管理画面の「設定 > メタフィールドとメタオブジェクト > お客様」から定義を作成し、namespace と key、タイプ(テキスト、数値、日付、リストなど)を指定することで、ストア独自の情報を保存できるようになります。
たとえば、会員ランク・誕生日・サイズ情報・担当営業の社員コードなど、Shopify 標準の項目では表現できないストア独自のデータを保存するのに使われます。Liquid やテーマ拡張、Shopify Flow、Admin API からも参照できるため、マイページのパーソナライズ表示や、自動アクションのトリガーとしても活用されています。
しかし、顧客が数千〜数万件を超えてくると、Shopify 管理画面で 1 件ずつメタフィールドを編集していくのは現実的ではありません。「会員ランクを一斉に見直したい」「外部システムから取り込んだデータをそのまま反映したい」というニーズが必ず出てきます。そこで活躍するのが、顧客メタフィールドを CSV で一括インポート・エクスポートできる Shopify アプリです。
顧客メタフィールドの CSV 管理について調べるにあたり、以下の記事を参考にしています。
大量の顧客データを一括更新できる
数千件、数万件の顧客が登録されているストアでも、CSV にまとめて編集してアップロードすれば、まとめて値を更新できます。1 件ずつ Shopify 管理画面で開いて編集する作業から解放されます。
Excel や Google スプレッドシートで編集できる
日常的に使い慣れたツールで編集できるため、関数や条件付き書式、置換などを駆使して効率的にデータを整形できます。複数人での共同編集も容易です。
外部システムと連携しやすい
ERP・CRM・MA ツールなどとデータをやり取りする際、CSV は最も汎用性の高いフォーマットです。エクスポートした CSV をそのまま他のシステムに取り込むことができます。
データのバックアップ手段になる
定期的にエクスポートしておけば、顧客メタフィールドのスナップショットを残せます。万が一誤った更新を行ってしまった場合でも、過去の CSV から元に戻すことができます。
属人化の解消
メタフィールドの更新をエンジニアではない担当者でも安全に行えるようになり、運用の属人化を解消できます。引き継ぎ時にもスムーズです。
パーソナライズ施策の幅が広がる
会員ランク・誕生日・好みなどを CSV で一括設定できれば、誕生日クーポンの自動配信や、ランク別のオファーといったパーソナライズ施策を迅速に展開できます。
顧客メタフィールド CSV アプリを選ぶ際は、以下の観点でチェックすると失敗が少なくなります。
「とにかく顧客メタフィールドを CSV で一括管理できれば良い」のか、「商品・注文・翻訳など多種多様なデータをまとめて扱いたい」のか、用途を明確にしたうえでアプリを選ぶことが重要です。
全顧客のメタフィールドを CSV で一括管理できる、シンプル & 日本語対応のアプリ
「シンプル顧客メタフィールド CSV インポート・エクスポート」は、株式会社 UnReact が提供する、顧客メタフィールドの CSV 管理に特化した Shopify アプリです。すべての顧客のメタフィールドを 1 クリックで CSV としてエクスポートし、Excel や Google スプレッドシートで編集してインポートするだけで、変更内容を一括反映できます。インポート前に CSV の内容を自動でチェックする仕組みが備わっているため、入力ミスによる事故を未然に防げます。メタフィールドのカラムはストアの定義から自動生成されるため、面倒な事前マッピングも不要です。
Basic Plan 月額 $9.99 / 年払い $99.99(実質 2 ヶ月分無料)。インストールから 7 日間は無料でお試し可能。
顧客数・メタフィールド数に関わらずすべての機能を利用できるシンプルな単一プランです。
詳細なご利用ガイドはこちら

商品・コレクション・注文・顧客・割引を CSV で一括インポート・エクスポート
WebToffee が提供する、商品・コレクション・注文・顧客・割引などを CSV で一括インポート・エクスポートできる多目的アプリです。WooCommerce API・FTP/SFTP・公開 URL からも商品をインポートできるため、他プラットフォームからの移行用途にも対応しています。

ほぼすべての Shopify データを Excel / Google Sheets / CSV で扱える定番ツール
ITissible が提供する、Shopify データのバルクインポート・エクスポートの定番アプリです。商品・コレクション・顧客・B2B カンパニー・割引・下書注文・注文・支払い・ページ・ブログ・リダイレクト・ファイル・メタオブジェクト・メタフィールド・メニュー・翻訳など、ほぼあらゆるデータに対応します。

WooCommerce の CSV を Shopify 用の CSV に変換する移行特化ツール
Vostari が提供する、WooCommerce からエクスポートした CSV を Shopify のインポート用フォーマットに変換するための専用ツールです。Shopify 標準の CSV インポート機能と組み合わせて、商品・顧客データを WooCommerce から Shopify に移行する用途に特化しています。

Matrixify 互換のモダンなインポート・エクスポートツール。AI 連携も可能
Abnoba LLC が提供する、Matrixify 互換のファイルフォーマットを採用しつつ、より新しい Shopify のデータ型にも対応するモダンなインポート・エクスポートツールです。CLI と MCP サーバーを提供しており、ChatGPT や Claude などの AI エージェントと連携してデータ操作を自動化できます。

注文データを ERP / 会計向けにきれいな CSV で書き出す注文エクスポート専用ツール
Didit が提供する、Shopify の注文を ERP・会計システム向けの CSV に整形してエクスポートできるアプリです。日付範囲指定・新規分のみ・全件など柔軟な抽出条件と、Shopify フィールドから任意のカラム名へのマッピング機能を備えています。
「アプリを使わずに自力で実装したい」という開発者向けに、Shopify Admin API(GraphQL)で顧客メタフィールドを CSV と相互変換するコード例を紹介します。Node.js を想定しています。
Shopify では大量データを扱う場合、bulkOperationRunQuery を使って非同期に取得するのが定石です。
mutation {
bulkOperationRunQuery(
query: """
{
customers {
edges {
node {
id
email
firstName
lastName
metafields {
edges {
node {
namespace
key
type
value
}
}
}
}
}
}
}
"""
) {
bulkOperation {
id
status
}
userErrors {
field
message
}
}
}
bulk operation が完了したら、Shopify が JSONL 形式のファイル URL を返してくれるので、それをダウンロードして CSV に整形します。
import { writeFileSync } from 'node:fs';
type CustomerRow = {
id: string;
email: string | null;
firstName: string | null;
lastName: string | null;
metafields: Record<string, string>;
};
// JSONL のテキストをパースして顧客とメタフィールドの対応を組み立てる
const buildCustomerRows = (jsonl: string): CustomerRow[] => {
const lines = jsonl.split('\n').filter(Boolean);
const customers = new Map<string, CustomerRow>();
for (const line of lines) {
const obj = JSON.parse(line) as Record<string, unknown>;
const id = obj.id as string;
const parentId = obj.__parentId as string | undefined;
if (!parentId) {
// 顧客本体の行
customers.set(id, {
id,
email: (obj.email as string) ?? null,
firstName: (obj.firstName as string) ?? null,
lastName: (obj.lastName as string) ?? null,
metafields: {},
});
} else {
// 親に紐づくメタフィールド行
const parent = customers.get(parentId);
if (!parent) continue;
const columnName = `Metafield: ${obj.namespace}.${obj.key} [${obj.type}]`;
parent.metafields[columnName] = (obj.value as string) ?? '';
}
}
return [...customers.values()];
};
CSV の出力は、固定カラム+ストアに登場するすべてのメタフィールドカラムを並べる形にします。
const escapeCsv = (value: string): string => {
// ダブルクォート・カンマ・改行を含む場合のみクォートで囲む
if (/[",\n]/.test(value)) {
return `"${value.replace(/"/g, '""')}"`;
}
return value;
};
const writeCsv = (rows: CustomerRow[], outputPath: string): void => {
const metafieldColumns = [
...new Set(rows.flatMap((row) => Object.keys(row.metafields))),
].sort();
const header = ['ID', 'Email', 'FirstName', 'LastName', ...metafieldColumns];
const lines = [header.join(',')];
for (const row of rows) {
const cells = [
row.id,
row.email ?? '',
row.firstName ?? '',
row.lastName ?? '',
...metafieldColumns.map((col) => row.metafields[col] ?? ''),
].map(escapeCsv);
lines.push(cells.join(','));
}
writeFileSync(outputPath, lines.join('\n'), 'utf-8');
};
CSV を読み込み、Metafield: namespace.key [type] のカラム名を分解して、metafieldsSet ミューテーションのインプットを組み立てます。
import { readFileSync } from 'node:fs';
type MetafieldInput = {
ownerId: string;
namespace: string;
key: string;
type: string;
value: string;
};
const parseMetafieldColumn = (
column: string,
): { namespace: string; key: string; type: string } | null => {
// 例: "Metafield: custom.member_rank [single_line_text_field]"
const match = column.match(
/^Metafield:\s*([^.]+)\.([^\s]+)\s*\[(.+)\]$/,
);
if (!match) return null;
return { namespace: match[1], key: match[2], type: match[3] };
};
const buildMetafieldInputs = (csv: string): MetafieldInput[] => {
const [headerLine, ...bodyLines] = csv.split('\n').filter(Boolean);
const headers = headerLine.split(',');
const idIndex = headers.indexOf('ID');
if (idIndex < 0) throw new Error('ID 列が見つかりません');
const inputs: MetafieldInput[] = [];
for (const line of bodyLines) {
const cells = line.split(',');
const customerId = cells[idIndex];
if (!customerId) continue;
headers.forEach((header, columnIndex) => {
const parsed = parseMetafieldColumn(header);
if (!parsed) return;
const value = cells[columnIndex] ?? '';
if (value === '') return; // 空欄はスキップ
inputs.push({
ownerId: `gid://shopify/Customer/${customerId}`,
namespace: parsed.namespace,
key: parsed.key,
type: parsed.type,
value,
});
});
}
return inputs;
};
metafieldsSet は 1 回のミューテーションで最大 25 件まで指定できるため、25 件ずつに分割しながら更新します。
mutation MetafieldsSet($metafields: [MetafieldsSetInput!]!) {
metafieldsSet(metafields: $metafields) {
metafields {
id
namespace
key
}
userErrors {
field
message
}
}
}
このように自前実装することも不可能ではありませんが、エラーハンドリング・進捗管理・大量データ対応など、本番運用に耐えるレベルで作り込むのは想像以上に重たい作業です。運用工数とコストのバランスを考えると、最初は専用アプリを導入するのが現実的な選択になるはずです。
各アプリの料金プランを比較すると、以下のような特徴があります。
「顧客メタフィールドの CSV 管理だけを安価に行いたい」場合は シンプル顧客メタフィールド CSV インポート・エクスポート が最もコストパフォーマンスに優れています。マルチデータを扱いたいなら Matrixify や Altera、注文 ERP 連携が中心なら Order Blender が選択肢になります。
各アプリの日本語対応状況は以下のとおりです。
日本人スタッフが運用する場合、管理画面の言語は大きな影響を与えます。日本語に正式対応している シンプル顧客メタフィールド CSV インポート・エクスポート は、エラーメッセージ・進捗バッジまで日本語化されているため安心です。
最もおすすめできるのは シンプル顧客メタフィールド CSV インポート・エクスポート です。月額 $9.99 という分かりやすい価格で、「顧客メタフィールドを CSV で出して、編集して、戻す」というコア機能だけに集中して作り込まれています。事前のテンプレート設定や複雑な権限設定が不要で、ストアにある顧客メタフィールド定義を読み取ってカラムを自動生成してくれるため、初回利用時から迷わず使えるのが大きな魅力です。
加えて、インポート前のバリデーションと進捗のリアルタイム表示によって、「気付かないうちに本番データを壊してしまった」という運用事故のリスクを大きく減らせます。日本語の管理画面と、CSV 仕様ページから定義画面へのワンクリック遷移など、運用担当者の使い勝手にもしっかり配慮されています。これらの点から、顧客メタフィールドの CSV 管理を始める最初のアプリとして自信を持っておすすめできます。
今回は、Shopify で顧客メタフィールドを CSV でインポート・エクスポートできるアプリ 6 選をご紹介しました。「とにかく安価に・手軽に・日本語で始めたい」のであればシンプル顧客メタフィールド CSV インポート・エクスポートが最適です。一方で、商品・注文・翻訳など複数データを総合的に扱いたい場合は Matrixify や Altera を、注文の ERP 連携をしたい場合は Order Blender を組み合わせるとよいでしょう。
ストアの規模や業務の流れに合わせて、ぜひ最適なアプリを見つけてみてください。