Skip to content
Latchkey

CSVとは? Comma-Separated Valuesの解説

CSV(Comma-Separated Values)は、各行が1つのrowで、カンマが列を区切る、表形式データのためのプレーンテキストフォーマットです。

CSVは、プログラム間で表形式データを移動する最もシンプルな方法です。あらゆるスプレッドシート、データベース、データツールがインポートとエクスポートできます。そのシンプルさは弱点でもあります: 単一の公式仕様がないため、引用符やエッジケースがツールによって異なります - これはデータパイプラインがCIでCSVを解析するときに問題になります。

CSVとは

CSVファイルはプレーンテキストで、各行が1つのレコードであり、レコード内のフィールドはカンマで区切られます。オプションの先頭行に列ヘッダを持ちます。テーブルやスプレッドシートに自然にマッピングされ、これがデータのrowにとって普遍的な交換フォーマットである理由です。

引用符とエスケープ

厄介なのは、カンマ、引用符、改行を含むデータです。慣例では、そのようなフィールドを二重引用符で囲み、埋め込まれた引用符を二重にすることでエスケープします。ツールは細かい点で食い違うため、内部にカンマを含むフィールドは、誤って解析されるCSVの典型的な原因です。

CSVに本物の標準がない理由

非公式な仕様(RFC 4180)はありますが、実際には区切り文字、line ending、encoding、引用符が異なります。WindowsでエクスポートされたファイルはCRLFのline endingを使うかもしれず、ヨーロッパのエクスポートはカンマの代わりにセミコロンを使うかもしれず、encodingはUTF-8からレガシーなcode pageまで様々です。

データパイプラインとCIにおけるCSV

データパイプラインは、エクスポートやAPIからCSVを取り込み、それを検証・変換することが頻繁にあります。CIではそれらの変換を小さなCSVのfixtureに対してテストし、生成されたレポートCSVが公開前に期待される列とrow数を持つことを検証するjobを持つこともあります。

Checking CSV output in a job
# Validate a generated CSV in CI
steps:
  - run: python export_report.py > report.csv
  - run: |
      header=$(head -1 report.csv)
      test "$header" = "date,builds,minutes"

Latchkeyについての注記

CSVを扱うjobは単なる計算処理で、しばしばサンプルデータセットを取得します。Latchkeyではそれらのfixtureを実行間でcacheできるため、データ検証のjobがbuildごとに同じサンプルファイルを再ダウンロードすることがなくなります。

重要なポイント

  • CSVは各行が1つのrowでカンマが列を区切るプレーンテキストであり、表形式データに最適です。
  • 埋め込まれたカンマや引用符の引用・エスケープのルールはツールによって異なるため、CSVは誤って解析されやすいです。
  • データパイプラインはCSVを取り込み、出力します。CIはfixtureと期待される列に対してそれを検証すべきです。

関連ガイド