deno-csvgen
DenoとTypeScriptで作成した、レイアウト定義からダミーCSVを生成するCLIツールです。列定義、行数、区切り文字、ヘッダー有無を指定し、検証用・開発用のCSVデータを素早く作成できるようにしています。
deno-csvgen は、JSON形式のレイアウト定義をもとに、ダミーCSVファイルを生成するCLIツールです。
開発や検証の中で、任意の列構成を持つCSVデータが必要になる場面があります。このツールでは、列名や型をレイアウトファイルに定義し、コマンドラインから行数や区切り文字を指定してCSVを生成できるようにしました。
主な機能
- JSONレイアウトファイルをもとにしたCSV生成
- 生成行数の指定
- 出力ファイルパスの指定
- ヘッダー行の有無を指定
- カンマ、タブ、スペース、パイプ区切りに対応
- サンプルレイアウトファイルの出力
- 生成中の進捗表示
対応している列型
stringchoicesintegerbooleantimestampdatetime
技術スタック
- Deno
- TypeScript
- Cliffy
- Zod
- Deno Standard Library CSV
- faker-js
- date-fns
作成背景
業務や個人開発では、CSVインポート機能や一覧表示機能を検証するために、まとまった量のテストデータが必要になることがあります。
手作業でCSVを作るのは手間がかかるため、列定義だけを用意すれば、任意の行数のダミーデータを生成できるCLIとして作成しました。
実装で意識したこと
レイアウトファイルはZodで検証し、列定義の不備を早い段階で検出できるようにしました。
CSV生成処理では、データを一度にすべて組み立てるのではなく、ReadableStreamとCsvStringifyStreamを使って順次処理する構成にしています。また、一定件数ごとにバッファを書き込むことで、大きめのCSV生成にも対応しやすい形にしました。
学んだこと
CLIツールでは、機能そのものだけでなく、オプション設計、入力ファイルの検証、出力先の扱い、進捗表示など、使う側の体験を含めて考える必要があります。
また、Denoでは標準ライブラリやnpmパッケージを組み合わせながら、ファイル操作、ストリーム処理、CLIコマンド定義を比較的シンプルに実装できることを確認できました。