CSV

CSVとは

CSV(Comma-Separated Values)は、表形式のデータを1行=1レコード、カンマ区切り=列で表すテキスト形式です。1行目を見出し(ヘッダー行)にするのが一般的です。

id,name,startDate,endDate
task-001,要件定義,2026-08-01,2026-08-10
task-002,画面設計,2026-08-08,2026-08-20

Excelやスプレッドシートで直接開け、ほぼすべての業務システムが入出力に対応しているため、人が表計算で作ったデータとシステムをつなぐ用途(一括インポート/エクスポート)の事実上の標準です。

引用符のルール — 自前パースが破綻するところ

値にカンマや改行そのものを含めたい場合は、値全体をダブルクォートで囲みます。値の中のダブルクォートは2つ重ねます(RFC 4180)。

id,name,description
task-001,設計,"画面,DB,APIの設計。詳細は""設計書""を参照"

このルールがあるため、split(',') で行を分割する自前実装は必ず壊れます。引用符の中のカンマや改行を区切りと誤認するためです。読み書きには実績のあるCSVライブラリを使うのが原則です。

文字コードの落とし穴

CSV最大の実務トラブルは [[文字コードと文字化け]] です。ExcelはBOMの無いUTF-8のCSVを環境既定の文字コード(日本語WindowsではShift_JIS系)として開くため、UTF-8で出力したCSVをExcelで開くと日本語が化けます。Excelに渡すファイルはBOM付きUTF-8で出力するのが定番の対処です。

ほかにもExcel経由では「先頭の0が消える(電話番号の0落ち)」「1-2 が日付になる」など、文字列が勝手に型解釈される変換が起きます。往復させるデータでは特に注意が要ります。

JSONとの使い分け

CSV[[JSON]]
構造平坦な表のみ入れ子・配列を表現できる
型すべて文字列(型情報なし)数値・真偽値・nullを区別
人の編集Excelで誰でも触れるエディタと知識が要る
主な用途一括インポート/エクスポートAPI通信・設定・バックアップ

システム間の連携や構造のあるデータは [[JSON]]、人が表計算で用意するデータの受け渡しはCSV、が基本の住み分けです。

初学者向けポイント

  • インポート機能を作るときは「ヘッダー行の検証 → 各行の型・必須チェック → エラー行の行番号付き報告」の3点セットを最初から設計します。ユーザーの手作りCSVは必ずどこか壊れています
  • 区切り文字がタブのものはTSVと呼びます。値にカンマが頻出するデータではTSVの方が事故が少なくなります
  • 大量データの取り込みは [[バッチ処理]] の定番題材で、DBへの登録では [[SQL]] のバルクインサートや COPY 系コマンドと組み合わせます

関連技術とのつながり

  • [[文字コードと文字化け]] — BOMとExcelの挙動。CSVトラブルの最大の発生源
  • [[JSON]] — 構造化データ側の標準形式。使い分けの相手
  • [[Excel自動生成]] — 「Excelで開ける出力」を作る際の隣接技術
  • [[バッチ処理]] / [[SQL]] — 取り込み処理の実装先
Q: 値の中にカンマを含むCSVの正しい書き方はどれ?
- [x] 値全体をダブルクォートで囲む
- [ ] カンマをバックスラッシュでエスケープする
- [ ] カンマを全角に置き換える
解説: RFC 4180では、カンマ・改行・ダブルクォートを含む値は全体をダブルクォートで囲み、中のダブルクォートは2つ重ねます。

Q: split(',')による自前のCSVパースが壊れる理由はどれ?
- [ ] カンマの文字コードが環境によって違うため
- [x] 引用符で囲まれた値の中のカンマや改行まで区切りと誤認するため
- [ ] 1行の長さに上限があるため
解説: 引用符ルールを解釈しない分割は、"画面,DB" のような値を2列に割ってしまいます。CSVライブラリを使うのが原則です。

Q: UTF-8のCSVをExcelで開くと日本語が化ける場合の定番の対処はどれ?
- [ ] 拡張子を.xlsxに変える
- [ ] すべての値をダブルクォートで囲む
- [x] BOM付きUTF-8で出力する
解説: ExcelはBOMが無いと環境既定の文字コードで開こうとします。BOMが付いていればUTF-8と判定され、文字化けを防げます。