Vendure シードデータ定義ガイド(Ritsubi向け)¶
このドキュメントは、Vendure の標準 InitialData 仕様と当プロジェクトの追加ルールに沿って、シードデータを安全に定義・実行するための手順とチェックポイントをまとめたものです。Vendure の標準APIと互換性が取れないフィールド定義が原因でエラーが発生しやすいため、以下の方針を必ず守ってください。
前提¶
- シードは ts-node で直接実行する(トランスパイル済みバンドルは不要)。
- 実行例:
pnpm --filter ritsubi-vendure-server run db:seed:local - 実行前に
.env.localでDATABASE_URL,SUPERADMIN_USERNAME/SUPERADMIN_PASSWORDを設定済みであること。 - スキーマ初期化込みのクリーンリセットは
pnpm --filter ritsubi-vendure-server run db:reset:cleanを使用。
InitialData の定義ルール(apps/vendure-server/src/data/initial-data.ts)¶
Vendure Populator が要求する標準型に合わせる。独自キーを増やさない。
defaultZone: ゾーン名と完全一致させる。現在は"Japan"。zones:{ name, memberCodes }。JP を必ず含める。countries:{ code, name, zone }。zoneはzones.nameと一致させる。taxRates:{ name, percentage }のみ。valueやenabledなど独自キーは入れない。shippingMethods:{ name, price }のみ。計算式はPopulatorが自動付与するため不要。paymentMethods:{ name, handler }。handlerはdummyPaymentHandlerなど既存の ConfigurableOperation を指定。collections: フィルタはfacet-value-filterのみ使用。コードは ASCII、表示名は日本語可。
Product CSV の定義(apps/vendure-server/src/data/products.csv)¶
Vendure CLI が期待するヘッダーに厳密に合わせる。必須列と推奨列のみを使い、camelCase を守る。
必須/利用中のヘッダー(順不同可だが記載漏れ禁止):
name,slug,description,assets,facets,optionGroups,optionValues,sku,price,taxCategory,variantAssets,variantFacets,stockOnHand,trackInventory,collections,minimumOrderQuantity,volumeDiscountTiers
注意点:
- taxCategory は initial-data.ts の taxCategories 名称と一致させる(例: 標準税率10%)。
- 価格は整数(税込/税抜の扱いはチャネル設定に依存)。現在は pricesIncludeTax = false。
- 文字列は UTF-8、日本語可。コード系は camelCase/kebab-case を徹底。
識別子・コードの命名規約¶
code系は camelCase を原則(Vendure 内部で normalize される場合もあるが、事前に自分で決める)。- 旧フィールド名の後方互換は残さない。
customerCode/shipToCodeに統一済み。 - PaymentMethod の
code重複は禁止。シード後にenforceUniquePaymentMethodCodesで自動整理されるが、定義段階で必ずユニークにする。
実行フローとチェックポイント¶
pnpm --filter @ritsubi/plugins run build(クリーンリセット時に自動実行される)node -r ts-node/register -r tsconfig-paths/register scripts/synchronize-schema-once.tspnpm --filter ritsubi-vendure-server run migrate:runpnpm --filter ritsubi-vendure-server run db:seed:local- ドライ整合性チェック (DB書き込みなし)
pnpm --filter ritsubi-vendure-server run seed:validate -- --products ./apps/vendure-server/src/data/products.csv --jsonでJSON出力- defaultZone/zones/countries/taxCategories/CSVヘッダー/数値/重複の検査を行い、失敗時は exit code 1
- シード完了後に管理画面で以下を確認
- チャネルの言語/通貨: JA / JPY
- TaxRate: 10% / 8% / 0% が作成済み
- ShippingMethod: 通常配送・速達の2件が作成済み
- PaymentMethod: 重複なし (
bank-transfer,credit-card,cash-on-delivery(-card)など) - 商品CSVが全件取り込まれていること
よくある落とし穴と回避策¶
- defaultZone が一致せず Populator が失敗:
defaultZoneとzones[].nameを同一にし、JP を memberCodes に含める。 - TaxRate で NULL
valueエラー:percentageキー以外を入れない。value/enabledは不要。 - ShippingMethod で toString エラー:
price数値のみを定義する。独自キーを入れない。 - 旧フィールド依存のプラグイン:
customerNumberなど廃止済みフィールドを参照しないようプラグイン/ドキュメントを更新する。
データ整合性チェック(将来拡張)¶
現状は DB 書き込みを伴うシードのみ。将来的に「dry-run バリデーション」を追加する場合は以下の方針:
- CSV/InitialData を JSON Schema で検証
- Vendure の InitialData 型に合わせた静的チェック(TypeScript型 + Zod)
- DB に書き込まないモックサービスで populate 相当の整合性チェックを行う
参照¶
- Vendure Docs:
InitialData/populate/Populatorの仕様 - プロジェクト固有設定:
apps/vendure-server/src/seed-data.ts,apps/vendure-server/src/data/initial-data.ts