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行追加された場合も、それ以降の行番号はすべてずれます。

行番号で対応付けると並び替えを変更と誤認する一方、product_idで対応付けると同じ商品を正しく比較できる例
行番号はファイル内の位置です。同じレコードを表す、更新前後で安定したKeyを使います。

比較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を比較した結果

P001は変更なし、P002とP003は変更、P004は削除、P005は追加となる商品マスターの差分結果
変更レコードでは、件数だけでなく具体的に変わった列と値を確認します。

この例をproduct_idで比較すると、ツールの統計は追加1件、削除1件、変更2件、変更なし1件です。P002とP003の詳細には、それぞれ上記の変更列が表示されます。

Headerや列構造が異なる場合

現在のツールは1行目を必ずHeaderとして扱い、列位置ではなくHeader名で双方の列を対応付けます。そのため列順だけが違い、同じ列名が揃っていれば、並び順の違い自体をデータ変更には数えません。

一方にしかない列がある場合は両側の列名を表示し、ユーザーが「共通列だけを比較する」と確認した後に実行できます。空のHeader、重複Header、共通列がないCSVは比較できません。大文字・小文字、全角・半角、前後空白も別のHeader名です。

比較前の確認にはCSV ヘッダー確認、ファイル全体にはCSV 文字コード・総合診断を使えます。仕様に基づいて揃える必要がある場合は、CSV 列名変換・マッピング、CSV 列並び替え、CSV 列追加、CSV 列抽出を目的に応じて使います。

見た目や意味が近くても文字列が違えば差分になる

現在のツールは型変換をせず、CSVセルの文字列を厳密に比較します。次の値はそれぞれ異なります。

変更前変更後差が生じる理由
0011先頭0を含む文字列が違う
空欄NULL空文字と4文字の値は違う
Tokyo Tokyo 前後空白も値の一部
2026-09-012026/09/01日付に見えても保存文字列が違う
120120.00数値への自動変換をしない
ABCABC半角と全角が違う
activeACTIVE大文字と小文字が違う

業務上同じ意味として比較したい場合は、正式なルールに基づいて作業用コピーを標準化します。空欄表記にはCSV 欠損値・NULL表記統一、日付にはCSV 日付形式チェック・統一、コード値にはCSV 値マッピング・置換を利用できます。

厳密比較と標準化後の比較を使い分ける

厳密比較

原本の文字列に何が変わったかを漏らさず確認します。表記だけの差も表示されます。

標準化後の比較

合意済みのルールでNULLや日付表記などを揃え、意味のある差へ絞ります。

先に標準化すると、元のファイルに存在した差を隠す可能性があります。原本を保管し、まず厳密比較を行い、必要なら両方のCSVから標準化済みコピーを作って2回目の比較を行う方法が安全です。

CSV差分比較ツールを使う手順

  1. 変更前のCSVと変更後のCSVをそれぞれ選択します。入力はUTF-8、最大50 MBです。
  2. 両方のファイルが解析されると、共通するHeaderから比較Keyを選択できます。
  3. 複合Keyにする場合は、Keyを構成する列を複数選びます。
  4. 列構成が違う場合は双方だけにある列を確認し、共通列だけで比較してよい場合に確認欄を選択します。
  5. CSVを比較を押し、追加・削除・変更・変更なし・列構成差分の件数を確認します。
  6. 表示を追加・削除・変更で絞り込み、変更レコードの詳細で列ごとのBefore・Afterを確認します。
  7. 差分CSVをダウンロードからレポートを保存します。変更なしレコードはダウンロードレポートには含まれません。

選択したファイルはサーバーへ送信されず、解析、Key検証、比較、差分CSV生成はブラウザ内で行われます。

差分が予定どおりかを確認する

  • 変更申請や更新一覧と追加・削除・変更件数を照合する
  • P003の価格変更に承認や根拠資料があるか確認する
  • P004の削除が販売終了なのか、出力漏れなのか確認する
  • 日本語、空欄、日付、先頭0を含むレコードを抽出確認する
  • 更新前CSV、更新後CSV、差分レポートを別々に保存する
  • 正式な反映前に少量データでテストする

最終確認で取り込み仕様も検証する場合はCSV 列制約チェックを利用できます。CSVを導入仕様へ合わせる一連の工程は、CSVインポート前のデータチェック・前処理方法で説明しています。すでにエラーが発生している場合は、CSVが読み込めない・インポートできない原因と確認方法から症状別に確認してください。