Initial dataxl CLI

This commit is contained in:
2026-06-26 21:12:47 +09:00
commit fab059bc0a
9 changed files with 1066 additions and 0 deletions

130
README.md Normal file
View File

@@ -0,0 +1,130 @@
# dataxl
`dataxl` は、構造化データファイルとExcelの間で情報を行き来させるための
Go製CLIです。
主な用途は、YAML/TOML/JSONなどの構造化ファイルをExcelに貼り付けやすい
TSVへ変換したり、Excelからコピーした表を再び構造化データへ戻したりする
ことです。
## 対応形式
- JSON
- YAML / YML
- TOML
- CSV
- TSV
- XLSX
## インストール
Go 1.24以上が必要です。
```sh
go install git.rumginger.org/agent/dataxl/cmd/dataxl@latest
```
リポジトリをcloneして使う場合:
```sh
git clone https://git.rumginger.org/agent/dataxl.git
cd dataxl
go build ./cmd/dataxl
```
## 基本的な使い方
YAMLをExcel貼り付け向けのTSVへ変換:
```sh
dataxl -from yaml -to tsv -i examples/people.yaml -o people.tsv
```
ExcelからコピーしたTSVをJSONへ戻す:
```sh
dataxl -from tsv -to json < people.tsv > people.json
```
JSONからExcel workbookを作成:
```sh
dataxl -from json -to xlsx -i people.json -o people.xlsx
```
Excel workbookをYAMLへ変換:
```sh
dataxl -from xlsx -to yaml -i people.xlsx -sheet Sheet1
```
入力または出力ファイル名から形式を推定できる場合、`-from` または `-to`
省略できます。stdin/stdoutを使う場合は明示してください。
```sh
dataxl -i examples/people.yaml -o people.tsv
dataxl -from tsv -to yaml < people.tsv
```
## Excelとの連携
Excelへ貼り付ける場合はTSVが便利です。
```sh
dataxl -from yaml -to tsv -i examples/people.yaml
```
出力をそのままコピーしてExcelのシートに貼り付けると、タブ区切りの列として
展開されます。
Excelから戻す場合は、シート上の範囲をコピーしてstdinへ渡します。
```sh
dataxl -from tsv -to yaml > restored.yaml
```
## 入れ子構造の表現
構造化データの入れ子は、Excelで編集しやすい列名へ展開されます。
入力例:
```yaml
- id: 1
user:
name: Alice
items:
- sku: A-001
qty: 2
```
TSV出力例:
```tsv
id items[0].qty items[0].sku user.name
1 2 A-001 Alice
```
逆方向の変換では、`user.name``items[0].sku` のような列名から入れ子の
map/arrayを復元します。
## CLIオプション
- `-i`: 入力ファイル。省略時はstdin。
- `-o`: 出力ファイル。省略時はstdout。
- `-from`: 入力形式。`json`, `yaml`, `toml`, `csv`, `tsv`, `xlsx`
- `-to`: 出力形式。`json`, `yaml`, `toml`, `csv`, `tsv`, `xlsx`
- `-sheet`: XLSXの読み書きに使うシート名。既定値は `Sheet1`
- `-pretty`: JSONなどの構造化出力を整形するか。既定値は `true`
## 現在の制約
- 表形式では1行目をヘッダーとして扱います。
- XLSXは指定した1シートのみ読み書きします。
- セル値の型推定は、空文字、真偽値、整数、小数、文字列の範囲です。
- 複雑なExcel書式や数式の保持は目的外です。
## 開発者向け情報
- 設計概要: [docs/architecture.md](docs/architecture.md)
- 開発手順: [docs/development.md](docs/development.md)