CSV差分比較で確認できること
更新前と更新後のCSVがあるとき、確認したいのはファイル全体が違うかどうかだけではありません。同じレコードをIDで対応付け、追加・削除されたレコードと、既存レコード内で変わった列を分けて確認します。
| 利用場面 | 確認する内容 |
|---|---|
| 商品・顧客マスター更新 | 追加、廃止、価格、名称、statusなどの変更 |
| 在庫データ更新 | 在庫数が変わった商品と想定外の欠落 |
| システム移行 | 移行前後の件数と項目値の違い |
| 日次・月次ファイル | 前回から増減・変更したレコード |
| 取引先から届いた新版 | 相手が変更した場所と、自社で確認すべき影響 |
CSV 差分比較はCSV内の文字列差分を整理します。ただし、見つかった変更が承認済みか、価格やstatusが業務上正しいかまでは判断しません。
今回比較する更新前・更新後CSV
この記事では、次の商品マスターを一貫した例として使います。更新後CSVでは行順も変わっています。
更新前CSV
product_id,name,price,status,updated_at
P001,緑茶,120,販売中,2026-08-01
P002,紅茶,150,販売中,2026-08-01
P003,コーヒー,200,販売中,2026-08-01
P004,水,100,販売中,2026-08-01更新後CSV
product_id,name,price,status,updated_at
P003,コーヒー,220,販売中,2026-09-01
P001,緑茶,120,販売中,2026-08-01
P002,紅茶,150,販売終了,2026-09-01
P005,炭酸水,130,販売中,2026-09-01知りたいのは、どの商品が追加・削除されたか、既存商品のどの列が変わったか、そして価格変更などが予定された内容かどうかです。
行番号ではなくKeyで比較する理由
更新前の先頭データはP001、更新後の先頭データはP003ですが、これはP001がP003へ変更されたという意味ではありません。並び替えによって位置が変わっただけです。途中に1行追加された場合も、それ以降の行番号はすべてずれます。
比較Keyの選び方
Keyは、1件のレコードを一意に識別し、更新前後で基本的に変わらない列です。今回ならproduct_idを使います。顧客ID、注文番号、社員番号なども候補になります。
| Keyに向く列 | Keyに向きにくい列 |
|---|---|
| 商品ID、顧客ID、注文番号 | 商品名、氏名、価格、status |
| ファイル内で一意 | 同じ値が複数レコードに現れる |
| 更新前後で変わらない | 通常の更新対象になる |
KeyそのものがP001 → P101へ変わると、通常はP001の「削除」とP101の「追加」として現れます。旧Keyと新Keyの対応が必要なら、別途対応表や変更記録と照合します。
1列で一意にならない場合は複合Keyを使う
company_id,product_id,name
A,P001,緑茶
B,P001,紅茶product_idだけを見るとP001が重複しますが、company_id + product_idなら「A / P001」と「B / P001」を別のレコードとして識別できます。現在の差分ツールでは複数の列を選ぶと、選択した値の組み合わせを複合Keyとして使用します。
複合Keyは列を増やせばよいわけではありません。更新される可能性のある名称や日付を含めると、同じレコードでも削除と追加に分かれるため、取り込み先やデータベースの一意条件を確認します。
Keyが重複していると安全に比較できない
product_id,name,price
P001,緑茶,120
P001,緑茶,130同じKeyが2行あると、更新後のP001をどちらへ対応付けるべきか一意に決められません。そのため現在の差分ツールは、Keyの空欄または重複を検出すると比較を停止し、該当行を表示します。
先にCSV 重複チェック・削除で内容と行番号を確認します。最初または最後を残す、更新日時で選ぶ、複合Keyへ変更するといった判断には業務上の根拠が必要で、検出した重複を自動的に削除すればよいとは限りません。
追加・削除・変更の判定方法
| 判定 | 条件 | 今回の例 |
|---|---|---|
| 追加 | Keyが更新後だけに存在 | P005 |
| 削除 | Keyが更新前だけに存在 | P004 |
| 変更 | 同じKeyが両方にあり、共通する非Key列が1つ以上異なる | P002、P003 |
| 変更なし | 同じKeyの共通する非Key列がすべて一致 | P001 |
現在のツールは、選択したKey以外の双方に存在するすべての列を比較します。比較列を個別に選ぶ機能ではありません。一方のCSVだけにある列は列構成の差分として表示され、全レコードの値変更には数えません。
変更された列のBefore・Afterを確認する
同じKeyで値が異なる場合は、詳細を開いて列ごとの変更前・変更後を確認します。
P002
- status
販売中→販売終了- updated_at
2026-08-01→2026-09-01
P003
- price
200→220- updated_at
2026-08-01→2026-09-01
ツールが確認できるのは「priceが200から220へ変わった」という事実です。220円が正しい価格か、変更承認があるかまでは判断できません。
今回のCSVを比較した結果
この例をproduct_idで比較すると、ツールの統計は追加1件、削除1件、変更2件、変更なし1件です。P002とP003の詳細には、それぞれ上記の変更列が表示されます。
Headerや列構造が異なる場合
現在のツールは1行目を必ずHeaderとして扱い、列位置ではなくHeader名で双方の列を対応付けます。そのため列順だけが違い、同じ列名が揃っていれば、並び順の違い自体をデータ変更には数えません。
一方にしかない列がある場合は両側の列名を表示し、ユーザーが「共通列だけを比較する」と確認した後に実行できます。空のHeader、重複Header、共通列がないCSVは比較できません。大文字・小文字、全角・半角、前後空白も別のHeader名です。
比較前の確認にはCSV ヘッダー確認、ファイル全体にはCSV 文字コード・総合診断を使えます。仕様に基づいて揃える必要がある場合は、CSV 列名変換・マッピング、CSV 列並び替え、CSV 列追加、CSV 列抽出を目的に応じて使います。
見た目や意味が近くても文字列が違えば差分になる
現在のツールは型変換をせず、CSVセルの文字列を厳密に比較します。次の値はそれぞれ異なります。
| 変更前 | 変更後 | 差が生じる理由 |
|---|---|---|
001 | 1 | 先頭0を含む文字列が違う |
| 空欄 | NULL | 空文字と4文字の値は違う |
Tokyo | Tokyo | 前後空白も値の一部 |
2026-09-01 | 2026/09/01 | 日付に見えても保存文字列が違う |
120 | 120.00 | 数値への自動変換をしない |
ABC | ABC | 半角と全角が違う |
active | ACTIVE | 大文字と小文字が違う |
業務上同じ意味として比較したい場合は、正式なルールに基づいて作業用コピーを標準化します。空欄表記にはCSV 欠損値・NULL表記統一、日付にはCSV 日付形式チェック・統一、コード値にはCSV 値マッピング・置換を利用できます。
厳密比較と標準化後の比較を使い分ける
厳密比較
原本の文字列に何が変わったかを漏らさず確認します。表記だけの差も表示されます。
標準化後の比較
合意済みのルールでNULLや日付表記などを揃え、意味のある差へ絞ります。
先に標準化すると、元のファイルに存在した差を隠す可能性があります。原本を保管し、まず厳密比較を行い、必要なら両方のCSVから標準化済みコピーを作って2回目の比較を行う方法が安全です。
CSV差分比較ツールを使う手順
- 変更前のCSVと変更後のCSVをそれぞれ選択します。入力はUTF-8、最大50 MBです。
- 両方のファイルが解析されると、共通するHeaderから比較Keyを選択できます。
- 複合Keyにする場合は、Keyを構成する列を複数選びます。
- 列構成が違う場合は双方だけにある列を確認し、共通列だけで比較してよい場合に確認欄を選択します。
- CSVを比較を押し、追加・削除・変更・変更なし・列構成差分の件数を確認します。
- 表示を追加・削除・変更で絞り込み、変更レコードの詳細で列ごとのBefore・Afterを確認します。
- 差分CSVをダウンロードからレポートを保存します。変更なしレコードはダウンロードレポートには含まれません。
選択したファイルはサーバーへ送信されず、解析、Key検証、比較、差分CSV生成はブラウザ内で行われます。
差分が予定どおりかを確認する
- 変更申請や更新一覧と追加・削除・変更件数を照合する
- P003の価格変更に承認や根拠資料があるか確認する
- P004の削除が販売終了なのか、出力漏れなのか確認する
- 日本語、空欄、日付、先頭0を含むレコードを抽出確認する
- 更新前CSV、更新後CSV、差分レポートを別々に保存する
- 正式な反映前に少量データでテストする
最終確認で取り込み仕様も検証する場合はCSV 列制約チェックを利用できます。CSVを導入仕様へ合わせる一連の工程は、CSVインポート前のデータチェック・前処理方法で説明しています。すでにエラーが発生している場合は、CSVが読み込めない・インポートできない原因と確認方法から症状別に確認してください。