当方でデータベースを取り扱うときに蓄積されたノウハウを構造化CSV "Q11Q CSV Format v1.0"(以下QSv1)として提案する。これは、従来のCSVの3行を追加し、データ型・列番号・列名を明示的に定義し、可搬性・自動変換性・エラー解析性を飛躍的に向上させる自己記述型フォーマットである。
0. 基本仕様
- 文字コード:UTF-8(BOMなし)を推奨
- 区切り文字(Delimiter):TAB(
\\t
)を推奨- カンマ(
,
) は金額や小数点と衝突するため避けること
- カンマ(
- 行区切り:CR+LF(Windows標準)またはLF(UNIX互換)両対応
- 可変長を想定している
1. 構造定義(標準構文)
※本来はタブ区切りを推奨するが、説明のため、コンマ区切りとしている。
0,1,2,3
TEXT(29),TEXT(3),DATE,CURRENCY
氏名,年齢,生年月日,給与
山田太郎,30,1990/01/01,500000
佐藤花子,27,1995/12/25,420000
各行の意味:
行番号 | 内容 | 説明 |
---|---|---|
1行目 | 列番号 | 0起算の固定インデックス、列順を保証 |
2行目 | データ型 | 明示型(TEXT(N), DATE, NUMERIC等) |
3行目 | 列名 | フィールド名、予約語や重複も許容 |
4行目〜 | データ本体 | 実データ、型定義に従って処理される |
最初にデータ型が定義されているので、各データにはダブルクォーテーションは必要ない。
2. データ型定義一覧(標準推奨)
型名 | 意味 | 備考 |
---|---|---|
TEXT(N) | 文字列(最大N文字) | Access, SQL用に直接変換可 |
DATE | 日付型(YYYY-MM-DD) | ISO形式推奨 |
CURRENCY | 金額型(整数) | AccessではCurrency型に変換 |
NUMERIC(P,S) | 固定精度数(P桁, S小数) | adNumeric型やSQL Decimal変換可 |
BOOLEAN | 真偽(-1/0またはTrue/False) | 必要時に解釈 |
DOUBLE | 倍精度浮動小数点型 | 科学技術・統計処理に用いる |
SINGLE | 単精度浮動小数点型 | 金利等の表示使用される |
3. Q11Q式の技術的利点(構造別)
■ 型安全性
- 値を見て型を推定しない(例:"0" → True誤解釈を防止)
- TEXT行があるため、値にクォーテーションが不要
- タブ区切りにした場合、数字はコンマ付で表示可能
■ エラー特定性
- 列名が予約語・Nullでも処理可能
- "列3番の値 'abc' を DATE に変換できない" などの特定が明確
■ 処理汎用性
-
skiprows=2
でPandasなどに直接流し込める - 列番号で処理できるため、列名の揺らぎに強い
■ 可搬性・拡張性
- Excel, Access, PostgreSQL, SQLite 等への移行が容易
- JSON Schema等不要。CSV単体で完結
4. 拡張運用(推奨)
- ファイル先頭に以下のコメント行を追加:
# Q11Q CSV Format v1.0
- 型行に
@INFER
を使うことで、スキーマ自動生成用マーカーとすることも可能(ツール連携時)
5. 利用例(SQL DDL生成)
上記CSVから以下のSQLが自動生成可能:
CREATE TABLE 顧客データ (
氏名 VARCHAR(29),
年齢 VARCHAR(3),
生年月日 DATE,
給与 MONEY
);
6. 実務補足(メタ情報記述指針)
-
型が不明な場合:元のDB型名をそのまま2行目に記載しても良い(例:
VARCHAR2
,nvarchar
等) -
単位の明示:金額・体積・重さなどは、列名に
(円)
,(kg)
のように単位を含めることを推奨 - **0埋め:**パディングが望ましいときは要件に定義すること
- **郵便番号型:**こうした出力書式の指定が必要な場合は要件を定義する事。郵便番号の他、電話番号等が考えられる。
- 緯度・経度:方位(N/S/E/W)や表記形式(度分秒 vs 十進数)を列名または型に含めること
7. 結論
Q11Q式CSV(SFv1)は、まだ改善の余地があると思われるものの、構造と意味を明示的に含んだ自己記述型CSVであり、従来の曖昧なCSVフォーマットに代わる実用的かつ極めて堅牢な構造定義方式である。また、データベースの構造についてもCSVを観るだけで理解が可能であり、元のデータベースとデータ型のVariantだけ要件を定義すればよく、マニュアルの記載も効率的となる。
AI処理・ETL処理・Access変換・Python処理など、全領域で構文崩壊を未然に防ぐための基本構造として推奨される。
📩 SFv1へのご意見・導入報告フォーム(匿名・自由記述)
Q11Q CSV Format v1.0(QSv1)を導入された方、あるいは仕様をご覧になった方からのご意見・改善提案・活用事例などを広く募集します。Qiitaのコメント欄又は以下のフォームにお寄せください。
- 匿名可・メールアドレス不要
- 1分程度で送信可能
- 返信を希望される方のみ連絡先記入欄が表示されます
📄 フォームはこちらから
👉 https://forms.gle/XF13ZrKidmPMNSCB8
みなさまからのフィードバックは、今後のSFv1仕様の進化・拡張・スクリプト提供の参考にさせていただきます。
🔖 Qiita記事アーカイブリンク
🪪 概要記事(第1回)
https://qiita.com/Q11Q/items/cc504d515a5592e605e3
📜 仕様本文(第2回)
https://qiita.com/Q11Q/items/c79321a8ab9d3b0a560a
from the QSv1 team