株式会社キャッチアップで働くエンジニアのブログです。

技術雑記

【baserCMS5】baserCMS5向けCSVインポート基盤 BcCsvImportCore を作りました

Twitter bookmark Facebook LINE Pocket Feedly RSS

baserCMS5でCSVインポート機能を作ろうとすると、毎回けっこう似たような処理が必要になります。

 

単純な一括登録だけでなく、

  • 大量データを安全に取り込みたい
  • バリデーションを厳密にしたいケースと、多少のエラーは流したいケースがある
  • 処理の中断・再開をしたい
  • エラーになった行だけを確認したい
  • 商品、受注、ブログ記事など対象ごとに実装を切り替えたい

案件ごとに毎回ゼロから作るのは大変なので、こういった共通部分をまとめて扱えるように BcCsvImportCore を開発しました。

 

baserCMS5でCSVインポート機能を作ろうとすると、毎回けっこう似たような処理が必要になります。

単純な一括登録だけでなく、

  • 大量データを安全に取り込みたい
  • バリデーションを厳密にしたいケースと、多少のエラーは流したいケースがある
  • 処理の中断・再開をしたい
  • エラーになった行だけを確認したい
  • 商品、受注、ブログ記事など対象ごとに実装を切り替えたい

案件ごとに毎回ゼロから作るのは大変なので、こういった共通部分をまとめて扱えるように BcCsvImportCore を開発しました。

 

BcCsvImportCore とは

BcCsvImportCore は、baserCMS5の管理画面からCSVを分割インポートできる汎用プラグインです。
事前確認モード / スキップモード のバリデーションモード、ジョブ管理、中断・再開、エラーCSV出力など、実運用で欲しくなる機能を共通化しています。

BcCsvImportCore の考え方

このプラグインは、CSVインポートの共通基盤を担当します。

たとえば、

  • 管理画面
  • ジョブ管理
  • 分割インポート
  • エラー管理
  • ログ出力
  • テンプレートCSV生成

といった共通処理は BcCsvImportCore 側で持ちます。

一方で、実際にどのテーブルに、どう登録するかは派生プラグイン側で実装する構成です。
そのため、商品・受注・ブログ記事など、用途ごとにインポート機能を作り分けやすくしています。

コア部分を使ったサンプル3つ

BcCsvImportCore 単体では使わず、用途別のプラグインと組み合わせて使います。

まずは、コアの使い方や拡張方法が分かるサンプルとして、次の3つを用意しました。

BcCsvImportSampleProducts 動作確認・開発学習用サンプル

一番シンプルなサンプルです。

まずはこれで、CSVインポート全体の流れや、派生プラグインの作り方を確認できます。

BcCsvImportSampleOrders 受注データインポートのサンプル実装

商品より少し実務寄りの例です。

受注データのような業務データをどう取り込むかの参考になるようにしています。

BcCsvImportSampleOrderDetails 1対多の受注ヘッダー・受注明細インポートのサンプル実装

親子関係のあるデータを扱うサンプルです。
単純な1テーブルのインポートだけでなく、少し複雑な構成にも対応できる形をイメージしています。

実際の業務でもこういうデータ形式は多々あるのではないでしょうか。

サンプルだけど実際に使えるプラグイン

BcCsvImportBlogPosts ブログ記事インポートプラグイン

これはサンプル的な位置づけもありますが、実際の案件でも使えるように作っています。
ブログ記事の移行や一括登録をしたい場面で、そのまま活用しやすい内容です。

さらに、ブログ選択付きのインポート画面を実装しているので、
「共通基盤を使いながら、用途に合わせて画面や処理を広げる」例としても参考になると思います。

こんな場面を想定しています

この仕組みは、たとえば次のようなケースを想定しています。

  • baserCMS5でCSVインポート機能を効率よく作りたい
  • 案件ごとに似た処理を繰り返したくない
  • 商品、受注、記事など対象ごとに作り分けたい
  • ブログ記事移行をCSVで進めたい
  • サンプルを見ながら独自プラグインを作りたい

まとめ

BcCsvImportCore は、baserCMS5向けCSVインポート機能の共通部分をまとめるために開発したプラグインです。

まずは

  • BcCsvImportSampleProducts
  • BcCsvImportSampleOrders
  • BcCsvImportSampleOrderDetails

で仕組みを確認してもらい、
実用寄りのものとして BcCsvImportBlogPosts も使ってもらえたらうれしいです。

BcCsvImportUsersとか作ってユーザーデータの一括登録とかもあると便利かもです(そのうち作るかも?!)

baserCMS5でCSVインポートを作る機会がある方にとって、土台として役立つものになればと思っています。

ソースコードは下記からどうぞ

Twitter bookmark Facebook LINE Pocket Feedly RSS