見出し画像

CSVを扱うシステムで考慮すべきこと

※当記事は2023年1月に執筆した記事で、情報は当時のものになります。

はじめに

こんにちは。大井です。
今回はCSV(Comma-Separated Values)のお話をさせていただきます。

私は2000年代からエンジニアをやっており、システムの連携などにCSVを多用してきました。
そして2020年代の現在においても、JSONやXMLを押し退けてCSVが採用されるケースがあり、若手が設計で躓きそうになる場面もいくつか見て来ました。

本記事では、CSVを扱った経験のある社内メンバーから、半ば常識化している「CSVを扱うシステムで考慮すべきこと」をまとめてみました。

もし、Creating Shared Valueが気になって閲覧されたのであれば、株式会社メンバーズ CSV戦略コンサルティング・CSV型プロモーション実行支援を是非ご覧ください。

なぜ、CSVは難しいのか?

CSVは各社が色々な形で実装してきた結果、様々な形式が混在するようになりました。
RFC-4180に記載されているCSVフォーマットもInformationalであり、標準化されているわけではありません。
「CSVフォーマット」という概念では、共通の認識にならないのです。

「CSVフォーマットで送るから取り込んでください」という要望だけでは設計・実装できません。
細部を詰めていく必要があるため、難しくなりがちなのです。

CSVフォーマットにおいて気をつけるべき点

では、CSVフォーマットにおいて気をつけるべき点を列挙していきます。
使用するフレームワークやライブラリが綺麗に処理してくれるようなものもありますので、そういったものは「テスト観点で漏れないか」を意識すると良いです。

改行コード

  • 読込時はLF、CR、CRLFのうち、想定されているものに対応できているか

  • 出力時はLF、CR、CRLFのいずれにするか、或いは選択式にするか

文字コード

  • UTF-8(BOMあり or なし) or Shift_JIS or EUC-JP のいずれを扱うか

  • 可能な限り、実装レベルで明確にする(例:Shift_JISの場合はMS-CP932であることまで定義)

  • UTF-8以外の場合は機種依存文字の扱いも決定しておく

使用文字種

  • 英大小文字、数字、半角記号(記号を列挙するレベルで考える)

  • カラム内にカンマ・改行が含まれるか

  • 制御コードなど、一般的なエディタで可視化できない文字が必要か

  • 空値とnull値の区別は必要か
    囲み文字なしのnullについては、null値と扱うか文字列「null」と扱うか

区切り文字

  • カンマが基本だが、Tab区切りなどがCSV(Character-Separated Values)と呼ばれるケースもある

囲み文字

  • 使用する記号は、ダブルクオート or シングルクオート

  • 表示する条件は、常にあり or 常になし or 改行やカンマを含むなどの必要な時だけ or カラム毎に定義する

  • 囲み文字内に囲み文字が入る場合のエスケープ方法

    •  例:ダブルクオートを “” のように二重化してエスケープ(Excelのエスケープ)

    • 例:\でエスケープ(Linuxでよく使われるエスケープ)

ExcelでCSVを扱うときの注意点

CSVを「人が編集するか」が、CSVを扱うシステムでは大きなポイントとなります。
人が編集するのであれば、そこで発生する問題も考慮しなければなりません。
ほとんどのケースでExcelが利用されるため、Excelの挙動を考えることなります。

例えば、編集の過程でフォーマットが変わり意図しない値となったり、Excelのバリデーションに引っかかるケースなどがあるため、対策が必要となります。
以下に具体的に列挙していきます。

数字

  • 前ゼロ埋めの数字は、前ゼロが消えてしまう場合がある

    • 例:IDを英字で始まりに変更する(固定プレフィックスAをつけて、A012345という形式にする)

    • 例:電話番号をハイフンを入れた形式とする(000-000-0000)

  • 桁数の多い数字は、指数化される場合がある

記号・特殊な文字

  • =で始まる文字列は、関数扱いされる場合がある

  • ‘で始まる文字列は、文字列表記のための記号として’が無視される場合がある

  • 制御コードなどの表示できない文字は、半角スペースに変換される場合がある

ファイル形式など

  • UTF-8(BOMあり)のCSVは、Shift_JIS(MS-CP932)で開かれるので、運用上不都合はないか検討する

  • 行・列チェックする場合は、最終行や最終列が空の時に切り詰められる場合があるため注意する

おわりに

昨今のシステム開発では、CSVファイルを扱うのは主流ではないと思います。
本記事の通り、開発者目線では曖昧な部分もあり考慮すべき点も多く、API連携やJSON・XMLなどを採用する方が多いでしょう。

しかし、ユーザー目線では、Excelで直感的に編集でき扱いやすいということも事実です。
しばらくの間は、引き続きCSVの需要はあるのではないでしょうか。

この記事が役に立てば幸いです。

この記事が気に入ったらサポートをしてみませんか?