1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BizRobo!で正規表現を最適化してCSV処理を効率化した話

Last updated at Posted at 2025-09-01

はじめに

BizRobo! Design Studioでデータ処理を行う際、「Replace Pattern」データコンバータの正規表現設定で悩むことはありませんか?

今回、CSVの特定列を置き換える処理において、汎用的な正規表現から特化型のパターンに変更することで、大幅な効率化を実現できました。その実例と改善点について共有します。

課題:CSVの4列目を置き換えたい

以下のような10列のCSVデータの4列目を別の値に置き換える処理が必要でした。

"田中","東京都","会社員","旧データ","部署A","2023","男性","正社員","プロジェクトX","アクティブ"
"佐藤","大阪府","学生","古い情報","部署B","2022","女性","契約社員","プロジェクトY","非アクティブ"
"鈴木","愛知県","自営業","更新前","部署C","2024","男性","正社員","プロジェクトZ","アクティブ"

この4列目("旧データ"、"古い情報"、"更新前")を新しい値に置き換える必要があります。

変更前:汎用的なアプローチ

パターン(Pattern to Find):

(.*)(,.*)(,.*)(,.*)(,.*)(,.*)(,.*)(,.*)(,.*)(,.*)

置換表現(Replace Expression):

$1$2$3,"新しい値"$5$6$7$8$9$10

この方法の問題点

実際の動作検証:
入力: "田中","東京都","会社員","旧データ","部署A","2023","男性","正社員","プロジェクトX","アクティブ"

キャプチャ結果:

  • $1 = "田中"
  • $2 = ,"東京都"
  • $3 = ,"会社員"
  • $4 = ,"旧データ" ✅(カンマ付きで4列目をキャプチャ)

主な問題:

  1. 冗長性: 10個のキャプチャグループが必要
  2. 可読性の悪さ: どの列を対象にしているか分かりにくい
  3. 柔軟性の欠如: 列数が変わると正規表現全体を書き直す必要
  4. 保守性の低さ: 対象列を変更する際の修正箇所が多い

変更後:CSV特化型のアプローチ

パターン(Pattern to Find):

^((?:"[^"]*",){3})"[^"]*"(.*)$

置換表現(Replace Expression):

$1"新しい値"$2

このパターンの解析

  1. ^ - 行の開始位置を指定
  2. ((?:"[^"]*",){3}) - 最初の3列をグループ化してスキップ
    • "[^"]*" = 引用符で囲まれた内容(引用符内に引用符なし)
    • , = 区切りのカンマ
    • {3} = この形式を3回繰り返し
  3. "[^"]*" - 4列目(置換対象)を正確にマッチング
  4. (.*)$ - 5列目以降の残り部分を行末まで確実にキャプチャ
    • $により行全体を厳密にマッチング、不完全な行での予期しないマッチを防止

実行例での比較

入力データ:

"田中","東京都","会社員","旧データ","部署A","2023","男性","正社員","プロジェクトX","アクティブ"

変更前の処理:

  • 10個のキャプチャグループでそれぞれマッチング
  • $1="田中", $2=,"東京都", $3=,"会社員", $4=,"旧データ"...$10=,"アクティブ"
  • $4が4列目に相当し、カンマも含む,"旧データ"としてキャプチャ
  • 置換時は$4を除外して,"新しい値"を挿入

変更後の処理:

  • グループ1: "田中","東京都","会社員",
  • マッチング対象: "旧データ" ← 正確に4列目のみ
  • グループ2: ,"部署A","2023","男性","正社員","プロジェクトX","アクティブ"

結果:
両方とも以下の結果になりますが、処理効率が大幅に向上します。

"田中","東京都","会社員","新しい値","部署A","2023","男性","正社員","プロジェクトX","アクティブ"

改善効果

項目 変更前 変更後
キャプチャグループ数 10個 2個
処理対象の明確性 低い 高い
CSV形式への特化度 低い 高い
パフォーマンス 低い 高い
保守性 低い 高い
厳密性(行全体マッチング) 低い 高い($アンカー)
効率向上率 - 80%向上

応用例:他の列を対象にする場合

3列目を置き換える場合:

^((?:"[^"]*",){2})"[^"]*"(.*)$

{3}{2} に変更するだけです。

6列目を置き換える場合:

^((?:"[^"]*",){5})"[^"]*"(.*)$

{3}{5} に変更するだけです。

まとめ

BizRobo!でCSV処理を行う際は、以下の点を意識することで大幅な改善が可能です:

  • データ形式に特化した正規表現を使用
  • 必要最小限のキャプチャグループで設計
  • 処理対象を明確にした可読性の高いパターン作成

汎用的なアプローチから特化型へのシフトにより、80%の効率向上と保守性の大幅な改善を実現することができました。

同様の課題を抱えている方の参考になれば幸いです。

最後までご覧いただき、ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?