CSVフォーマッター

カスタム区切り文字オプションを使って CSV データを整形・正規化

サンプルを試す

CSV 入力

整形済み CSV

ローカルで実行 · シークレットの貼り付けも安全
整形済み CSV がここに表示されます…
出力区切り文字:

CSV 整形とは?

CSV(Comma-Separated Values)整形とは、生のタブラーテキストを正規化するプロセスです。区切り文字、クォート、空白、改行コードが一貫したルールに従うようにデータを書き直します。2005年に公開された RFC 4180 は最も広く採用された CSV 標準を定義しています。フィールドはカンマで区切り、レコードは CRLF で終端し、カンマ・ダブルクォート・改行を含むフィールドはダブルクォートで囲むという規則です。CSV フォーマッターは、乱雑または不整合な CSV データをこれらの規則に合わせて書き直します。

実際の CSV ファイルがクリーンな状態で届くことはほとんどありません。Excel、Google Sheets、データベースのダンプユーティリティから出力されるスプレッドシートは、それぞれ異なるクォート戦略を採用し、空白の扱いも異なり、カンマの代わりにセミコロンやタブを使用する場合があります。これらのファイルを RFC 4180 準拠の入力を期待するパーサーに渡すと、行の崩れ、列のずれ、またはデータの消失が発生することがよくあります。処理前に整形しておくことで、こうした問題を早期に発見できます。

CSV フォーマッターと CSV コンバーターは異なります。整形はデータを CSV のまま保持します。クォートを正規化し、余分な空白をトリムし、列を揃え、必要に応じて区切り文字を変更します。変換はフォーマットそのものを変え、JSON、HTML、SQL、Markdown などの形式に出力します。

この CSV フォーマッターを使う理由

このツールは CSV の解析と再シリアライズをすべてブラウザ内で行います。データがマシンの外に出ることはありません。

即時整形
CSV を貼り付けると、整形済みの出力がすぐに表示されます。入力と同時にブラウザ内で解析・再シリアライズが行われます。
🔒
プライバシー優先の処理
解析と整形はすべてブラウザのタブ内で完結します。ネットワーク経由でデータが送信されることはありません。マシンの外に出せない機密データセット、認証情報、PII にも安全に使用できます。
🔧
区切り文字の設定
カンマ、タブ、セミコロン、パイプの区切り文字を切り替えられます。入力の区切り文字を自動検出し、出力に別の区切り文字を選択できるため、フォーマット間の正規化が簡単です。
📋
ワンクリックのコピーとダウンロード
整形済み CSV をクリップボードにコピーするか、ファイルとしてダウンロードできます。追加編集なしにデータベース、スプレッドシート、データパイプラインへのインポートに使えます。

CSV フォーマッターの使用例

フロントエンド開発
React や Vue コンポーネントのモックデータとして使用する CSV フィクスチャファイルを整理します。一貫したクォートにより、開発ビルド時の解析エラーを防ぎます。
バックエンドのデータ取り込み
サードパーティ API からの CSV 出力を ETL パイプラインに渡す前に正規化します。空白のトリムと区切り文字の標準化により、列ずれのバグを防ぎます。
DevOps と CI/CD
バージョン管理にコミットされた CSV 設定ファイルやシードデータを整形します。一貫したフォーマットにより差分のノイズが減り、コードレビューが速くなります。
QA とテスト
既知のクォートと区切り文字のパターンを持つ CSV テストフィクスチャを準備します。再現性のある入力ファイルにより、パーサー出力に対するアサーションの記述が容易になります。
データエンジニアリング
レガシーデータベースからの CSV ダンプを最新のデータウェアハウスにロードする前に前処理します。クォートの問題や区切り文字の不一致を修正することで、デバッグの時間を大幅に節約できます。
学習と教育
さまざまな入力を貼り付けてフォーマッターがどのように正規化するかを観察することで、RFC 4180 のクォートルールを実践的に学べます。CSV のエッジケースを理解する効果的な方法です。

CSV のクォートとエスケープルール(RFC 4180)

RFC 4180 は、フィールドをいつ、どのようにクォートするかについて具体的なルールを定義しています。以下の 6 つのシナリオは、クォートの動作が重要になるケースを網羅しています。

シナリオルール
Field contains delimitername,"Smith, Jr."Wrap in double quotes
Field contains newline"line1\nline2"Wrap in double quotes
Field contains double quote"She said ""hello"""Double the quote character
Field is empty,,Two consecutive delimiters
Field has leading spaces" value"Quotes preserve whitespace
Field is numeric42No quotes required unless forced

CSV 区切り文字の比較

区切り文字の選択は、互換性、可読性、クォートが必要なフィールドの頻度に影響します。

