AIでCSVファイルをマスターする:構造、ユースケース、主なメリット

ほぼすべてのシステムがCSVファイルをエクスポートできます。だからこそこのフォーマットは生き残り、同時に、誰も予想しないような形で壊れる原因にもなっています。
この記事では、このフォーマットが実際に何を規定しているのか、実装によってどこで食い違いが生じるのか、そしてどのような業務において真に最適な選択肢となるのかを解説します。
このフォーマットに関するすべての仕様は、2005年10月にtext/csvメディアタイプを登録したRFC 4180に由来します。同じテキストはIETF datatrackerにもミラーリングされています。
CSVファイルとは実際には何なのか
CSVファイルは、レコードとフィールドに配置されたプレーンテキストです。その背景には、ワークブックも、フォーマットレイヤーも、数式エンジンも存在しません。
RFC 4180は、自身の位置づけについて異例なほど率直に述べています。そこには「正式な仕様が存在しないため、CSVファイルに対して多種多様な解釈が可能になっている」と記載されています。
つまり、この文書はルールではなく、慣習を記述しているのです。同文書の言葉を借りれば、「ほとんどの実装で踏襲されていると思われるフォーマット」を規定しています。
この一文こそが、CSVにまつわる苦痛のほとんどを説明しています。2つのツールがどちらも完全に真っ当な処理を行っていながら、同じファイルに対して異なる解釈をしてしまうことがあるのです。
仕様における7つのルール
RFC 4180は7つのルールを挙げています。これらは頭に入れておけるほど短く、また覚えておく価値があります。
- 「各レコードは個別の行に配置され、改行(CRLF)で区切られる。」
- 「ファイル内の最後のレコードには、末尾の改行があってもなくてもよい。」
- 最初の行にオプションとしてヘッダー行を置くことができる。ヘッダー行のフィールド数はレコードと同じでなければならない。
- フィールドはカンマで区切られ、「ファイル全体を通して、各行は同じ数のフィールドを含まなければならない。」
- フィールドはダブルクォーテーションで囲まれていてもいなくてもよい。
- 「改行(CRLF)、ダブルクォーテーション、およびカンマを含むフィールドは、ダブルクォーテーションで囲まなければならない。」
- クォーテーションで囲まれたフィールド内のダブルクォーテーションは、「その直前に別のダブルクォーテーションを置くことでエスケープしなければならない。」
これらのルールの中にある2つの条項が、他のすべてを合わせたよりも多くのトラブルを引き起こします。
スペースはデータである。 ルール4には「スペースはフィールドの一部とみなされ、無視されるべきではない」とあります。余計なスペースが入るだけで、異なる値になってしまいます。
末尾のカンマは不可。 同じルールには「レコードの最後のフィールドの後ろにカンマを置いてはならない」とあります。末尾にカンマがあると、余分な空のフィールドが存在することになってしまいます。
2つの有効なCSVファイルが対立してしまう理由
ルール5には、現実世界で発生する破損のほとんどを予見させる記述があります。RFC 4180は「Microsoft Excelなどの一部のプログラムは、ダブルクォーテーションをまったく使用しない」と指摘しています。
クォーテーションがオプションになると、ルール7のエスケープ規則も条件付きになります。あるツールで書き出されたファイルが、別のツールで異なる形で読み込まれることがあり、そのどちらも間違っていないという状況が生まれます。
正式な文法を見ると、安全な道がいかに狭いかがわかります。仕様におけるフィールドの定義では、エスケープされた形式かエスケープされていない形式のみが許可されており、エスケープされた形式ではカンマ、キャリッジリターン、ラインフィードをダブルクォーテーションで囲みます。
実際には、カンマを含む顧客名が1つあるだけで、1つの行が2つの行に分かれてしまうのはこれが原因です。
この失敗は静かに起こるため、大きな代償を伴います。エラーは何も発生しません。ただ、本来よりも行数が多いファイルが生成され、その余分な行も一見もっともらしく見えてしまうのです。
破損の主な原因となる2つのパラメータ
RFC 4180におけるMIME登録では、必須のパラメータは一切リストされていません。リストされているのは、charsetとheaderという、正確に2つのオプションパラメータのみです。
どちらもオプションですが、インポートが失敗したときの「いつもの容疑者」です。
文字コード(Charset)。 登録情報には「CSVの一般的な使用法はUS-ASCIIである」と記載されていますが、他の文字セットも許可されています。ファイル内にはどの文字セットが使用されたかを示す情報がないため、アクセント付きの名前や通貨記号が文字化けしてしまいます。
ヘッダー(Header)。 ルール3ではヘッダー行をオプションとしており、登録情報にはその存在を「オプションのheaderパラメータを介して示すべきである」とされています。ファイル単体では、1行目がデータなのかラベルなのかを判断できません。
3つ目の問題は、仕様には一切記載されていません。なぜなら、仕様がそれについて何も言及していないからです。それは「データ型が存在しない」ということです。下流の処理で推測されるまでは、すべてのフィールドが単なるテキストとして扱われます。
CSVファイルが最適な選択肢となるケース
このフォーマットはポータビリティにおいて圧倒的に優れており、それは決して小さなメリットではありません。
共通点のないシステム間でのデータ移行。 テキストを読み取ることができるツールであれば、どのような2つのツール間でもCSVファイルをやり取りできます。
10年後にも開く必要があるデータのアーカイブ。 廃止されて使えなくなるような独自のリーダーアプリは存在しません。
ストリーミングと追記。 各レコードが1行であるため、ファイルを書き換えることなく行を追加していくことができます。
差分比較とバージョン管理。 行ベースのテキストであるため、コード管理で使い慣れているツールをそのまま利用できます。
CSVファイルを使用することで失うもの
そのシンプルさゆえに、依存しているかもしれない機能が削ぎ落とされてしまいます。
| 失うもの | なぜそれが重要なのか |
|---|---|
| データ型 | インポート時に、先頭のゼロ、長いID、日付などが再解釈されてしまう |
| 複数のシート | 1ファイル=1テーブルであるため、データ間の関係性は別の場所で管理する必要がある |
| 数式とフォーマット | エクスポート時には計算後の値のみが残る |
| 宣言されたエンコーディング | ファイル内には文字コードを示す情報がない |
| 宣言された区切り文字 | セミコロン区切りのエクスポートも一般的であり、それもCSVと呼ばれている |
これらはバグではありません。メタデータを持たないフォーマットを採用することの代償です。保存しておく必要のある情報はすべて、ファイル自体の外部でドキュメント化しなければなりません。
主なメリットのまとめ
一言でまとめるなら、これに尽きます。
CSVファイルは、表形式のデータを移動するための最もポータブルで、耐久性があり、ストリーミングに適した方法です。値以外のものを一切持たないことで、それを実現しています。
受け取り側のシステムが不明である場合や、はるか将来に開く予定である場合、このトレードオフは受け入れる価値があります。しかし、データ型、関係性、またはフォーマットを維持したまま移行する必要がある場合には、不適切な選択となります。
タブ区切りの親戚は、別の問題と引き換えに一つの問題を解決します。このトレードがどのように役立つかについては、姉妹記事の「mastering TSV files」で解説しています。
AIを使用したCSVファイルの操作
「ファイルがある」状態から「答えがある」状態までのギャップに、ほとんどの時間が費やされます。現在、そのギャップは大幅に自動化できるようになっています。
Powerdrill Bloomはファイルを直接取り込みます。無料プランでは、Excel、CSV、PDF、ドキュメントのアップロードに対応しており、インサイト、チャート、サマリーの生成も可能です。
3つの機能ページで一般的なタスクをカバーしています。CSV AI assistantは単一のファイルに関する質問に対応します。CSV AI toolsはより幅広い機能を提供し、merge CSV fileは別々に届いたエクスポートファイルを結合します。TSV analysisページでは、タブ区切りのバリアントを扱っています。
自然言語でタスクを説明することで、いつもの遠回りを避けることができます。パーサーを書いたり、エンコーディングを推測したりする必要はなく、必要な出力を指定するだけです。
プランはpricing pageに掲載されており、無料プランでも実際のエクスポートファイルでテストするのに十分な機能が提供されています。お試しいただくには、start with Powerdrill Bloomから始めてください。
よくある質問
CSVの公式な標準規格はありますか?
RFC 4180はtext/csvメディアタイプを登録し、一般的な慣行を文書化したものです。正式な仕様は存在しないと明記されているため、厳格な標準ではなく慣習として捉えてください。
先頭のゼロが消えてしまうのはなぜですか?
このフォーマットにはデータ型が含まれていないため、下流のツールが00123のような値を数値と判断してしまいます。ダブルクォーテーションで囲んでも、この推測を常に防げるわけではありません。
値の中にあるカンマはどのように処理すべきですか?
ルール6に従い、フィールドをダブルクォーテーションで囲みます。値にダブルクォーテーションも含まれている場合は、ルール7に従い、それを2重にしてエスケープします。
セミコロン区切りのファイルもCSVですか?
広く作成され、広くCSVと呼ばれていますが、仕様ではカンマが規定されています。思い込みで処理せず、インポート前に区切り文字を確認してください。テキストエディタで最初の2行を開くだけで、数秒で確認できます。
CSVとTSVのどちらをエクスポートすべきですか?
データに基づいて選択してください。テキスト値の中にタブが含まれることはカンマよりも稀であるため、クォーテーション処理を減らすことができます。ただし、エディタを介してファイルをコピーする際に、タブは失われやすいという側面もあります。