PACK ファイル形式とは?
.packファイルは、ネットワーク経由のダウンロードを容易にするために、圧縮されたJARファイルを保存するために使用されるPack200データアーカイブコンテナです。.packファイルは通常、追加の.gzサフィックスを付けて保存されます。標準的な配信形式は.jar.pack.gzという名前で、Javaのpack200コマンドラインツールによって生成されます。
JARはZIPアーカイブであり、Java仮想マシンの実行形式としても機能します。2004年にJSR 200で標準化されたPack200は、特殊なバイナリアルゴリズムを使用してJARのクラスファイル定数プールを再エンコードします。GZIPと組み合わせることで、.pack.gzファイルは元のJARよりも最大60%小さくなり、ダウンロードが大幅に高速化されます。これがJava Web Startやブラウザアプレット配信におけるこの形式の主な目的でした。
Pack200は現在廃止されています。 OracleはJava 11(JEP 336、2018年)でpack200およびunpack200コマンドラインツールを非推奨とし、Java 14(2020年)で完全に削除しました。レガシーな.packまたは.pack.gzファイルは、JDK 8-13環境を使用してのみ解凍できます。生の.packストリームはマジックナンバー0xCAFED00Dで始まります。
セキュリティと安全性
リスク: MEDIUM.pack自体は不活性なデータですが、解凍すると実行可能なバイトコードを含むJava JARになります。悪意のあるJARはJRE下で任意のコードを実行できるため、信頼できるソースからのJARのみを解凍・実行してください。Pack200は歴史的に攻撃対象(アンパッカーのCVEなど)となったことがあるため、解凍には最新のJDKビルドを使用してください。サードパーティの「PACKオープナー」ダウンロードサイトは避け、Oracle/AdoptiumのJDKに含まれるunpack200を使用してください。
形式の詳細
概要- Gitパックファイル (.pack) - .git/objects/pack内にあり、Gitがオブジェクトをバイナリ.packファイル(.idxインデックス付き)に保存します。Gitによって管理され、手動で開くことはありません。
- Minecraft / ゲームリソースパック (.pack) - 一部のゲームやMODパックで、バンドルされたリソースやテクスチャパックに使用されます。構造はエンジン固有です(多くの場合ZIPベース)。
- Skype / アプリデータパック (.pack) - 様々なアプリケーションが内部的な「.pack」データブロブを書き出します。意味はプログラムによって完全に異なります。
PACK ファイルを開くプログラム
技術的詳細
詳細仕様| フォーマットタイプ | バイナリ Pack200 圧縮JARコンテナ |
| マジックナンバー | 生の.packストリームのオフセット0に0xCAFED00D。一般的な.pack.gz形式ではオフセット0にGZIPヘッダー0x1F8B |
| バイト順序 | ビッグエンディアン |
| 圧縮 | Pack200定数プール再エンコードアルゴリズム。標準の.pack.gz配信形式では外側にGZIP/DEFLATEを適用 |
| 圧縮率 | 同等のプレーンなGZIP圧縮JARよりも最大約60%縮小 |
| MIMEタイプ | application/x-java-pack200 |
| 仕様 | JSR 200 - JARファイル用ネットワーク転送フォーマット(Java SE 5.0、2004年導入) |
| 最大アーカイブエントリ数 | JAR/ZIPの65,535エントリの上限を継承 |
| 暗号化 | なし。既存のJARコード署名はpack200/unpack200によって保持され、復元されます |
| 整合性チェック | .pack.gz外装のGZIP CRC-32。解凍後にJAR署名を個別に検証 |
| 一般的なファイルサイズ | 50 KB - 20 MB(エンコード元のJARよりも常に小さくなります) |
| ステータス | Java 11(JEP 336、2018年)で非推奨。Java 14(2020年)でpack200およびunpack200ツールが削除 |
| 解凍ツール | unpack200(JDK 8-13のみ)。Windowsでの検査用として7-Zipも利用可能 |
| 主な用途 | Java Web StartアプリケーションやブラウザアプレットのJARダウンロードサイズの最小化 |
| 対応プラットフォーム | Windows, Linux, macOS - JDK/JRE 8-13がインストールされているすべてのプラットフォーム |
| リリース日 | 2004 (Java SE 5.0 / J2SE 1.5 - JSR 200 'Network Transfer Format for JAR Files') |
| 最新バージョン | Pack200 as specified through JSR 200; deprecated in Java 11 (2018), removed in Java 14 (2020) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | docs.oracle.com |
PACK の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。PACK ファイルについて最初の質問をしてみましょう。