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
0
110
困った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.1k
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.6k
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
320
あの夜、私たちは「人間」に戻った。 ── 災害ユートピア、贈与、そしてアジャイルの再構築 / 20260108 Hiromitsu Akiba
shift_evolve
PRO
0
550
Digitization部 紹介資料
sansan33
PRO
1
6.5k
Claude Codeを使った情報整理術
knishioka
20
12k
コミュニティが持つ「学びと成長の場」としての作用 / RSGT2026
ama_ch
0
190
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
15
5k
Java 25に至る道
skrb
3
200
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
920
Scrum Guide Expansion Pack が示す現代プロダクト開発への補完的視点
sonjin
0
570
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.4k
[PR] はじめてのデジタルアイデンティティという本を書きました
ritou
1
800
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
Navigating Team Friction
lara
191
16k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
280
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
1
220
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
110
Being A Developer After 40
akosma
91
590k
Agile that works and the tools we love
rasmusluckow
331
21k
Balancing Empowerment & Direction
lara
5
840
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」