Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
困ったCSVファイルの話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
もっち
January 15, 2026
Technology
2
380
困ったCSVファイルの話
Yokohama North Meetup #12「LT新年会2026」
https://yokohama-north.connpass.com/event/377972/
で発表した資料です。
もっち
January 15, 2026
Tweet
Share
More Decks by もっち
See All by もっち
もう外には出ない。より快適なフルリモート環境を目指して
mottyzzz
13
12k
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
12
7.7k
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
1.2k
Other Decks in Technology
See All in Technology
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
2
3.2k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
760
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
500
Greatest Disaster Hits in Web Performance
guaca
0
290
Claude Code for NOT Programming
kawaguti
PRO
1
100
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
270
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
210
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
260
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
110
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.6k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
230
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
71
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
37k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
87
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
390
Ethics towards AI in product and experience design
skipperchong
2
200
Google's AI Overviews - The New Search
badams
0
910
It's Worth the Effort
3n
188
29k
GraphQLとの向き合い方2022年版
quramy
50
14k
Transcript
困ったCSVファイルの話 2026/01/15 もっち(@mottyzzz) Yokohama North Meetup #12「LT新年会2026」
⾃⼰紹介 もっち(@mottyzzz) 松本明紘 株式会社 カケハシ(2023年2⽉〜) 好き:ビール🍻 コーヒー☕ 横浜の南⻄側に住んでます(北部ではない) 2
3 みんな⼤好き CSV
CSVファイルの⽤途 4 • データ受け渡し • エクスポート・⼀括インポート • 処理中の中間データ • ログ
• バックアップ・アーカイブ • 設定ファイル • テストデータ
5 CSV (Comma-Separated Values)
CSVの仲間 TSV = Tab-Separated Values SSV = Space-Separated Values SSV
= Semicolon-Separated Values 6
7 CSV (Character-Separated Values) それらをまとめて、こう呼ばれることもある
割とみんな ⾃由なCSVフォーマットで CSVファイルを作ってる 8
RFC 4180 9
10 RFC 4180 CSVファイルの共通フォーマットと MIMEタイプ(text/csv)の仕様を定 義している 2005年に策定された 下記のようなフォーマット仕様が 定義されている •
レコードの区切り(改⾏) • ヘッダーの扱い⽅ • ダブルクォーテーション(")の使い⽅ • エスケープの⽅法 • 列数の⼀致 https://www.rfc-editor.org/rfc/rfc4180
みなさん仕様 守っていますか? 11
読み込み・書き込みする ソフトウェア(ライブラリ、ツール) によって独⾃の解釈で処理している 12
これまでに出会った 困ったCSVファイルの フォーマットを 5つ紹介します!!! 13
困った①:""なしの改⾏、カンマ、ダブルクォーテーション 14 商品名,説明,価格,備考 りんご,新鮮な国産りんご,100,なし みかん,愛媛県産,⽢くてジューシー,80,⼈気商品 メロン,⾼級メロン "⼣張キング",5000,ギフト⽤化粧箱⼊り トマト,完熟トマト 産地: 熊本県
糖度: 8度以上,200,サラダ、パスタに最適 よくあるCSVパーサーでは処理で きないことが多いので、独⾃に処 理する必要があるが、ある程度構 造に制約がないと難しい ダブルクォーテーション使ってね
困った②:複数⾏ヘッダ+α 15 ,,売上データ,,,,,在庫データ,, ,,,2024年上半期,,2024年下半期,,,⽉末時点, 商品コード,商品名,1⽉,2⽉,3⽉,4⽉,5⽉,6⽉,数量,単位 ,,(千円),(千円),(千円),(千円),(千円),(千円),, A001,りんご,150,180,200,220,190,210,500,個 A002,みかん,120,90,80,100,110,130,300,個 A003,バナナ,200,210,190,180,200,220,450,房 B001,⽜乳,80,85,90,88,92,95,200,本
B002,ヨーグルト,60,65,70,72,68,75,150,個 C001,⾷パン,100,110,105,115,120,125,80,⽄ C002,菓⼦パン,45,50,55,48,52,58,120,個 ほとんどのケースで、skip=nで処理 することでなんとかなるけど、、、 パースにヘッダーの情報が必要な場 合は頑張らなきゃいけない ヘッダ
困った③:固定⾏数じゃない基本情報 16 注⽂番号,ORD-2024-0123 注⽂⽇,2024-01-15 顧客名,株式会社サンプル商事 配送先住所,東京都渋⾕区1-2-3 電話番号,03-1234-5678 … 明細 商品コード,商品名,数量,単価,⼩計
PROD001,りんご,10,100,1000 PROD002,みかん,20,80,1600 PROD003,バナナ,5,120,600 システムからエクスポートした帳票 系のデータで稀によく⾒る形。 処理すべきデータレコード以外のも のが先頭に固定⾏数でまとまってく れていればまだ良いけど、、、 基本情報
困った④:⾏によって列数が変わる 17 H,ORD-2024-0123,2024-01-15,株式会社サンプル商事 C,⽥中太郎, 03-1234-5678 A,150-0001,東京都渋⾕区1-2-3,サンプルビル5F I,1,りんご,10,100,1000 I,2,みかん,20,80,1600 I,3,バナナ,5,120,600 S,⼩計,3200
S,消費税(10%),320 S,送料,500 T,合計⾦額,4020 P,銀⾏振込,2024-01-31,サンプル銀⾏ 本店 普通 1234567 N,午前中配送希望 N,段ボール箱で梱包 D,2024-01-16,ヤマト運輸,1234-5678-9012,配送中 CSVパーサーによっては読み込みエ ラーになったり、列数が⼀番多いと ころに合わせてくれたり。 エラーになる場合は、独⾃にパース する必要がある。他の困ったケース と組み合わさると⾟い
困った⑤:複数の表が⼀つのCSVファイルに混在している 18 売上ID,⽇付,商品,数量,⾦額 S001,2024-01-15,りんご,10,1000 S002,2024-01-15,みかん,5,400 … 仕⼊ID,⽇付,商品,仕⼊先,数量,単価,合計⾦額 P001,2024-01-10,りんご,⼭⽥農園,100,80,8000 P002,2024-01-12,みかん,鈴⽊果樹園,200,70,14000 …
商品,在庫数,最終更新 りんご,50,2024-01-15 みかん,120,2024-01-15 バナナ,80,2024-01-14 ファイル分けようね
その他 • 同じカラム名のカラムを複数存在させないで • ⽂字コードの混在やめて • BOM • エスケープシーケンス独⾃に決めるのやめて •
"123"が数値なのか⽂字列なのか分からない • 空値の表現統⼀して(N/A, “”, 半⾓スペース, 空⽂字, Null) 19
実装者はCSVファイルを処理する時は、 ⾃分が⽣成するときは保守的 他所から受け取るものには寛容 になるべきである(意訳) 20 RFC 4180にも下記の記載がある
CSVファイルを扱うときは 気をつけましょう!!! 21
困ったCSVファイルの話 2026/01/15 もっち(@mottyzzz) Yokohama North Meetup #12「LT新年会2026」