csv-parse
CSVファイルを効率的に読み込み・書き出しするSkillで、大きなファイルの処理、区切り文字の指定、データ変換、検証、オブジェクトからのCSV生成などが可能で、データ入出力やレポート作成を支援するSkill。
📜 元の英語説明(参考)
Parse and generate CSV files with the csv package — stream large files, handle custom delimiters, transform records, validate data, and generate CSV output from objects. Use when tasks involve data import/export, ETL pipelines, processing uploaded CSV files, or generating downloadable reports.
🇯🇵 日本人クリエイター向け解説
CSVファイルを効率的に読み込み・書き出しするSkillで、大きなファイルの処理、区切り文字の指定、データ変換、検証、オブジェクトからのCSV生成などが可能で、データ入出力やレポート作成を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o csv-parse.zip https://jpskill.com/download/14803.zip && unzip -o csv-parse.zip && rm csv-parse.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14803.zip -OutFile "$d\csv-parse.zip"; Expand-Archive "$d\csv-parse.zip" -DestinationPath $d -Force; ri "$d\csv-parse.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
csv-parse.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
csv-parseフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
csv-parse
CSVデータを解析および文字列化します。ストリーミングアーキテクチャにより、あらゆるサイズのファイルを処理できます。
セットアップ
# csv パッケージをインストールします (parse, stringify, transform, generate が含まれます)。
npm install csv
# または、個別のパッケージをインストールします。
npm install csv-parse csv-stringify
CSVファイルの解析
// src/csv/parse-file.ts — CSVファイルを読み込み、行をオブジェクトに変換します。
// ヘッダー行を各レコードオブジェクトのキーとして使用します。
import { parse } from "csv-parse";
import fs from "fs";
export async function parseCsvFile(filePath: string): Promise<Record<string, string>[]> {
const records: Record<string, string>[] = [];
const parser = fs.createReadStream(filePath).pipe(
parse({
columns: true, // 最初の行をヘッダーとして使用
skip_empty_lines: true,
trim: true,
})
);
for await (const record of parser) {
records.push(record);
}
return records;
}
CSV文字列の解析
// src/csv/parse-string.ts — 文字列からCSVデータを解析します (例: APIレスポンスボディ)。
import { parse } from "csv-parse/sync";
export function parseCsvString(csvData: string) {
return parse(csvData, {
columns: true,
skip_empty_lines: true,
cast: true, // 数値とブール値を自動的にキャスト
cast_date: true, // ISO日付文字列を自動的にキャスト
});
}
CSV出力の生成
// src/csv/stringify.ts — オブジェクトをダウンロードまたはファイルエクスポート用のCSV文字列に変換します。
import { stringify } from "csv-stringify/sync";
interface SalesRow {
product: string;
revenue: number;
units: number;
date: string;
}
export function generateCsv(data: SalesRow[]): string {
return stringify(data, {
header: true,
columns: [
{ key: "product", header: "Product Name" },
{ key: "revenue", header: "Revenue ($)" },
{ key: "units", header: "Units Sold" },
{ key: "date", header: "Date" },
],
});
}
大規模ファイルのストリーミング
// src/csv/stream.ts — メモリにロードせずに、数百万行のCSVファイルを処理します。
// ストリーム処理中に各レコードを変換します。
import { parse } from "csv-parse";
import { stringify } from "csv-stringify";
import { transform } from "stream-transform";
import fs from "fs";
export function transformCsv(inputPath: string, outputPath: string) {
fs.createReadStream(inputPath)
.pipe(parse({ columns: true }))
.pipe(
transform((record: any) => ({
name: record.name.toUpperCase(),
email: record.email.toLowerCase(),
total: Number(record.price) * Number(record.quantity),
}))
)
.pipe(stringify({ header: true }))
.pipe(fs.createWriteStream(outputPath));
}
カスタム区切り文字
// src/csv/delimiters.ts — TSVファイル、セミコロン区切り、またはパイプ区切りを処理します。
import { parse } from "csv-parse/sync";
// タブ区切り値
const tsvData = "name\tage\tcity\nAlice\t30\tPrague";
const tsvRecords = parse(tsvData, { columns: true, delimiter: "\t" });
// セミコロン区切り (ヨーロッパのエクスポートで一般的)
const csvData = "name;age;city\nAlice;30;Prague";
const csvRecords = parse(csvData, { columns: true, delimiter: ";" });
バリデーション
// src/csv/validate.ts — 解析中にCSVレコードを検証し、エラーを収集します。
import { parse } from "csv-parse";
import fs from "fs";
interface ValidationError {
line: number;
field: string;
message: string;
}
export async function validateCsv(
filePath: string,
requiredFields: string[]
): Promise<{ valid: any[]; errors: ValidationError[] }> {
const valid: any[] = [];
const errors: ValidationError[] = [];
const parser = fs.createReadStream(filePath).pipe(
parse({ columns: true, skip_empty_lines: true })
);
let line = 1;
for await (const record of parser) {
line++;
let hasError = false;
for (const field of requiredFields) {
if (!record[field] || record[field].trim() === "") {
errors.push({ line, field, message: `Missing required field: ${field}` });
hasError = true;
}
}
if (!hasError) valid.push(record);
}
return { valid, errors };
}
Express APIエンドポイント
// src/csv/api.ts — CSVダウンロードを生成およびストリーミングするAPIエンドポイント。
import { stringify } from "csv-stringify";
import type { Request, Response } from "express";
export function handleCsvExport(req: Request, res: Response, data: any[]) {
res.setHeader("Content-Type", "text/csv");
res.setHeader("Content-Disposition", "attachment; filename=export.csv");
const stringifier = stringify({ header: true });
stringifier.pipe(res);
for (const row of data) {
stringifier.write(row);
}
stringifier.end();
} 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
csv-parse
Parse and stringify CSV data. Streaming architecture handles files of any size.
Setup
# Install the csv package (includes parse, stringify, transform, generate).
npm install csv
# Or install individual packages:
npm install csv-parse csv-stringify
Parsing a CSV File
// src/csv/parse-file.ts — Read a CSV file and convert rows to objects.
// Uses the header row as keys for each record object.
import { parse } from "csv-parse";
import fs from "fs";
export async function parseCsvFile(filePath: string): Promise<Record<string, string>[]> {
const records: Record<string, string>[] = [];
const parser = fs.createReadStream(filePath).pipe(
parse({
columns: true, // use first row as headers
skip_empty_lines: true,
trim: true,
})
);
for await (const record of parser) {
records.push(record);
}
return records;
}
Parsing a CSV String
// src/csv/parse-string.ts — Parse CSV data from a string (e.g., API response body).
import { parse } from "csv-parse/sync";
export function parseCsvString(csvData: string) {
return parse(csvData, {
columns: true,
skip_empty_lines: true,
cast: true, // auto-cast numbers and booleans
cast_date: true, // auto-cast ISO date strings
});
}
Generating CSV Output
// src/csv/stringify.ts — Convert objects to CSV strings for download or file export.
import { stringify } from "csv-stringify/sync";
interface SalesRow {
product: string;
revenue: number;
units: number;
date: string;
}
export function generateCsv(data: SalesRow[]): string {
return stringify(data, {
header: true,
columns: [
{ key: "product", header: "Product Name" },
{ key: "revenue", header: "Revenue ($)" },
{ key: "units", header: "Units Sold" },
{ key: "date", header: "Date" },
],
});
}
Streaming Large Files
// src/csv/stream.ts — Process million-row CSV files without loading into memory.
// Transform each record as it streams through.
import { parse } from "csv-parse";
import { stringify } from "csv-stringify";
import { transform } from "stream-transform";
import fs from "fs";
export function transformCsv(inputPath: string, outputPath: string) {
fs.createReadStream(inputPath)
.pipe(parse({ columns: true }))
.pipe(
transform((record: any) => ({
name: record.name.toUpperCase(),
email: record.email.toLowerCase(),
total: Number(record.price) * Number(record.quantity),
}))
)
.pipe(stringify({ header: true }))
.pipe(fs.createWriteStream(outputPath));
}
Custom Delimiters
// src/csv/delimiters.ts — Handle TSV files, semicolon-separated, or pipe-delimited.
import { parse } from "csv-parse/sync";
// Tab-separated values
const tsvData = "name\tage\tcity\nAlice\t30\tPrague";
const tsvRecords = parse(tsvData, { columns: true, delimiter: "\t" });
// Semicolon-separated (common in European exports)
const csvData = "name;age;city\nAlice;30;Prague";
const csvRecords = parse(csvData, { columns: true, delimiter: ";" });
Validation
// src/csv/validate.ts — Validate CSV records during parsing and collect errors.
import { parse } from "csv-parse";
import fs from "fs";
interface ValidationError {
line: number;
field: string;
message: string;
}
export async function validateCsv(
filePath: string,
requiredFields: string[]
): Promise<{ valid: any[]; errors: ValidationError[] }> {
const valid: any[] = [];
const errors: ValidationError[] = [];
const parser = fs.createReadStream(filePath).pipe(
parse({ columns: true, skip_empty_lines: true })
);
let line = 1;
for await (const record of parser) {
line++;
let hasError = false;
for (const field of requiredFields) {
if (!record[field] || record[field].trim() === "") {
errors.push({ line, field, message: `Missing required field: ${field}` });
hasError = true;
}
}
if (!hasError) valid.push(record);
}
return { valid, errors };
}
Express API Endpoint
// src/csv/api.ts — API endpoint that generates and streams a CSV download.
import { stringify } from "csv-stringify";
import type { Request, Response } from "express";
export function handleCsvExport(req: Request, res: Response, data: any[]) {
res.setHeader("Content-Type", "text/csv");
res.setHeader("Content-Disposition", "attachment; filename=export.csv");
const stringifier = stringify({ header: true });
stringifier.pipe(res);
for (const row of data) {
stringifier.write(row);
}
stringifier.end();
}