ExcelフレンドリなCSVをphpunit/dbunitで使う
phpunit/dbunitで、DBのテストデータをCSVで用意するのはよくやること。
いまどきのアプリなら当然 UTF-8。
でも Excel は UTF-8 をまともに読み書きできない。
Excel よりも UTF-8 に強いツールはある事はあるのだけども、
やっぱり操作感は Excel には敵わないのよね。これがずっと難だった。
ところが、BOM付きでLEなUTF-16なら比較的自然に編集できることがわかった。
ダブルクリックやドラッグ&ドロップで開けるし、Ctrl+Sで保存できるのだ。
CSVでUnicode文字を使う可能性のある場合、UTF-16(LE+BOM)が一番Excelフレンドリということだろう。
今後はこれでいこうと思う。
そこで、そんなExcelフレンドリなCSVをphpunit/dbunitで扱うためのCsvDataSetを作った。
https://github.com/iamapen/dbunit-ExcelFriendlyDataSet
ついでにCSVの先頭列を無視できるような機能もつけた。
文字列のカラムがあるテーブルならまだしも、数値カラムだけで構成されたテストデータってあとで訳わからなくなりがちだし。
phpunitと連携しないとアサーションはできないけども、
dbunit単体でもテストデータの投入に使えて便利。
なお、各ツールで UTF-16 はこんな名前。
WindowsでUnicodeと言ったら UTF-16LE な場合が多い。
BOMは保存ダイアログにチェックボックスがある。
Excel: Unicode
sakura: Unicode
秀丸: Unicode(UTF-16)
vim: utf16le
mbstring: UTF-16
それから、Excel(2003)のCSVのデフォルトの挙動は
・デリミタはTAB
・文字列はダブルクォートで囲む
・エスケープはダブルクォートを重ねる
となっていたので、これに合わせるのが最もExcelフレンドリになる。