zlib を利用してデータを圧縮 / 展開するコマンドを作りました

zlib を利用してデータを圧縮 / 展開 *1 するコマンドを作りました。

github.com

書くこと

  • なにができる?
  • 使い方
  • インストール
  • 動機
  • まとめ

なにができる?

  • データを zlib で圧縮
  • zlib で圧縮 されたデータの展開

これらをしてくれるコマンドです。

使い方

ファイルの圧縮

$ echo -n 'zlib' > decompressed.txt
$ zlib --compress < decompressed.txt > compressed.txt

圧縮ファイルの展開

$ zlib --decompress < compressed.txt
zlib

圧縮と BASE64 エンコード

$ echo -n 'zlib' | zlib --compress | base64
eJyryslMAgAEZAGy

展開と BASE64 デコード

$ echo -n 'eJyryslMAgAEZAGy' | base64 --decode | zlib --decompress
zlib

ヘルプ

$ zlib --help
zlib is row zlib compression commandline program.

usage: zlib [options]

  -c, --compress    compresses the input
  -d, --decompress  decompresses the input
  -h, --help        display this help
  -v, --version     display program version

インストール

Homebrew

$ brew tap ebc-2in2crc/zlibcmd
$ brew install zlibcmd

手動

https://github.com/ebc-2in2crc/ZlibCmd/releases からダウンロードした zip ファイルを展開した中にあるファイルを、パスの通ったディレクトリに入れる。

動機

zlib はほとんどのプログラミング言語がライブラリーを提供していますが、フロントエンドのツールが見当たらなかったので作りました。 *2

実装言語が Java なのは、書こうとしたときに「Java なら Inflater クラス使えば OK」と教えてもらったからです。書いているときはあとで Go で書き直すつもりでしたが、コンピュータ業界には Goを禁止 *3 している会社も少なからずあることを思い出し、これはこれで残すことにしました。

自分が扱うデータ量が少ないので、実行効率とかはあまり考えていません。

Ruby ならこんなに楽だった

#! /usr/local/bin/ruby

require 'zlib'

inz = Zlib::Inflate.new
STDIN.each { |line|
  puts inz.inflate(line)
}

まとめ

バグとかあると思いますし、「おそいよ!」とか「こーしたら使いやすくなる」とかあったら、イシュー作ったり声かけてもらえると嬉しいです。

ということで zlib コマンド の紹介でした。

*1:伸張

*2:プログラマーは自分でフロントエンドのコマンドを書いているのかも? あと、作ったあとに探したらずばりそのものがあった

*3:Go の開発環境だけなく、Go で作られた実行ファイルも禁止