『業務 CSV/Excel』は地味だが事故が多い領域
業務システムで CSV/Excel バッチ処理は依然多く、文字コード/型変換/エラー処理での事故が頻発します。本記事では編集部の視点で、安全な処理の実務を公開情報をもとに整理します。スケジュールジョブ もご参考に。
典型的な失敗パターン
(1) 文字コード違い:Shift_JIS/CP932/UTF-8 の判別ミス。(2) 大規模ファイルで OOM:全件読込。(3) 数値の型崩れ:Excel 自動変換。(4) 改行コード:CR/LF/CRLF 混在。(5) 区切り文字:データ内に含まれる場合。
文字コード対応
(1) BOM の判別:UTF-8 BOM/UTF-16。(2) chardet/Universal Charset Detector:自動判別。(3) 明示指定が安全:ファイル仕様で固定。(4) iconv:変換ツール。(5) Excel は UTF-8 BOM が安全。日本語 CSV は CP932 が依然多い(公開情報をもとに)。
ストリーミング処理
(1) 1行ずつ読込:メモリ効率。(2) Node.js stream:パイプライン。(3) Python の csv.reader:ジェネレータ。(4) Apache Commons CSV (Java)。(5) 並列処理:チャンク分割。Python 非同期 もご参考に。
Excel ファイルの扱い
(1) xlsx (OOXML) は ZIP+XML。(2) SheetJS (JS) / openpyxl (Python)。(3) 大規模 Excel は分割推奨。(4) 数値の型保持:cell.value vs cell.text。(5) Excel 関数:保存時に値変換。
エラー処理戦略
(1) 1行エラーで全体停止しない:エラーログ+続行。(2) エラー行を別ファイルへ:再処理用。(3) 進捗保存:再開可能に。(4) 結果サマリ:成功/失敗件数。(5) 通知:Slack 等。冪等性設計 も合わせて。
セキュリティ
(1) CSV Injection:=cmd 注入。(2) 個人情報の暗号化:保存時。(3) ファイル削除ポリシー。(4) アクセス制御。(5) 監査ログ。Webセキュリティ実践 もご参考に。
失敗しがちなパターン
(1) readFile で OOM。(2) 文字コード assumption:本番で文字化け。(3) 1件失敗で全停止。(4) 進捗保存なし:途中再開困難。(5) テストデータが小規模のみ。対策は、(1)streaming、(2)明示指定+検証、(3)エラー行隔離、(4)checkpoint、(5)大規模テスト、です。