CSVの1行目に同じ列名が2つある。
人間には「左のemailと右のemail」と見えるが、プログラムから見ると同じ名前の列が二つ存在する曖昧なデータになる。
なぜ危険なのか
読み込み側の実装によって扱いが変わる可能性がある。
- 最初の列だけ採用する
- 後の列で上書きする
- 配列として保持する
- エラーで停止する
- 自動で別名を付ける
つまり、読み込みが成功しても「どちらのemailが使われたか」が保証できない。
勝手に連番を付ければいいとは限らない
email と email_2 にすれば技術的な重複は消える。
しかし、右側の列が本当に「2つ目のメール」なのか、それとも出力元のバグで同じ列が二重に出ただけなのかは別問題だ。列名を変える前に値を比較する。
安全な確認手順
- 重複している列名を列番号付きで記録する
- それぞれの列の値を数行確認する
- 出力元の仕様書や項目定義を確認する
- 意味が違うなら意味に沿った別名へ変更する
- 完全な重複なら、どちらを残すか根拠を残す
- 修正後に再度ヘッダー重複を検査する
空のヘッダーも同じ系統の問題だ。ヘッダー検査では、空文字、前後空白、大文字小文字の差、同名列、似た列名をまとめて確認するとよい。
正規化も慎重に扱う。空白除去や大文字小文字統一を行うと、それまで別名だった列が同名になる場合がある。
関連: CSVの重複をチェックする方法
無料サンプルCSVには重複ヘッダー例も入れている。
CSVヘッダーは単なる見出しではない。後工程が列を特定するためのキーとして扱われるため、曖昧な状態のまま通さないことが重要だ。