CSV
CSV
概要(サマリー)
CSV(シーエスブイ / Comma-Separated Values)は、データをカンマで区切り、表形式の情報をシンプルなテキストとして扱うためのファイル形式である。
たとえば、名前、メールアドレス、金額、日付のような「横に項目が並び、縦にデータが増えていく情報」を保存するときに使われる。ExcelやGoogleスプレッドシート、業務システム、データベース、Webアプリのデータ入出力などでよく登場する。
難しい専用ソフトがなくても中身をテキストとして読めるため、データを受け渡しするための共通語のような役割を持つ。ただし、見た目は単純でも、カンマや改行を含む文字列、文字コード、数値の扱いなどでつまずきやすい形式でもある。
詳細解説
CSVとは何か
CSVは、1行を1件分のデータとして扱い、その中の項目をカンマで区切る形式である。
たとえば、ユーザー一覧をCSVで表すと次のようになる。
name,email,role
Tanaka,tanaka@example.com,admin
Sato,sato@example.com,user
Suzuki,suzuki@example.com,user
この例では、1行目が項目名で、2行目以降が実際のデータである。name、email、role のような列があり、それぞれの行に1人分の情報が入っている。
CSVは表計算ソフトで開くとセルに分かれて見えるが、実体はただのテキストである。そのため、軽く、扱いやすく、別のシステムへ渡しやすい。
CSVがよく使われる場面
CSVは、異なるソフトやシステムの間でデータを受け渡しするときによく使われる。
よくある場面は次のようなものだ。
- 顧客リストを管理画面からダウンロードする
- 商品データをECサイトへ一括登録する
- アクセス解析や売上データを表計算ソフトで開く
- データベースの内容をバックアップ用に書き出す
- AIにテスト用のダミーデータを作らせる
CSVの強みは、特定のアプリだけに閉じないことである。Excelで開くことも、プログラムで読むことも、サーバー側で生成してダウンロードさせることもできる。
CSVの基本構造
CSVには、一般的に次のような構造がある。
- 1行目に項目名を書くことが多い
- 2行目以降に実データを書く
- 各項目はカンマで区切る
- 1件分のデータは改行で区切る
ただし、1行目の項目名は絶対に必要というわけではない。システムによっては、項目名なしでデータだけを並べるCSVもある。
AIにCSVを作らせるときは、「1行目にカラム名を含めてください」「文字コードはUTF-8にしてください」「カンマ区切りで出してください」のように条件を明確に伝えるとよい。
JavaScriptでCSVを簡単に読む例
単純なCSVであれば、JavaScriptでも簡単に行と列へ分けられる。
const csvText = `name,email,role
Tanaka,tanaka@example.com,admin
Sato,sato@example.com,user`;
const rows = csvText.trim().split("\n");
const headers = rows[0].split(",");
const users = rows.slice(1).map((row) => {
const values = row.split(",");
return {
[headers[0]]: values[0],
[headers[1]]: values[1],
[headers[2]]: values[2],
};
});
console.log(users);
この例では、改行で行を分け、カンマで項目を分けている。とても単純なCSVならこの考え方で理解しやすい。
ただし、実務では項目の中にカンマや改行が含まれることがある。その場合、単純な split(",") では正しく読めないため、CSV用のパーサライブラリを使う方が安全である。
カンマや改行を含むデータの扱い
CSVはカンマで項目を区切るため、データそのものにカンマが含まれると区切り位置が分からなくなる。
たとえば、住所や商品説明にはカンマや改行が入ることがある。そのような値は、ダブルクォーテーションで囲む。
name,comment
Tanaka,"東京都, 渋谷区"
Sato,"1行目の説明
2行目の説明"
このように書くと、ダブルクォーテーションで囲まれた範囲は1つの値として扱われる。CSVを扱うときに「見た目はカンマ区切りなのに、単純にカンマで分割してはいけない場合がある」と覚えておくとよい。
CSVとJSON、YAMLの違い
CSVは、表のような2次元データに向いている。一方、JSONやYAMLは、入れ子構造を持つ複雑なデータに向いている。
たとえば、ユーザー一覧のように「名前、メールアドレス、役割」が横に並ぶだけならCSVは分かりやすい。しかし、「ユーザーごとに複数の住所があり、その住所ごとに配送設定がある」のような階層構造になると、CSVだけで表すのは苦しくなる。
ざっくり整理すると、次のようになる。
- CSV: 表形式のデータ、一覧、インポート・エクスポートに向く
- JSON: Web API、JavaScriptとの連携、階層構造のデータに向く
- YAML: 設定ファイル、人間が読む前提の構成情報に向く
どれが優れているというより、データの形と用途に合わせて使い分けることが大切である。
AIコーディングとの関係
CSVは、AIコーディングと相性がよい。テストデータの作成、CSVの読み込み、JSONへの変換、管理画面からのダウンロード機能など、AIに頼みやすい作業が多い。
たとえば、AIには次のように依頼できる。
商品名、カテゴリ、価格、在庫数を持つテスト用の商品データを、CSV形式で50件作成してください。
1行目にはカラム名を入れてください。
文字コードはUTF-8を想定してください。
また、CSVを読み込むコードを依頼するときは、単純なCSVなのか、カンマや改行を含む複雑なCSVなのかを伝えることが重要である。
Node.jsでCSVファイルを読み込み、JSON配列に変換するコードを書いてください。
値の中にカンマや改行が含まれる可能性があるため、CSVパーサライブラリを使ってください。
AIは簡単な例では split(",") を使ったコードを出すことがある。しかし実務データではそれだけでは壊れやすいため、「RFC 4180に近いCSVを扱う」「ダブルクォーテーション囲みに対応する」「文字コードも考慮する」といった条件を追加すると、より安全なコードを得やすい。
よくある勘違い
CSVはExcelファイルそのもの?
CSVとExcelファイルは別物である。ExcelでCSVを開けるため同じものに見えやすいが、CSVはテキストファイルであり、Excelファイル(.xlsx)は表計算ソフト用のファイル形式である。
CSVには、セルの色、フォント、数式、グラフ、複数シートなどは保存できない。Excelで装飾してもCSVとして保存すると、多くの見た目情報は失われる。
CSVはカンマで分ければ必ず読める?
単純なCSVならカンマで分けるだけでも読める。しかし、値の中にカンマ、改行、ダブルクォーテーションが含まれる場合は、単純な分割では壊れる。
実務でCSVを扱うなら、言語や環境に合ったCSVパーサを使うのが基本である。特に、ユーザーがアップロードしたCSVを処理する場合は、自前の簡単な分割処理だけに頼らない方がよい。
CSVは文字化けしない?
CSVはテキストファイルなので、文字コードの影響を受ける。特に日本語のCSVをWindows版Excelで開くと、UTF-8とShift_JISの扱いの違いで文字化けすることがある。
WebアプリからCSVを出力する場合は、利用者がどのソフトで開くかを考える必要がある。Excelで開く前提なら、UTF-8 BOM付きにする、取り込み時に文字コードを指定してもらう、Shift_JISで出力する選択肢を用意する、といった対応が必要になることがある。
まとめ
- CSVは、表形式のデータをカンマ区切りのテキストとして扱うファイル形式である。
- Excelで開けるが、Excelファイルそのものではない。
- 値の中にカンマや改行が入る場合は、ダブルクォーテーションで囲む必要がある。
- 実務では単純な
split(",")だけでは不十分なことが多く、CSVパーサを使う方が安全である。 - AIにCSV処理を依頼するときは、文字コード、カラム名、複雑な値の有無を具体的に伝えるとよい。
情報ソース
- RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files
- Microsoft サポート: CSV ファイルをインポートまたはエクスポートする