🦕

【Deno】Compression Streams APIを使ってgzipを圧縮・展開する

2024/07/21に公開

はじめに

Deno 環境でファイルを Compression Streams API を使用して、gzip 圧縮・展開する方法を紹介します。

Compression Streams API とは

Compression Streams API は、gzip 形式や deflate 形式データの圧縮や展開を行う JavaScript の API です。

https://developer.mozilla.org/ja/docs/Web/API/Compression_Streams_API

Deno にはこの Comporession Streams API が標準で実装されている(v1.45.2現在)ため、Deno 環境下では簡単に gzip の圧縮・展開が可能です。

https://docs.deno.com/api/web/streams

方法

環境

本プログラムの実行環境は以下の通りです。

  • Deno v1.45.2
  • TypeScript

gzip 圧縮

const file = await Deno.open("test.txt");
const outputFile = await Deno.open("test.txt.gz", {
  write: true,
  create: true,
});

await file.readable
  .pipeThrough(new CompressionStream("gzip"))
  .pipeTo(outputFile.writable);

流れとしては以下の通りです。

  1. ファイルのデータ読み込み
  2. new CompressionStream("gip")でデータストリームを gzip 圧縮
  3. 圧縮したデータストリームをパイプしてファイルに書き込む

gzip 展開

const file = await Deno.open("test.txt.gz");

const outputFile = await Deno.open("test-gzip.txt", {
  write: true,
  create: true,
});

file.readable
  .pipeThrough(new DecompressionStream("gzip"))
  .pipeTo(outputFile.writable);

流れとしては以下の通りです。

  1. ファイルのデータ読み込み
  2. new DecompressionStream("gip")でデータストリームを gzip 展開
  3. 展開したデータストリームをパイプしてファイルに書き込む

参考記事

Discussion