ZIPを作る操作
本ツールは,ブラウザに読み込まれたJSZip(バージョン3.10.1)を利用し,複数のファイルを1つのZIPアーカイブとしてまとめる機能を提供します.ツール画面上部の「アーカイブ操作パネル」から「ZIPファイル作成 (圧縮)」タブを選択することで,作成用のインターフェースが表示されます.
ファイルの追加は,点線で囲まれたアップロードエリアへのドラッグ&ドロップ,またはエリアをクリックしてOSのファイル選択ダイアログを開くことで行います.選択されたファイル群は直ちにJavaScriptのFileオブジェクトとして読み取られ,ブラウザのメモリ上に一時保持されます.
入力可能なファイルには,動作安定性を確保するための厳格な制限が設けられています.1回の作成で追加できるファイル数は最大500件まで,またファイルサイズの合計は50MiB(52,428,800バイト)までとなっています.ファイルを追加するたびに内部の検証関数(validateZipInputs)が呼び出され,この上限を超過するファイル群が選択された場合は,画面下部に赤色のエラー通知が表示され,該当ファイルの追加はキャンセルされます.
追加に成功したファイルは,「圧縮リスト」として一覧表示され,各項目の左側には通し番号,中央にはファイル名とサイズ(Bytes,KB,MB等の単位でフォーマットされた文字列)が表示されます.リスト内のファイルは,右側のゴミ箱アイコンをクリックすることで個別に取り除くことが可能です.
また,出力されるZIPファイル名は入力フォームで任意に変更できますが,半角英数字,ハイフン,アンダースコア以外の文字は自動的に除外される仕様となっています.
STOREと同名ファイル
本ツールによるZIPファイル作成では,データを圧縮してファイルサイズを削減する「DEFLATE」方式ではなく,データをそのまま格納する「STORE」方式(無圧縮)を既定として採用しています.現在の実装はJSZipの無圧縮方式を指定しています.STOREでも読み込みや出力生成にはメモリが必要で,安定動作やメモリ枯渇の防止を保証するわけではありません.
したがって,本ツールで生成されたZIPファイルは,元のファイルサイズの合計と同等かそれ以上のサイズとなります.
また,本ツールではフォルダ階層の構築(フォルダの追加)をサポートしておらず,追加されたすべてのファイルは,JSZipのインスタンスにおいてルート(最上位)ディレクトリに直接配置されます.この仕様に起因し,同名のファイルが存在すると一方がもう一方を上書きしてしまう問題が発生します.
これを防止するため,追加処理時にファイル名の重複チェックを実施しており,既にリストに存在する名前と同一のファイルを追加しようとした場合は,「同名ファイルは上書きされるため追加できません」というエラーを返し,安全のために追加を拒否します.
これらの変換処理はすべてユーザーの操作しているブラウザのメモリ上で実行されます.入力されたファイル群や生成されたZIPファイルが,本ツール側で用意した外部サーバー等へ自動送信されることはありません.ただし,サイト全体のスクリプト・画像等の読み込みはZIP変換とは別の処理であり,サイト自体が一切通信を行わないわけではありません.
このZIP処理が自動アップロードしないことと,端末やサイト全体の安全性は別です.機密ファイルを扱う場合は所属組織のルールにも従ってください.
ZIPの一覧と検査
「ZIPファイル展開 (解凍)」タブに切り替えると,既存のZIPファイルを読み込んで内容を確認するためのインターフェースが表示されます.展開操作も作成時と同様にJSZipを利用し,アップロードされたZIPファイルのバイナリデータ(ArrayBuffer)を非同期処理で解析します.
読み込み可能なZIPファイルのサイズは,入力時と同様に最大50MiBまでに制限されています.これを上回るZIPファイルを指定した場合は即座にエラーとして処理を中断します.読み込みが開始されると,ZIP内のエントリ(セントラルディレクトリの記録)が順次走査され,各ファイルの名前,展開後の想定サイズ,およびディレクトリ(フォルダ)であるかどうかのフラグが動的に抽出されます.
このパース処理においては,リソース消費や悪意のあるZIPファイルに対する部分的な防護措置として,厳密な検査(validateZipEntries)が実行されます.具体的には,ZIP内の総エントリ数が500件以下であること,展開後の1ファイルあたりのサイズが100MiB(104,857,600バイト)以下であること,そして展開後の合計サイズが200MiB以下であることが求められます.
また,ファイルパスにバックスラッシュ,Null文字,絶対パスの開始(「/」やドライブレター),または上位ディレクトリへの移動(「..」)が含まれている場合は,「危険な形式のファイルパス」として解析を拒否します.
ただし,これらの検査はメタデータ上の宣言サイズに基づくものであり,圧縮率を極端に操作した特殊なZIP爆弾(Zip Bomb)などの悪意ある構造を完全に無害化できる保証はありません.そのため,出所が不明な不審なZIPファイルは決して読み込ませないように注意してください.解析が完了すると,ファイル名とサイズの一覧が表示され,ディレクトリ項目はオレンジ色のアイコンで区別されます.
個別・一括の保存
ZIPファイルの解析に成功し,一覧が表示された後は,内包されているファイルを端末のダウンロード先へ保存する作業に移ります.本ツールでは,ディレクトリ(フォルダ)そのものをダウンロードして保存する機能は提供しておらず,あくまでディレクトリ内に含まれる個々のファイルデータを展開して保存する形式をとります.
一覧の各ファイル項目の右側にあるダウンロードアイコンをクリックすると,選択したエントリのみに対して非同期での展開処理が実行されます.展開されたデータはブラウザ内でBlobオブジェクトに変換され,URL.createObjectURLを用いて一時的なダウンロードリンクが生成されます.
この際,ファイル名は元のZIP内に記録されていたパス(例: フォルダ/画像.png)からベースネーム(画像.png)のみを抽出して平坦化するため,保存先のフォルダ階層は復元されません.展開後の実際のデータサイズが,事前のメタデータで宣言されていたサイズと異なる場合や,単体上限(100MiB)を超過している場合は,不整合としてエラーを表示し保存を中止します.
また,一覧の上部にある「全ファイル一括展開」ボタンを使用すると,ディレクトリを除くすべてのファイルについて,順番に展開と保存要求を発行します.ブラウザへの過度な負荷や挙動の不安定化を防ぐため,各ファイルの処理後に300ミリ秒の待機を入れます.実際のダウンロード間隔は展開時間やブラウザの制御によって延びます.
同じベースネームが異なるフォルダにある場合は,保存名が重複し得るため保存結果を確認してください.この一括操作では連続してダウンロードイベントが発生するため,多くのブラウザではセキュリティ機構が働き「複数ファイルのダウンロード許可」を求めるダイアログが表示されます.
この機能を利用する場合は,ブラウザ側で許可を与える必要があります.
暗号化と容量の非対応
本ツールはJSZipの標準的なAPIに依存して構築されているため,パスワードが設定された暗号化ZIPファイルの作成および展開には対応していません.既存の暗号化ZIPファイルを展開タブで読み込ませた場合,暗号化フラグの検知やパスワードの入力プロンプトは表示されず,データストリームの読み込み失敗に伴い「非対応または不正な形式です」といったエラーが出力されます.
パスワード保護が必要なファイルのセキュアな受け渡しには,OSに標準搭載されている機能や別の専用ソフトウェアを使用してください.
また,本ツールが対応するアーカイブ形式は標準的なZIPフォーマットのみであり,7z,RAR,TAR等の他の圧縮形式のファイルを読み込むことはできません.誤ってこれらをアップロードした場合も解析に失敗し,エラーとなります.
容量面においても,本ツールはブラウザのメモリ(RAM)上ですべての変換処理を実施する設計上,大規模なファイルの取り扱いには適していません.入力50MiB,展開メタ情報100MiB(合計200MiB)という上限は,このページの操作上限であり,すべてのブラウザで安定動作できる容量の保証ではありません.
この制限を超える業務用の巨大なアーカイブや,数千のファイルを含むログデータの解析などは,OSネイティブのアーカイバを利用することを強く推奨します.なお,本ツールで処理中のデータはブラウザのタブ内にのみ一時的に保持されるため,タブを閉じたりページを更新(リロード)したり,このツール内の「作成/展開」タブを切り替えた場合は選択ファイルをリセットします.
別のブラウザタブを見るだけで直ちに消えるわけではありませんが,端末のメモリ節約でページが破棄される場合もあるため,作業状態の保持は保証できません.
保存確認と不審ZIPの扱い
ファイルの圧縮,または展開と保存要求が完了した後は,必ずOS側のファイルシステム(通常は「ダウンロード」フォルダ)を確認し,ファイルが正常に出力されていることを視認してください.ツール上で「成功」の通知が表示された場合でも,それはブラウザに対して保存の命令を発行したことを意味し,ディスクの空き容量不足やOSのアクセス権限による保存失敗までは検知できません.
一時的に生成されたオブジェクトURLは,メモリリークを防ぐためにアンカーのクリック後に直ちに破棄(revokeObjectURL)されます.
処理中に予期せぬエラー(ファイルの破損,非対応フォーマット,容量超過など)が発生した場合は,画面下部に赤色の背景でエラーの内容が出力されます.また,タブを切り替えた際にも,コンポーネントの初期化フックが動作し,選択中のファイルリストやアップロード状態,エラーメッセージを含むすべての通知はリセットされる仕様となっています.
本ツールは,利用者の端末内でファイルを処理し,入力データをZIP変換のためにどこかのサーバーへ送信することはありません.しかしながら,Webアプリケーションとして機能するために,JavaScriptのロードやUIの描画リソースの取得,アクセス解析などに伴う通信は,ZIP処理とは分けて考える必要があります.
HTTP要求ではCookieが送られる場合もあり,サイト全体の通信を否定する説明ではありません.そのため,センシティブなデータを扱う環境において,ブラウザを通じた通信が存在する以上リスクをゼロにすることはできず,処理がローカルであるという事実に基づき,ユーザー自身の責任において適切な環境とファイルを選択して操作を行う必要があります.