ZIP差分チェッカー(解凍せずに2つのZIPを比べる)

2つのZIPファイルを選ぶと、解凍せずに中身を比べて、 追加・削除・変更・改名されたファイルを一覧にします。 判定にはZIPの目次(中央ディレクトリ)に記録されている CRC-32とサイズを使います。 ファイル全体を読み込まないので、大きなZIPでもすぐ結果が出ます。 ファイルはサーバーに送信されません。

入れるもの
比べたいZIPファイル2つ(片方だけでも、中身の一覧として使えます)
出るもの
追加・削除・変更・改名・日時だけの違い・据え置きの件数と一覧/各ファイルのサイズ・圧縮後サイズ・圧縮方式・更新日時・CRC-32/実際に読んだバイト数/CSVでの書き出し

手作業だと手間のかかるところを、そのまま扱います

比べるZIPを選ぶ

枠をクリックして選ぶか、ファイルをドラッグして重ねてください。 読み取りはブラウザの中だけで行います。

比較元(A)
ZIPファイルを選ぶ
比較先(B)
ZIPファイルを選ぶ

使い方

  1. 比較元(A)と比較先(B)にZIPを1つずつ選びます。順番はあとから入れ替えられます。
  2. 2つそろった時点で自動的に比較します。ボタンを押す操作はありません。
  3. 結果は「追加・削除・変更・改名・日時だけ・据え置き」に分かれて出ます。
  4. 件数が多いときは「絞り込み」にパスの一部を入れると、その部分だけに絞れます。
  5. CSVで書き出すと、表計算ソフトで並べ替えたり、記録として残したりできます。
片方だけ選んだ状態では、そのZIPの中身の一覧が出ます。 「このZIPに何が入っているか」を見るだけなら、1つだけ選べば足ります。

ZIPと同じ形式のファイルも読めます。.jar、.apk、 .docx、.xlsx、.pptx、 .epub はいずれも中身がZIPなので、 「Wordの文書のどこが変わったか」をファイル単位で見ることもできます。

解凍しなくても比べられる仕組み

ZIPは、ファイルの中身を並べたあと、末尾に「中央ディレクトリ」という目次を置く形式です。 目次には1件ずつ次の情報が入っています。中身そのものは入っていません。

目次に入っているものこのツールでの使い道
ファイル名どのファイルどうしを突き合わせるかを決める
CRC-32中身から計算した32ビットの検査値。中身が同じかどうかの判定に使う
展開後のサイズCRC-32と合わせて同一かを判定する。増減した量も出せる
圧縮後のサイズどれだけ縮んでいるかを表示する
圧縮方式無圧縮・Deflate などを表示する
更新日時中身が同じで日時だけ違う場合を分けて出す
汎用フラグファイル名がUTF-8か、暗号化されているかを判定する

CRC-32は中身から計算された値なので、中身が1バイトでも違えばほぼ確実に別の値になります。 逆に言えば、目次のCRC-32が一致していれば、中身を展開せずに「同じファイル」と判断できます。 このツールがしているのは、2つのZIPの目次を読んで突き合わせることだけです。

さらに、目次はファイルの末尾にあるので、ZIP全体を読む必要もありません。 まず末尾の約64KBを読んで目次の位置を割り出し、その範囲だけを追加で読みます。 結果の画面に出る「読んだバイト数」は、この2回で実際に読んだ量です。

改名の見分け方。 Aにしか無いファイルとBにしか無いファイルの中で、CRC-32とサイズが一致する組があれば、 それは名前が変わっただけと考えられます。このツールはその組を「改名・移動」として出します。 中身が同じまま別のフォルダへ移ったときも、同じように拾えます。

このツールでできること・できないこと

できること

  • ファイル単位の追加・削除・変更・改名の判定
  • 展開後サイズの増減(何バイト増えたか)
  • 更新日時だけが違うファイルの切り分け
  • パスワード付きZIPの一覧と比較(中身は読めません)
  • ZIP64(4GB超・65,535件超)のZIP
  • Shift_JISのファイル名の読み取り
  • ZIPと同じ形式のファイル(.docx / .jar / .apk など)

