JSZipの使い方|ブラウザでZIPファイルを作成・読み込みする方法

JSZipは、JavaScriptでZIPファイルを作成・読み込み・編集できるライブラリです。

ブラウザ上で複数の画像やテキストをまとめてZIPにしたいときに便利です。

JSZipとは?

JSZipは、JavaScriptでZIPファイルを扱うためのライブラリです。

通常、ZIPファイルの作成はサーバー側で行うことが多いですが、JSZipを使うとブラウザだけでZIPを作ることができます。

JSZipをCDNで読み込む

HTMLで使う場合は、CDNから読み込むのが簡単です。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>

このscriptタグをHTMLに追加すると、JSZip が使えるようになります。

ZIPファイルを作成する基本コード

最小構成のコードは次の通りです。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script> <script> const zip = new JSZip(); zip.file("hello.txt", "こんにちは、JSZip!"); zip.generateAsync({ type: "blob" }).then(function(content) { const a = document.createElement("a"); a.href = URL.createObjectURL(content); a.download = "sample.zip"; a.click(); URL.revokeObjectURL(a.href); }); </script>

このコードでは、hello.txt というテキストファイルをZIPに入れて、sample.zip としてダウンロードします。

複数ファイルをZIPに入れる

複数のファイルを入れたい場合は、zip.file() を複数回呼びます。

const zip = new JSZip(); zip.file("readme.txt", "説明文です"); zip.file("data.json", JSON.stringify({ name: "sample" }, null, 2)); zip.file("memo.txt", "メモです"); const blob = await zip.generateAsync({ type: "blob" });

フォルダを作ってファイルを入れる

ZIP内にフォルダを作ることもできます。

const zip = new JSZip(); const folder = zip.folder("images"); folder.file("note.txt", "画像フォルダの説明です"); const blob = await zip.generateAsync({ type: "blob" });

ブラウザで選択したファイルをZIP化する

ユーザーが選んだファイルをZIPにまとめる例です。

<input type="file" id="files" multiple> <button id="download">ZIPで保存</button> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script> <script> document.getElementById("download").addEventListener("click", async () => { const input = document.getElementById("files"); const zip = new JSZip(); for (const file of input.files) { zip.file(file.name, file); } const blob = await zip.generateAsync({ type: "blob" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "files.zip"; a.click(); URL.revokeObjectURL(a.href); }); </script>

JSZipでよく使うメソッド

よく使うメソッドは次の通りです。

  • new JSZip(): ZIPを作る
  • zip.file(name, data): ファイルを追加する
  • zip.folder(name): フォルダを作る
  • zip.generateAsync(options): ZIPを生成する
  • JSZip.loadAsync(file): ZIPを読み込む

注意点

大きすぎるファイルを大量に処理すると、ブラウザが重くなることがあります。

また、ユーザーの環境によってはメモリ不足になる場合もあります。大量の画像をZIP化する場合は、進捗表示やファイル数の制限を用意すると親切です。

まとめ

JSZipを使うと、ブラウザだけでZIPファイルを作成できます。

CDNで読み込み、new JSZip() でZIPを作り、zip.file() でファイルを追加し、generateAsync({ type: “blob” }) でダウンロード用のデータを作るのが基本です。