CSV取り込みで「全部やり直し」を減らす。プレビュー・エラー表示・確定の設計

CSV取り込みで「全部やり直し」を減らす。プレビュー・エラー表示・確定の設計 システム開発

CSVを取り込んだら、日付がずれた。空欄で止まり、どこまで登録されたかも分からない。業務システムの取り込み画面は、ボタンを置くところより、確定前に何を見せるかが使い勝手を左右します。

「選ぶ→内容を確認する→確定する」を分けると、入力と登録結果を説明しやすくなります。以下は架空の顧客台帳の取り込み設計です。実際の顧客データや、本番で検証したシステムの紹介ではありません。

最初に、追加と更新の意味を決める

同じ顧客IDが入ったとき、新しい行を追加するのか、既存の情報を更新するのかで設計が変わります。メールアドレスが同じでも別の顧客の場合があり、名前だけでは一意に決まりません。取り込みの単位を決めるIDと、上書きを許す列を先に決めます。

確定の前に、内容を見る。ファイルを選ぶ:列の対応を決める。プレビュー:追加・更新・エラーを確認。確定:確認した内容を登録する。架空の顧客台帳の取り込み設計
図1:確定の前に、内容を見る。架空の顧客台帳の取り込み設計
確認することプレビューに出す例
列の対応顧客番号 → 顧客ID、連絡先 → メール
処理の種類新規12件、更新3件、変更なし2件
エラー8行目:顧客IDが空
上書きの範囲更新対象は連絡先のみ
確定後の結果登録件数、処理ID、エラー一覧

エラーは、直す場所と理由を示す

「形式が違います」だけでは、利用者はファイルを開き直して探すことになります。行番号、列名、理由を示し、可能なら修正例も添えます。個人情報を含む場合は、画面やダウンロードするエラー一覧に必要以上の内容を出さないようにします。

行番号は、見出しを1行目とするかなど数え方をそろえます。複数行の値を含むCSVでは、単純な改行数とデータ行の番号が一致しない場合があります。ファイル上の位置と画面の表示番号を、仕様として決めておきます。

全件中止か、一部登録かを選べるようにする前に

一部だけ登録できると便利ですが、再度ファイルを取り込んだ際に同じデータを増やすおそれがあります。最初は、エラーが1件でもあれば確定できない方式にする選択もあります。部分登録を採用するなら、成功したID、失敗した行、再実行対象が区別できる記録が必要です。

失敗後に困らない記録。登録済み:成功した業務ID。未登録:行と列、エラーの理由。再実行:どの行を再処理するか。一部登録する場合は、結果を分けて残す
図2:失敗後に困らない記録。一部登録する場合は、結果を分けて残す

プレビューと確定で、別の内容を登録しない

利用者が確認した後にファイルを差し替えたり、別タブで台帳が更新されたりすることがあります。確定時にどのファイルと条件を使うかを固定し、更新競合があれば再確認を求めます。プレビュー時点の件数だけを信じて、確定時の検証を省かないようにします。

処理ID:IMPORT-検証用番号
対象:顧客台帳
入力:ファイル名・内容の識別情報・列の対応
結果:新規/更新/変更なし/エラー件数
確定条件:エラーなし、確認内容から入力が変わっていない
再実行:同じ業務IDが増えない方針を定義
記録:実行者・日時・結果・エラー一覧

CSVの読み方と、業務上の検証は分ける

RFC 4180は、カンマや改行を含む値を引用符で扱う形式を説明しています。文字列を単純にカンマで分割する処理では、こうした値を正しく読めません。CSVを読む処理に加え、IDの先頭0、日付、必須項目、重複など、業務の検証を別に用意します。

取り込み画面を依頼するときは、成功画面だけでなく、「何行目を直せばよいか分かるか」「登録済みをもう一度入れたらどうなるか」も確認します。自動転記の重複を考えるなら、キーとロックの設計も参考になります。

参考資料・確認範囲

2026年11月2日確認。本文の例・図・ひな型は本記事用に作成したものです。以下は、設計や事例の背景として参照した一次資料です。

RFC 4180:CSVの一般的な形式

コメント

タイトルとURLをコピーしました