できないこと

  • ファイルの中身そのものの差分(何行目が変わったか)は出ません
  • CRC-32は32ビットなので、別の中身で一致する可能性が理屈の上では残ります
  • 分割された(マルチボリューム)ZIPは読めません
  • 目次が壊れているZIPは読めません(理由を表示します)
  • ファイルの権限・所有者・シンボリックリンクの違いは見ていません
  • 暗号化された項目の中身は読めません
厳密な同一性を確かめたい場合。 CRC-32の一致は「まず同じ」と考えて差し支えない強さですが、暗号学的な保証ではありません。 改ざんの有無まで確かめたいときは、展開したうえで SHA-256 などのハッシュで比べる方法があります。 このツールは、その前段でどこを見ればよいかを絞るための道具として使えます。

ファイルは送信されません

選んだZIPは、ブラウザがそのまま読み取ります。当サイトのサーバーへも、ほかのどこへも送っていません。 読み取りと比較の処理は zdiff.js というファイルにまとめてあり、 ページを開いた時点で端末に届いています。そのため、 通信を切った状態でも同じように動きます。 社外に出せないファイルを比べるときは、この点を確かめてから使ってください。

よくある質問

なぜ解凍しなくても中身を比べられるのですか?

ZIPは末尾に「中央ディレクトリ」という目次を持っていて、そこに各ファイルの名前・サイズ・更新日時・ CRC-32(中身から計算した32ビットの検査値)がまとめて記録されています。 中身が同じファイルはCRC-32も同じになるため、目次だけを読めば同一かどうかが判定できます。 展開も復元も必要ありません。

大きなZIPでも動きますか?

動きます。このツールはファイル全体を読み込みません。 まず末尾の約64KBを読んで目次の位置を割り出し、その範囲だけを追加で読みます。 1GBのZIPでも実際に読むのは数百KBで済みます。読んだバイト数は結果の画面に表示されます。

ファイルはどこかに送信されますか?

送信されません。読み取りと比較はすべてブラウザの中で行っています。 ZIPの中身が外部に出ることはなく、通信が切れた状態でも動きます。

CRC-32が同じなら中身は必ず同じですか?

32ビットの値なので、理屈の上では別の中身で一致することがありえます。 このツールはCRC-32とサイズの両方が一致したときだけ同一として扱っています。 厳密な一致を確かめたい場合は、展開したうえで SHA-256 などで比べる方法があります。

ファイル名が文字化けするZIPも読めますか?

読めます。ZIPにはファイル名がUTF-8であることを示す印(汎用フラグの11ビット目)があり、 それが立っていない場合は、日本のWindowsで作られたZIPならShift_JISで記録されていることが多いです。 このツールはまず厳密なUTF-8として読み、それで読めないときにShift_JISとして読み直します。 どちらで読んだかは一覧の「名前の文字コード」に表示されます。

パスワード付きのZIPはどうなりますか?

ファイル名・サイズ・更新日時・CRC-32は暗号化されていないため、パスワードなしで一覧と比較ができます。 ただし中身そのものは読めません。暗号化された項目があるときは注意書きを表示します。

フォルダ(ディレクトリ)の項目はどう扱われますか?

差分には出しません。ZIPにはフォルダそれ自体を表す項目が入ることがありますが、 中身を持たないため、増減を数えると実態と合わなくなります。 フォルダの項目は件数だけを一覧の見出しに表示しています。

同じ名前のファイルが2件入っているZIPはどうなりますか?

ZIPの仕様では同じ名前の項目を複数入れることができます。 このツールは名前で突き合わせるため、その場合は後ろにあるものを採ります。 一覧には両方とも表示されるので、件数が合わないときは一覧で確かめられます。

関連ツール