CSV TSV データフォーマット

CSVとTSVの使い分け — どちらを選ぶべきか

2026-03-10
目次

表形式のデータを扱うとき、まず思い浮かぶのがCSVとTSV。どちらも「テキストで表を表す」フォーマットですが、区切り文字が違うだけで意外と挙動が変わります。この記事では、それぞれの特徴を整理して、どんな場面でどちらを選ぶべきか考えてみます。

CSVとは

CSV(Comma-Separated Values)は、カンマ , で値を区切るテキスト形式です。RFC 4180 で仕様が定義されています。

users.csv
name,email,age
Alice,alice@example.com,30
Bob,"bob, jr.@example.com",25
Charlie,charlie@example.com,35

ポイントをまとめるとこんな感じです。

  • 区切り文字: カンマ ,
  • MIMEタイプ: text/csv
  • ファイル拡張子: .csv
  • エスケープ: カンマ・改行・ダブルクォートを含むフィールドはダブルクォート " で囲む
  • ダブルクォートのエスケープ: "" と二重にする

RFC 4180ではヘッダー行はオプションですが、実務上はまず入れますよね。

エスケープの例

フィールドにカンマが入っているとどうなるか見てみましょう。

addresses.csv
name,address,city
Alice,"123 Main St, Apt 4",Tokyo
Bob,"456 Oak Ave, Suite 200",Osaka

"123 Main St, Apt 4" のように、カンマを含むフィールドはダブルクォートで囲みます。さらにダブルクォート自体が必要なら "" でエスケープ。ちょっと面倒ですね。

quotes.csv
id,message
1,"She said ""Hello"""
2,"He replied ""Goodbye"""

TSVとは

TSV(Tab-Separated Values)は、タブ文字 \t で区切るテキスト形式です。IANAに text/tab-separated-values として登録されています。

users.tsv
name email age
Alice alice@example.com 30
Bob bob@example.com 25
Charlie charlie@example.com 35

こちらもポイントをまとめます。

  • 区切り文字: タブ \t
  • MIMEタイプ: text/tab-separated-values
  • ファイル拡張子: .tsv
  • エスケープ: 基本的に不要(フィールド内にタブや改行を含めない前提)

TSVの最大の強みは、エスケープがほぼ要らないこと。普通のテキストにタブ文字が入ることはまずないので、処理がシンプルで済みます。

仕様比較

観点CSVTSV
区切り文字カンマ ,タブ \t
MIMEタイプtext/csvtext/tab-separated-values
RFCRFC 4180なし(IANAに登録あり)
エスケープダブルクォートで囲む基本的に不要
フィールド内改行ダブルクォートで囲めば可能不可
人間の目での判読区切りが見やすいタブは見えにくい
コピー&ペーストカンマが邪魔になることがあるスプレッドシートとの相性が良い

CSVの落とし穴

CSVは広く使われていますが、意外とハマりどころがあります。

カンマを含むデータ

住所や金額(1,000)など、フィールドにカンマが入るケースはよくあります。ダブルクォートのルールを正しく実装しないとパースが壊れます。

改行を含むフィールド

RFC 4180ではフィールド内の改行をサポートしていますが、行単位で処理する素朴なパーサーだとうまく扱えません。

multiline.csv
id,description
1,"This is a
multi-line field"
2,"Single line"

BOM問題

ExcelでCSVを開くとき、UTF-8のBOM(EF BB BF)がないと文字化けすることがあります。でも他のツールではBOMが邪魔になることも。どちらに合わせるか、地味に悩むポイントです。

Excelとの相性

Excelは独自のCSV解釈を持っていて、ロケールによってはセミコロン ; が区切り文字になったり、日付フォーマットが勝手に変換されたりします。これは結構やっかいです。

TSVの強み

エスケープが不要

普通のテキストにタブ文字が含まれることはまずないので、エスケープを気にせずデータを扱えます。パーサーもシンプルに書けます。

コピー&ペーストとの相性

スプレッドシート(Excel、Googleスプレッドシート)でセル範囲をコピーすると、クリップボードにはTSV形式で入ります。テキストエディタに貼り付ければそのままTSV。逆にTSVをスプレッドシートに貼れば自動でセルに分かれます。これが地味に便利。

UNIXツールとの相性

cutawksort などはデフォルトでタブ区切りを想定しているものが多く、TSVとの相性が抜群です。

Terminal window
# 2列目を取り出す
cut -f2 users.tsv
# 3列目で数値ソート
sort -t$'\t' -k3 -n users.tsv

使い分けの判断基準

CSVを選ぶべき場面

  • 外部システムとのデータ連携: 多くのツールやAPIがCSVをサポートしている
  • フィールド内にカンマ以外の特殊文字(改行など)を含むデータ: エスケープ規則があるCSVのほうが安全
  • RFC準拠が求められる場面: 正式な仕様があるのはCSVだけ
  • Excelでの利用が前提: .csv 拡張子ならダブルクリックで開ける

TSVを選ぶべき場面

  • スプレッドシートとのコピー&ペースト連携: 最も自然なフォーマット
  • データにカンマが多く含まれる: 金額、住所などカンマが頻出するデータ
  • UNIXコマンドでの処理: cutawk などとの相性が良い
  • シンプルなパース処理: エスケープ不要で実装が楽
  • バイオインフォマティクス: 遺伝子データなどの分野ではTSVが標準

コードでの扱い方

JavaScriptでの簡単な例を見てみましょう。

CSVのパース(簡易版)

parse-csv.js
function parseCsv(text) {
const rows = [];
let current = "";
let inQuotes = false;
let row = [];
for (const char of text) {
if (inQuotes) {
if (char === '"') {
inQuotes = false;
} else {
current += char;
}
} else {
if (char === '"') {
inQuotes = true;
} else if (char === ",") {
row.push(current);
current = "";
} else if (char === "\n") {
row.push(current);
rows.push(row);
current = "";
row = [];
} else {
current += char;
}
}
}
if (current || row.length > 0) {
row.push(current);
rows.push(row);
}
return rows;
}

実際のプロジェクトでは、エッジケースに対応した Papa Parse などのライブラリを使うのが無難です。

TSVのパース

TSVはエスケープ規則がないので、びっくりするほどシンプルです。

parse-tsv.js
function parseTsv(text) {
return text
.trim()
.split("\n")
.map((line) => line.split("\t"));
}

当サイトのツールで試す

当サイトの CSV/TSVビューワー では、CSVとTSVの両方を表形式で表示できます。形式を自動判定するので、データを貼り付けるだけでOK。手元のデータで違いを体感してみてください。

まとめ

CSVとTSVは同じ「表形式テキスト」を表すフォーマットですが、使い勝手に明確な差があります。

  • CSV: 標準仕様(RFC 4180)があり、ツール対応が広い。ただしエスケープ処理が複雑
  • TSV: エスケープが不要でシンプル。スプレッドシートやUNIXツールとの相性が良い

「とりあえずCSV」で済ませがちですが、データの特性に合わせて選ぶだけで、余計なトラブルをかなり減らせます。

ヒヨリヒヨリ

CSVって一見シンプルに見えるけど、カンマ入りのデータやExcelとの相性問題で意外とハマるんだよね。あたしは最近、スプレッドシートからデータを移すときはTSVを使うようにしてるんだ。コピペがそのまま使えて楽ちん!みんなもCSV/TSVビューワーで試してみてね。