コマンドライン
vastgrid-cli は、どんな大きさの CSV・TSV・Parquet・JSON Lines・Excel のファイルも、コマンド 1 つでブラウザーの表に開きます。ファイルはコマンドの中の DuckDB(Node.js)が読み、ページはそこから HTTP で行のブロックを読みます。どのサーバーから読むときとも同じ仕組みです。ファイルは手元のコンピューターから出ません。サーバーは 127.0.0.1 だけで、表示したアドレスを開いたブラウザーにだけ答えます。
npx vastgrid-cli sales.parquetnpx vastgrid-cli --save data/インストールすると、コマンドの名前は vastgrid です。
npm install -g vastgrid-clivastgrid sales.parquetNode.js 20 以降と、DuckDB の Node.js バインディングがある環境(Linux の x64・arm64 の glibc・musl、macOS の x64・arm64、Windows の x64・arm64)が必要です。
Usage: vastgrid [options] [<file or folder>…]
Options: --save Let the page save edited cells into CSV and TSV files (⌘S or Ctrl+S). --port <n> The port on 127.0.0.1; a free one by default. --no-open Print the address without opening the browser. -h, --help Show this help.| オプション | 意味 |
|---|---|
--save |
編集したセルを CSV・TSV のファイルに保存できるようにする(⌘S または Ctrl+S) |
--port <n> |
127.0.0.1 のポート。既定では空いているもの |
--no-open |
ブラウザーを開かず、アドレスだけを表示する |
-h、--help |
使い方を表示する |
コマンドはページのアドレスを表示し、ブラウザーで開きます。--no-open のときや、ブラウザーが開かなかったときは、表示されたアドレスを自分で開いてください。Ctrl+C でサーバーと DuckDB が止まり、一時ファイルのフォルダー(システムの一時フォルダーの vastgrid-cli)を消します。もう一度 Ctrl+C を押すと待たずに止まります。強制終了したコマンドが残したフォルダーは、次に起動したコマンドが消します。
| 形式 | ファイル |
|---|---|
| CSV、TSV | .csv、.tsv、.tab。圧縮したもの(.gz、.zst)も |
| JSON Lines、JSON | .jsonl、.ndjson、.json。.gz も |
| Parquet | .parquet、.pq |
| Excel | .xlsx、.xlsm |
- 指定したファイルを開きます。フォルダーを指定すると、その中の表のファイルを 2 階層まで、隠しファイルと隠しフォルダーを除いて最大 1,000 個まで集めます。何も指定しなければ、いまのフォルダーを使います。
- ページは、指定したファイル、続いてフォルダーのファイルを、いまのフォルダーからのパスで並べます。ほかのファイルは開きません。指定したフォルダーのより深い階層のファイルは、パスをアドレスに打てば開きますが、指定したファイルの隣のファイルは開きません。
- DuckDB は、指定したファイルとフォルダーのフォルダーの外を読みません(リンクは辿った先で判断します)。
ページは最初のファイルを、ツールバー・ステータスバー・行ごとのチェックボックス付きで示します。表の上の一覧でほかのファイルを選び、ブックのシートはボタンで切り替えます。アドレスにファイルとシート(?file=…&sheet=…)が残るので、ブラウザーの戻る・進むで行き来でき、ページを読み込み直しても同じファイルを示します。それぞれの表示(並べ替え・絞り込み・列の幅・選択・スクロール)はタブが覚えていて(sessionStorage)、戻ったときと読み込み直したときに元どおり示します。表示の言語はブラウザーの言語(英語・日本語・中国語・韓国語・スペイン語・ポルトガル語・フランス語・ドイツ語)に従います。
グリッドがエンジンとできることはすべて使えます。並べ替え・絞り込み・検索・グループ化・ピボット・数式・統計・セルの編集です。書き込んだセルは、ページを読み込み直してもコマンドが止まるまで DuckDB が持っています。書き出したファイルはブラウザーがダウンロードします。
--save を付けると、⌘S か Ctrl+S(またはツールバーの保存)で、書き込んだセルを元の CSV・TSV のファイルに保存します。編集したフィールド以外のバイトはそのまま残ります。付けなければ、コマンドがファイルを変えることはありません。Parquet・JSON Lines・Excel のファイルは保存しないので、書き出してください。ディスク上で変わったファイルは読み直します。書き込んだセルがあるときは、変わったことを知らせ、破棄するまでセルを残します。
アドレスとトークン
Section titled “アドレスとトークン”コマンドが表示するアドレスには、ランダムなトークンが入っています。トークン付きの最初の要求は、サーバーのポートに HttpOnly・SameSite=Strict の Cookie を受け取り、トークンのないアドレスへ移ります。以降の要求には Cookie が必要で、なければ 401 を返します。このため、
- ブラウザーで開いているほかのサイトは、サーバーを通じてファイルを読むことも変えることもできません(その要求には Cookie が付きません)。
- 同じコンピューターのほかの利用者も 127.0.0.1 には届きますが、トークンを知りません。
- 127.0.0.1 を指すほかのサイトの名前(DNS リバインディング)は、
Hostヘッダーで断ります。Hostはサーバーのポート付きの127.0.0.1かlocalhostでなければなりません。
ページの Content Security Policy は、自分のサーバーにだけ接続し(connect-src 'self')、ほかに何も読み込まず、フレームに入らないようにしています。環境変数 VASTGRID_TOKEN でトークン(16 文字以上の英数字・-・_)を決めると、アドレスが変わりません。ほかの利用者がプロセスの引数から見られないよう、オプションではなく環境変数にしています。
ほかのコンピューターから
Section titled “ほかのコンピューターから”サーバーは 127.0.0.1 でしか待ち受けません。遠くのマシンのファイルを開くときは、同じ番号のポートを転送します。
ssh -L 5185:127.0.0.1:5185 server# サーバーで:npx vastgrid-cli --port 5185 --no-open /data表示されたアドレスを、手元のコンピューターで開いてください。
まだできないこと
Section titled “まだできないこと”- ページを閉じる前に警告しません。書き込んだセルはコマンドが止まるまで残り、保存しなければそこで失われます。
詳しくは GitHub の cli.md(英語)にあり、試験の方法も書いています。