ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
CSV (Comma-Separated Values) は、フィールドをカンマで区切り、レコードを改行で区切ったテキスト形式の表データである。1972 年に IBM のメインフレーム Fortran 言語がリスト指向入出力でカンマ区切り形式を採用したのが起源とされ、その後 MS-DOS の dBASE、Lotus 1-2-3、Microsoft Excel を経て、現在では業務システム間のデータ受け渡し・オープンデータ・データサイエンスの最も一般的な交換フォーマットとなっている。
仕様としては RFC 4180 (2005) が「事実上の標準」を文書化しているが、これは過去の慣習をまとめた情報提供 RFC であり、厳密な準拠を要求するものではない。そのため、区切り文字 (カンマ / セミコロン / タブ / パイプ)、引用符の有無、エスケープ規則、改行コード、文字エンコーディング、BOM の付与といった点で実装ごとに方言が多く、CSV は「単純なのに難しい」フォーマットの代表例として知られている。
内部構造とフォーマット規則
RFC 4180 が定める基本ルールは次の通り。
- 各レコードは CRLF (
\r\n) で区切る。最終行末の CRLF は任意。 - フィールドはカンマ
,で区切る。 - 1 行目はヘッダ (列名) でもよい (オプション)。
- フィールド内にカンマ・改行・ダブルクォートを含む場合は、フィールド全体をダブルクォートで囲む。
- ダブルクォートで囲まれたフィールド内にダブルクォートを含めるには、ダブルクォートを 2 個連続させる (
"")。
name,age,email,comment
Alice,30,"alice@example.com","Hi, I""m Alice"
Bob,25,bob@example.com,"multi
line comment"
上記では Alice の comment に , と " が含まれるためダブルクォートで囲み、内側の " を "" にエスケープしている。Bob の comment にはフィールド内改行があるが、ダブルクォート内なら CRLF/LF は許容される。
主な用途
- 業務システム連携: 銀行・証券・ECサイトの取引明細、勤怠データ、顧客マスタの定期エクスポート。
- オープンデータ: e-Stat、政府 CKAN、気象庁の各種統計データの配布形式。
- データサイエンス入門: pandas / scikit-learn のチュートリアルは多くが CSV から始まる。Kaggle の課題データの多くも CSV。
- DB エクスポート/インポート:
COPY(PostgreSQL) やLOAD DATA INFILE(MySQL)、BULK INSERT(SQL Server) で CSV を直接読み書き。 - BI ツール: Tableau / Power BI / Metabase のデータソースとしての標準形式。
関連形式との比較
| 形式 | 区切り | 型情報 | ネスト | 備考 |
|---|---|---|---|---|
| CSV | カンマ | なし (すべて文字列) | 不可 | 方言多い |
| TSV | タブ | なし | 不可 | 引用符問題が少ない |
| JSON | JSON 構文 | あり (string/number/bool/null) | 可 | Web API の標準 |
| YAML | インデント | あり | 可 | 設定ファイル向け |
| Parquet | 列指向バイナリ | あり (厳格) | 可 | 大規模分析の標準 |
| Excel (xlsx) | セル | あり | シート単位 | 書式・数式を保持 |
編集・パーサ・ツール
# Python (pandas)
python -c "import pandas as pd; df=pd.read_csv('data.csv'); print(df.head())"
# csvkit (Python 製の CLI)
csvstat data.csv # 列ごとの統計
csvgrep -c name -m Alice data.csv
csvjson data.csv # CSV → JSON
# xsv (Rust 製の高速 CSV ツール)
xsv stats data.csv
xsv search -s name Alice data.csv
# miller (mlr) — 関数型風の集計
mlr --csv filter '$age > 25' then sort -nr age data.csv
# 文字コード変換 (Shift_JIS → UTF-8)
nkf -w --overwrite data.csv
iconv -f CP932 -t UTF-8 data.csv > data.utf8.csv
# Excel が UTF-8 として認識するように BOM を付ける
printf '\xEF\xBB\xBF' | cat - data.utf8.csv > data.utf8bom.csv
注意点・落とし穴
- Excel の桁落ち:
00123や0001234567890123(16 桁数値) を Excel が数値として解釈し、先頭 0 が消えたり指数表記1.23E+15に化ける。事前にセル書式を「文字列」にするか、Power Query 経由でインポートする。 - 日付の自動変換:
3-7が3月7日に、SEPT1が遺伝子名でなく2024/9/1に化ける問題。遺伝学界では HGNC が遺伝子名を改名するに至った (2020 年)。 - 文字コード地獄: 日本語 Excel が Shift_JIS で書き出す一方、Linux/Mac/Web は UTF-8 が主流。BOM 付き UTF-8 が双方を満たす唯一の現実解 (ただし Java の InputStreamReader 等は BOM を 1 文字目として読んでしまうので注意)。
- 区切り文字の方言: 欧州 (ドイツ・フランス) では小数点に
,を使うため、区切りに;を使う「セミコロン CSV」が一般的。Excel のロケール依存で区切りが変わる。 - 改行コード: フィールド内改行を含むケースでは、ナイーブな
split('\n')パースが破綻する。必ず標準ライブラリ (Python のcsv、Java の OpenCSV など) を使う。 - SQL インジェクション / CSV インジェクション:
=cmd|'/C calc'!A1のようなセル先頭の=+-@は Excel で開いた際に数式として評価され、外部コマンド実行に至る (CVE-2014-3524 系)。エクスポート時にこれら先頭文字を'でエスケープする。
関連リンク
- テキスト・ドキュメント形式 (親カテゴリ)
- ファイル拡張子とは (概論)
- PDF (.pdf) / Markdown (.md) / TXT (.txt) / TSV (.tsv)
- CSV 読み込み
- CSV ファイルのダウンロード
- CSV ファイルアップロード方法(Ajax)
- CSV のアップロードおよび読み込み
- RFC 4180 — Common Format and MIME Type for CSV Files
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?