bagisto-data-transfer について
Bagisto のファイル一括インポートを実装する開発スキルです。商品、顧客、税率向けに、インポーター契約や形式共通のソース、キューによるバッチ処理を解説します。
主な機能
- 01商品、顧客、税率のインポート
- 02インポーター契約と登録方法
- 03CSV、XLS、XLSX、XML ソース
- 04キューによる検証とバッチ処理
- 05関連付けとインデックス処理
活用シーン
- 01Bagisto にインポーターを追加
- 02停止したインポート処理の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bagisto/ agent-skills --skill bagisto-data-transferインストール後、Claude Code で/bagisto-data-transferを入力して読み込まれたか確認します。
同梱ファイルimporters.mdpipeline.md
詳細
データ転送
packages/Webkul/DataTransfer は、ファイルから Bagisto に大量のレコードを取り込みます。
このパッケージには、商品、顧客、税率の 3 つのインポーターと、バッチ単位で検証、インポート、関連付け、インデックス作成を行うキュー処理のパイプラインが含まれています。
インポート専用です。 ここにはエクスポーターはありません。データのエクスポートには DataGrid 独自の機能を使用してください。詳しくは bagisto-datagrid-development スキルを参照してください。
参照ファイル
| ファイル | 読み込むタイミング |
|---|---|
| importers.md | インポーターを作成または変更するとき — コントラクト、検証、バッチ |
| pipeline.md | ステートマシン、キュージョブ、停止したインポートのデバッグ |
レジストリ
インポーターは Config/importers.php に登録し、トップレベルの importers キーにマージします(data_transfer.importers ではありません)。
'tax_rates' => [
'title' => 'data_transfer::app.importers.tax-rates.title',
'importer' => 'Webkul\DataTransfer\Helpers\Importers\TaxRate\Importer',
'sample_paths' => [
'csv' => 'bagisto-data-transfer/samples/csv/tax-rates.csv',
'xls' => 'bagisto-data-transfer/samples/xls/tax-rates.xls',
'xlsx' => 'bagisto-data-transfer/samples/xlsx/tax-rates.xlsx',
'xml' => 'bagisto-data-transfer/samples/xml/tax-rates.xml',
],
],
管理画面の作成・編集画面は config('importers') を直接参照するため、新しいエントリーはビューを変更せずに形式のドロップダウンに表示されます。Import は config('importers.'.$type.'.importer') でクラスを解決します。配列キーはインポートレコードに保存される type なので、キーの名前を変更すると既存のインポートが孤立します。
4 つのサンプルパスをすべて指定してください。UI では形式ごとにサンプルをダウンロードできます。ファイルが見つからない場合は、適切なフォールバックではなくリンク切れになります。
インポーターのコントラクト
Helpers\Importers\AbstractImporter を継承し、次の 2 つのメソッドを正確に実装してください。
abstract public function validateRow(array $rowData, int $rowNumber): bool;
abstract public function importBatch(ImportBatchContract $importBatchContract): bool;
それ以外は、$validColumnNames、$masterAttributeCode、$permanentAttributes、$messages などのプロパティとして宣言するか、フックとしてオーバーライドします。importers.md を参照してください。
ソース
Helpers\Sources\ には CSV、XLS、XLSX、XML があり、いずれも AbstractSource を継承しています。AbstractSource は、行を反復処理するイテレーターであり、generateErrorReport(array $errors) を備えています。インポーターがファイルを直接開くことはありません。$this->source を読み取るため、同じインポーターですべての形式に対応できます。
必須事項
- データを書き込む前に、行を検証します。
validateRow()は副作用のない処理にしてください。ファイル全体に対して実行され、stop-on-errorsの場合はインポートがimportBatch()に到達しないこともあります。 - ファイル全体を行単位で処理せず、必ずバッチで処理してください。
AbstractImporter::BATCH_SIZEは 100 で、パイプラインはバッチごとに 1 つのジョブをディスパッチします。ファイル全体をメモリに読み込むインポーターは、この設計の利点を損ない、この機能が対応する対象のファイルサイズでは処理に失敗します。 - Bagisto のほかの処理と同様に、書き込みにはリポジトリを使用してください。
- すべてのメッセージで、23 のすべてのロケールにおいて、
data_transfer::名前空間のtrans()を使用してください。 isLinkingRequired()/isIndexingRequired()を実態に即して宣言してください。trueを返すと、バッチごとにキューのステージが追加されます。関連付けが必要なのにfalseを返すと、エラーが発生しないままレコードの関連付けが不完全な状態になります。- 検証後の処理にはキューが稼働している必要があります。
QUEUE_CONNECTION=syncの場合、インポート全体がリクエスト内で同期実行されるため、実際のファイルではタイムアウトします。
必須サブスキル: 変更完了とする前に、bagisto-change-verification を使用してください。