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
もっち
January 15, 2026
Technology
2
410
困った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.3k
Other Decks in Technology
See All in Technology
スケールアップ企業でQA組織が機能し続けるための組織設計と仕組み〜ボトムアップとトップダウンを両輪としたアプローチ〜
tarappo
1
160
スクリプトの先へ!AIエージェントと組み合わせる モバイルE2Eテスト
error96num
0
180
Mitigating geopolitical risks with local-first software and atproto
ept
0
100
Cortex Code CLI と一緒に進めるAgentic Data Engineering
__allllllllez__
0
420
最強のAIエージェントを諦めたら品質が上がった話 / how quality improved after giving up on the strongest AI agent
kt2mikan
0
190
わからなくて良いなら、わからなきゃだめなの?
kotaoue
1
370
内製AIチャットボットで学んだDatadog LLM Observability活用術
mkdev10
0
130
Claude Code のコード品質がばらつくので AI に品質保証させる仕組みを作った話 / A story about building a mechanism to have AI ensure quality, because the code quality from Claude Code was inconsistent
nrslib
13
8.6k
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
240
バクラク最古参プロダクトで重ねた技術投資を振り返る
ypresto
0
170
ReactのdangerouslySetInnerHTMLは“dangerously”だから危険 / Security.any #09 卒業したいセキュリティLT
flatt_security
0
320
PMとしての意思決定とAI活用状況について
lycorptech_jp
PRO
0
140
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Building Adaptive Systems
keathley
44
3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
980
Tell your own story through comics
letsgokoyo
1
850
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
250
First, design no harm
axbom
PRO
2
1.1k
Making Projects Easy
brettharned
120
6.6k
Raft: Consensus for Rubyists
vanstee
141
7.4k
Code Review Best Practice
trishagee
74
20k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
480
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」