カンマ(,)
RFC 4180 のデフォルト。すべての CSV パーサーとスプレッドシートでサポートされています。住所やテキストデータに多いカンマを含むフィールド値にはクォートが必要です。
タブ(\t)
TSV(Tab-Separated Values)ファイルで使用されます。フィールドデータにタブ文字が現れることはほとんどないため、クォートが必要になることは少ないです。バイオインフォマティクスやデータベースエクスポートで一般的です。
セミコロン(;)
カンマが小数点の区切り文字として使われるロケール(ドイツ、フランス、ブラジルなど)での CSV エクスポートで標準的です。システムロケールがカンマ小数点を使用する場合、Excel はセミコロンを使用します。
パイプ(|)
自然なテキストにはほとんど現れないため、フィールド値にカンマやセミコロンが含まれる乱雑なデータに適しています。メインフレームやレガシーシステムのエクスポートで一般的です。

コード例

以下の例は、乱雑な CSV を解析し、異なるプログラミング言語で一貫したフォーマットに再シリアライズする方法を示しています。各コードは空白のトリム、区切り文字の正規化、クォートを処理します。

JavaScript (Node.js)
import { parse, unparse } from 'papaparse'

const messy = `name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo "`

// Parse with trimming, then re-serialize with consistent formatting
const parsed = parse(messy, {
  header: true,
  skipEmptyLines: true,
  transformHeader: h => h.trim(),
  transform: v => v.trim(),
})

const clean = unparse(parsed.data, { quotes: true })
console.log(clean)
// → "name","age","city"
// → "Alice","30","Berlin"
// → "Bob","25","Tokyo"
Python
import csv
import io

messy = """name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo " """

reader = csv.DictReader(io.StringIO(messy), skipinitialspace=True)
output = io.StringIO()
writer = csv.DictWriter(
    output,
    fieldnames=[f.strip() for f in reader.fieldnames],
    quoting=csv.QUOTE_ALL,
)
writer.writeheader()
for row in reader:
    writer.writerow({k.strip(): v.strip() for k, v in row.items()})

print(output.getvalue())
# → "name","age","city"
# → "Alice","30","Berlin"
# → "Bob","25","Tokyo"
Go
package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func main() {
	input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	r := csv.NewReader(strings.NewReader(input))
	records, _ := r.ReadAll()

	var buf strings.Builder
	w := csv.NewWriter(&buf)
	w.UseCRLF = true // RFC 4180 line endings
	for _, record := range records {
		_ = w.Write(record)
	}
	w.Flush()
	fmt.Print(buf.String())
	// → name,age,city\r\n
	// → Alice,30,Berlin\r\n
	// → Bob,25,Tokyo\r\n
}
CLI (csvformat from csvkit)
# Re-format a CSV file with csvkit (Python-based)
csvformat -D ";" input.csv > output.csv

# Convert tabs to commas
csvformat -t input.tsv > output.csv

# Force-quote all fields
csvformat -U 1 input.csv > quoted.csv

# Using Miller (mlr) to normalize
mlr --icsv --ocsv --quote-all cat input.csv > clean.csv

よくある質問

CSV フォーマッターは何をするものですか?
CSV フォーマッターは生の CSV テキストを解析し、フィールド周辺のクォートを正規化し、不要な空白をトリムし、一貫した区切り文字と改行スタイルでデータを再シリアライズします。出力は RFC 4180 または指定した整形ルールに準拠したクリーンな CSV ファイルです。
CSV 整形と CSV 検証の違いは何ですか?
検証は CSV ファイルがルールに準拠しているかを確認し、エラーを報告します。整形はさらに進んで、ファイルを書き直して問題を修正します。バリデーターは「5 行目にクォートされていないカンマがある」と教えてくれます。フォーマッターはフィールドをクォートで囲んで修正します。
インポート前に CSV ファイルを整形する必要があるのはなぜですか?
データベースのインポートツール、ETL パイプライン、スプレッドシートソフトウェアはそれぞれ異なる CSV 解析ルールを持っています。カンマを含むクォートされていないフィールドは、厳格なパーサーでは 2 列に分割されます。インポート前に RFC 4180 に従って CSV を整形することで、こうした列ずれやデータ破損を防ぎます。
このツールを使うとデータはサーバーに送られますか?
いいえ。すべての解析と整形は JavaScript を使ってブラウザ内で行われます。CSV データはマシン上に留まり、ネットワーク経由で送信されることはありません。ツール使用中にブラウザのネットワークタブを開くことで確認できます。
整形時に区切り文字を変更できますか?
はい。ツールは入力の区切り文字(カンマ、タブ、セミコロン、パイプ)を自動検出し、出力に別の区切り文字を選択できます。地域ごとの CSV フォーマット間の変換や TSV から標準 CSV への切り替えに便利です。
埋め込み改行を含むクォートフィールドはどのように処理されますか?
RFC 4180 に従い、改行を含むフィールドはダブルクォートで囲む必要があります。フォーマッターはこれらの埋め込み改行を保持し、前後のクォートが存在することを確認します。入力にクォートされていない改行があるフィールドが存在する場合、フォーマッターは再シリアライズ時にクォートで囲みます。
このツールが処理できる最大ファイルサイズは?
ツールはブラウザ上で動作するため、実際の上限はデバイスの使用可能メモリに依存します。10〜20 MB までのファイルは最新のマシンで問題なく処理できます。それ以上のファイルには、csvkit や Miller などのコマンドラインツールの使用をお勧めします。