CSVとは
CSV(Comma-Separated Values)は、データをカンマで区切って並べたテキスト形式です。表計算ソフトが扱う行と列の構造を、プレーンテキストとして表現できるもっともシンプルなフォーマットといえます。
1970年代から使われている歴史の長い形式ですが、CSV には強制力を持つ統一的な標準仕様がありません。RFC 4180 は、広く使われている形式を整理した文書で、情報提供を目的とする文書(Informational)という位置づけで、標準を定める文書ではありません。Excel、Google スプレッドシート、データベースのエクスポート、業務システム間のデータ連携など、あらゆる場面で目にする機会があるでしょう。
手元の CSV を今すぐ JSON にしたい場合は CSV to JSON 変換ツール に貼り付けてください。登録もファイルアップロードも不要で、変換はすべてブラウザ内で完結します。
CSVの基本構造
行と列
1行が1レコード、カンマで区切られた各要素が1フィールドです。
田中太郎,30,東京
佐藤花子,25,大阪
鈴木一郎,35,名古屋
ヘッダー行
先頭行に各列の名前を並べ、その行をヘッダー行として扱うのが一般的です。ヘッダーがあることで、各フィールドが何を意味しているのかが明確になります。
name,age,city
田中太郎,30,東京
佐藤花子,25,大阪
鈴木一郎,35,名古屋
ヘッダー行は仕様上必須ではありませんが、実務ではほぼ必ず含めます。ヘッダーがないと、3番目のフィールドが都市名なのか部署名なのか、データだけでは判断できません。
ダブルクォートのルール
フィールド内にカンマや改行が含まれる場合は、フィールド全体をダブルクォートで囲みます。
name,comment
田中太郎,"趣味は読書、ランニングです"
佐藤花子,"東京都渋谷区
神宮前1-2-3"
フィールド内にダブルクォート自体が含まれる場合は、ダブルクォートを2つ重ねてエスケープします。
title,note
商品A,"サイズは""M""です"
このルールに従わないデータを作ると、読み取りエラーの原因になります。
区切り文字の種類
「Comma-Separated Values」という名前ですが、実際にはカンマ以外の区切り文字を使うファイルも CSV と総称されます。
| 形式 | 区切り文字 | よく使われる場面 | 拡張子 |
|---|---|---|---|
| CSV | カンマ , | 最も一般的。Excel やスプレッドシートの標準 | .csv |
| TSV | タブ | バイオインフォマティクス、一部の DB エクスポート | .tsv |
| セミコロン区切り | セミコロン ; | 小数点にカンマを使う欧州圏(ドイツ語版 Excel など) | .csv |
| パイプ区切り | パイプ | | レガシーシステムで散見される | .csv .txt |
CSV を読み取るプログラム(パーサー)の多くは、区切り文字を指定することで各形式に対応できます。セミコロン区切りの CSV をカンマ区切りの設定で開くと、列を正しく読み取れないことがあります。
CSVとExcel・スプレッドシートの関係
Excel の「名前を付けて保存」でファイル形式として CSV を選ぶと、CSV ファイルを出力できます。逆に、CSV ファイルをダブルクリックすると Excel が起動して表形式で表示されます。
ただし、注意点もあります。Excel は、CSV を開くときに値の内容から数値や日付などのデータ型を自動的に判断するため、先頭がゼロの数値(007)が 7 に変換されたり、日付として扱うつもりのない文字列が、自動的に日付へ変換されたりすることがあります。
Google スプレッドシートでも CSV のインポート・エクスポートが可能です。「ファイル」から「ダウンロード」を選び「カンマ区切り形式」で CSV を取得できます。
Excel やスプレッドシートの表をそのまま README やドキュメントの Markdown テーブルにしたい場合は、Excel・Google スプレッドシートを Markdown テーブルに変換する方法 で範囲コピー → Markdown 変換の手順をまとめています。
文字コードに注意(Shift-JIS / UTF-8 BOM)
CSV ファイルを開いたときに文字化けする場合、ほとんどは文字コードの問題です。CSV 自体には文字コードを記録する仕組みがありません。RFC 4180 も文字コードの指定を規定していないため、読み込むソフトが推測するか、利用者が文字コードを指定する必要があります。
日本語の CSV は特に注意が必要です。Windows の Excel から書き出した CSV は Shift-JIS(CP932)になっていることが多く、UTF-8 を前提としたツールで開くと文字化けします。逆に UTF-8 で保存した CSV を古い Excel で開くと文字化けすることもあります。
UTF-8 の場合はさらに BOM(Byte Order Mark、EF BB BF の 3 バイト) の有無で挙動が変わります。Excel は BOM 付き UTF-8(UTF-8-SIG)なら日本語を正しく認識しますが、BOM なし UTF-8 だと文字化けすることがあります。逆に Google スプレッドシートや多くの Web API は BOM を「余分な文字」として扱うため、BOM 付き CSV を読み込むと 1 列目のヘッダー名の先頭に見えない BOM 文字が付いてしまうことがあります。
Python の pandas で BOM 付き CSV を読むときは、文字コードに utf-8-sig を指定すれば、BOM が自動的に取り除かれます。
import pandas as pd
df = pd.read_csv("data.csv", encoding="utf-8-sig")
文字化けを避けるには、ツール側で文字コードを明示的に指定するか、文字コードを UTF-8 に統一し、BOM を付けるかどうかもチームで揃えてから処理するのが安全です。
CSVの限界
階層構造(ネスト)を表現できない
CSV はフラットな表形式しか表現できません。階層構造(ネスト)を持つデータには不向きです。
たとえば、1人のユーザーに複数の注文があるデータを考えます。CSV で表すには、注文ごとに行を作ってユーザー情報を繰り返すか、注文を記録する列を増やす必要があり、扱いが煩雑になります。
データ型の概念がない
CSV にはデータ型の概念がありません。30 が数値なのか文字列なのか、true が真偽値なのか文字列なのか、CSV ファイルだけでは判断できません。
メタデータを埋め込めない
CSV には文字コードやスキーマ定義を記録する仕組みがありません。ファイルを開く前に文字コードが UTF-8 なのか Shift-JIS なのかを知る手段がなく、開く側が推測するか外部から指定する必要があります(前述の「文字コードに注意」を参照)。
ツールによって出力が微妙に異なる
CSV には強制力を持つ統一的な標準仕様がありません(前述のとおり RFC 4180 は情報提供を目的とする文書で、標準を定めるものではありません)。そのため改行コードや引用符の扱いがツールによってわずかに異なることがあり、読み込む側でその違いに対応する必要があります。
CSVをJSONに変換するメリット
こうした CSV の限界を補うために、JSON への変換が役立つ場面があります。
構造化されたデータへの変換
CSV の各行を JSON オブジェクトに変換すると、ヘッダー行がキー名になり、各フィールドの意味が明確になります。
[
{
"name": "田中太郎",
"age": "30",
"city": "東京"
},
{
"name": "佐藤花子",
"age": "25",
"city": "大阪"
}
]
API連携への活用
REST API にデータを送信する場合、リクエストボディは JSON 形式が一般的です。Excel やスプレッドシートからエクスポートした CSV を JSON に変換すれば、そのまま API のリクエストに利用できます。
プログラムでの処理のしやすさ
JSON に変換しておけば、JavaScript の Array.filter() や Array.map() でデータを加工するのも簡単です。CSV のまま扱うよりも、コードの可読性が上がります。
CSVからJSONへの変換方法
CSV to JSON を使えば、ブラウザ上で CSV を貼り付けるだけで JSON に変換できます。ファイルのアップロードは不要で、データがサーバーに送信されることもありません。
JSON の基本について知りたい方は JSONとは を、変換の詳しい手順は CSVをJSONに変換する方法 を参照してください。CSV のデータを Markdown のテーブルとして README やドキュメントに貼りたい場合は CSV を Markdown テーブルに変換する方法 を参照してください。元データが CSV ではなく表形式の JSON なら JSON を Markdown テーブルに変換する方法 が便利です。
CSVを扱うときの注意
自前でカンマ分割しない
カンマを目印に文字列を単純に分割するだけでは、ダブルクォートで囲まれたカンマやフィールド内の改行、文字として含まれるダブルクォートを正しく扱えません。各言語に CSV ライブラリがあるので、それを使うのが安全です。Python は csv モジュール、JavaScript は PapaParse などが定番です。
処理する前に検証する
外部から受け取った CSV は、構造が正しいと決めつけずに検証してから処理します。列数が全行で揃っているか、想定したヘッダーがあるか、必須フィールドが空でないかを確認すると、後段のエラーを減らせます。
たとえば、ある行の項目数だけが他の行と食い違っていると、パーサーが列のずれや空欄として解釈し、取り込んだ後で気づきにくい不整合を残します。Python の csv モジュールで行ごとの len(row) を確認し、期待する列数と合わない行を先に検知しておくと安全です。
import csv
with open("data.csv", encoding="utf-8-sig", newline="") as f:
rows = list(csv.reader(f))
expected_cols = len(rows[0])
bad_rows = [i + 1 for i, row in enumerate(rows) if len(row) != expected_cols]
if bad_rows:
raise ValueError(f"列数が揃っていない行: {bad_rows}")
今すぐ変換してみる
手元に JSON にしたい CSV ファイルがあれば、CSV to JSON 変換ツールにデータを貼り付けるだけで即座に変換できます。会員登録もファイルアップロードも不要で、すべてブラウザ内で完結します。
まとめ
- CSV はカンマ区切りのシンプルなテキスト形式で、表形式のデータを表現する
- ヘッダー行で各列の意味を定義するのが一般的
- カンマや改行を含むフィールドはダブルクォートで囲む
- Excel やスプレッドシートとの相互運用が容易
- 階層構造やデータ型の表現には限界がある
- JSON に変換することで、API 連携や構造化データとしての活用が広がる
- 変換には CSV to JSON が便利

