wget https://hoge.com/foo.gz -P dir
gzip -d dir/foo.gz
Deno.run() したり、exec ライブラリ を使えば良いというのは誰でも浮かびますし、私も最初はそのように実装しました。
しかし全然うまくいかない。めちゃくちゃ面倒なんですよ!
Deno は piped output が 65536 bytes に制限されていたり、
wget や gz のコマンドの終了待ちをしようとしても、コードが長くなったり、うまく待てなかったり、地雷が多いです。
しかもその地雷が触ってみないことにはわからんというのが、一番致命的なところで、ファイルサイズが大きいものを扱おうとすると、途端に死にます。
たかが Linux コマンドを実行するのにこんなに苦労するとは思わなかった。
それならば wget や gzip decompress を Deno 上で実装すればいいのではないか。 確かにそれも選択肢としてアリなんですが、Linux コマンドはよくできているので、そちらのほうがたいてい簡単・省メモリ・高速なんですよね。 そして何よりライブラリを選ぶようなコストを掛けたくない。 やはりコード上で Linux コマンドを自然に叩けることってプログラミングする上で、とても大切だと思うのです。 その点では、Python や Ruby は非常によくできた言語だと再確認できました。
とは言え最近は Deno をよく使っているので、Deno で何とかしたい。 そんな時、少し前に出てきた google/zx、そして Deno ポートの zx_deno があることを思い出しました。 結論だけ言ってしまうと、zx_deno はめちゃくちゃ良いです。 一番最初のコードは以下のように書けます。
import {$} from 'https://deno.land/x/zx_deno/mod.mjs'
await $`wget https://hoge.com/foo.gz -P dir`;
await $`gzip -d dir/foo.gz`;
// process foo
これはいい。今後は zx_deno に全振りで良いんじゃないでしょうか。
0 件のコメント:
コメントを投稿