【pako】JavaScriptでzlib圧縮/解凍する【使い方】

zlib圧縮/解凍をJavaScriptでやりたい。

そんな時に使いやすいのを見つけました。

その名も pako というライブラリ

データとかファイルの圧縮と解凍、
そのやり方などをまとめておきます。

pakoはDeflate圧縮用zlibライブラリ

はじめにDeflateとかzlibの基礎知識について。

pakoはzlibに完全語感があります。
zlibとはDeflate圧縮用のライブラリのこと

▼ Deflate圧縮ってなんだ?

Deflate(デフレート)とはLZ77とハフマン符号化を組み合わせた可逆データ圧縮アルゴリズム。フィル・カッツが開発した圧縮ツールPKZIPのバージョン2で使われていた。ZIPやgzipなどで使われている。1996年5月に RFC 1951 としてドキュメント化された。ヘッダーやフッターをつけた zlib (RFC 1950) 形式や gzip (RFC 1952) 形式とともに使われる事が多い。

引用元 : https://ja.wikipedia.org/wiki/Deflate

Deflateとは圧縮アルゴリズムのこと、
zlibやgzipをそれを使うライブラリのことです。

pakoはデータに対してDeflate圧縮を実行し、
それをUint8Arrayとしてzlib形式で取得できます。

pakoの読み込み or インストール

Node.js or ブラウザ単独どちらでも動かせます。

▼ GitHub : nodeca/pako

▼ npmからインストールする場合

▼ ブラウザ側で動かす場合

紹介するのはブラウザ側で動かす前提のコードです。

ですがNode.js版でもほとんど変わりません。

テキストをzlib圧縮/解凍する

pakoでは次のように圧縮データを扱います。

  • 元データはUint8Arrayへの変換が必要
  • 圧縮データはUint8Arrayとして返される

それに注意してテキストを圧縮してみます。

▼ とてもシンプルな圧縮例

テキストの圧縮解凍はこのようになります。

ファイルをzlib圧縮/解凍する

次はバイナリも含めたファイルの圧縮解凍

▼ たとえば次のHTMLを用意します。

ファイル選択用の input[type=file] です。

そして選択されたファイルをzlib圧縮し、
そのあと自動ダウンロードするコードがこれです。

▼ こちらのコード

詳しい処理内容はコードのコメントに書かれています。

取得したfileをそのまま pako.deflate() に渡すことができないため、ArrayBufferへと変換してからzlib圧縮を実行してます。それ以外に特筆すべきことはありません。

▼ ちなみにJavaScriptでのダウンロード処理

上記などで解説したので興味のある方はどうぞ