🎉

Apache Compress Ant Libraryとはなんなのか?

に公開

今回は、Apache Compress Ant Libraryとは何かについて調べてみました。なぜ調べてみようかと思ったかというと、こちらで作成したツールを使う第一号をやってみたかったからです。

https://zenn.dev/akasan/articles/7e30ad266c02c4

※ 本企画に関する記事の目的は、それぞれのプロジェクトを本格的に深ぼるのではなく、プロジェクト名⇆どんな内容かをパッと思い出せるようにすることを目指します!
※ とはいえ深ぼってみたいプロジェクトがあればどんどん複数連載になると思います。

Apache Compress Ant Libraryとは?

まず、プロジェクトページは以下になります。

https://projects.apache.org/project.html?ant-compress

プロジェクトページでの説明は以下になってます。

This is a library of Ant tasks and types uses Apache Commons Compress to support additional archive formats like ar, pack200, xz and cpio.

これを見ると、Antタスクとタイプのライブラリであり、Apache Commons Compress を使用して、ar、pack200、xz、cpio などの追加のアーカイブ形式をサポートします。

個別のドキュメントページに説明があったのでまとめてみます(理解度が低く、何を言っているかわかりずらいのが悲しいです、、、)。

  • gzipをはじめxzやpack200など多数のアーカイブフォーマットを対象としている。一部のフォーマットはリードオンリーでのサポートのみとなっている。また、7zフォーマットはファイルベースのリソースのみサポートされている
  • 現在のバージョンはCommons Compressの1.14リリースをベースにしているが、将来的に新たな圧縮形式やアーカーブフォーマットを追加予定である。
  • gzip および bzip2 のタスクとリソースは、Antのコア内の対応するタスクおよびタイプに似ており、主にフォーマットの実装に異なるコードベースを利用する
  • zipおよびtarリソースとunzip/tarタスクについてもほぼ同じことが当てはまるが、いくつかの大きな違いがある
    • unzipとzipfilesetは、ファイル以外のリソースでも動作する。
    • すべてのzipリソースとタスクはZip64拡張をサポートしており、Antのコアリソース/タスクでは処理できない大きなエントリ、大きなアーカイブ、または多数のファイルを含むアーカイブを処理可能
    • untarとtarfilesetは、長いファイル名や大きなファイルサイズ用に最新のtar実装で使用されるPOSIX/PAX拡張ヘッダーを透過的にサポートしており、starとGNU tarで使用される大きなファイルサイズ用のstarの拡張もサポート
    • tarタスクは、長いファイル名、大きなファイルサイズ、またはstar拡張子に対してPAX拡張ヘッダーを使用できる。POSIX形式で作成されたアーカイブは、GNU tarだけでなく、すべての最新のネイティブtar実装で読み取ることが可能
  • zipタスクとtarタスクは完全に新しい実装であり、コアタスクの機能のスーパーセットを提供
  • すべてのタスクとタイプは、コアタスクおよびタイプと混在させることができる。たとえば、コア zipタスクを使用して、cpiofilesetに基づいてアーカイブを作成することが可能。

Antタスクとはなんなのか?

まずはApache Antとは何かについて、調べてみました。公式ドキュメントによると、

  • Apache AntはJavaのライブラリであり、コマンドラインツールである
  • ビルドファイルにターゲットと拡張ポイントとして記述されたプロセスを実行
  • 主な用途はJavaアプリケーションのビルド
  • コンパイルをはじめアセンブル、テストそしてJavaのアプリの実行も提供
  • JavaアプリケーションだけでなくたとえばC/C++のアプリケーションにも対応している
  • 一般的には、ターゲットとタスクを記述できるのであれば利用できる

とのことで、主にJava向けのツールであることがわかります。

https://ant.apache.org/

その中でAntタスクとは何なのか調べてみるとこちらのページが見つかりました。
https://ant.apache.org/manual/tasksoverview.html

説明にAntでは多数のタスクが利用可能であり、それぞれのタスクが何か全体を理解するのは難しい。と書いてあるので、多くのタスクが用意されており、ユースケースに応じて選択肢が決まっていくのだろうと予想します。たとえばアーカイブ系のタスクにTarとあったので開いてみると以下のページがありました。名前から予想できましたが、tarアーカイブファイルを作成するもののようです。この場ではこれ以上深い言及は避けますが、タスクがとても用意されているので、確かに説明にあるように全部理解するのは難しそうですw。

https://ant.apache.org/manual/Tasks/tar.html

Apache Commons Compressとはなんなのか?

Apache Commons Compressは以下のページによると、Apache Commons Compressライブラリはarやcpio、Unixダンプ、tar、zip、gzip、XZ、Pack200(以下省略)などのファイルを利用するためのAPIが定義されているということです。つまりアーカイブファイルを作成・利用するためのツールがたくさん用意されているということでしょうか。

https://commons.apache.org/proper/commons-compress/

よくわからないアーカイブ形式について

ar, cpio、pack200, xzなどのアーカイブ形式が言及されていたが私自身なんのこっちゃという感じだったので簡単に調べてみました。

  • ar:ar コマンドは、1 つ以上の指定されたファイルを組み合わせて、ar アーカイブ・フォーマットで書かれた単一のアーカイブ・ファイルにする
  • cpio:cpio アーカイブは、ファイルおよびディレクトリーを連結したもので、その前にファイル名およびファイル・システム情報を提供するヘッダーが付いており、cpio を使用すると、新規アーカイブの作成、既存のアーカイブの内容の取り出し、アーカイブの内容のリスト、および1つのディレクトリーから別のディレクトリーへのファイルのコピーを行うことができる
  • pack200:JARアーカイブの圧縮に特化したアルゴリズムである
  • xz:LZMA2 圧縮アルゴリズムを利用する圧縮ファイル形式であり一般的なgzipおよびbzip2形式の代替として設計されており、これらの古い標準よりも多くの利点がある

調べるとまだまだ出てくるので、世の中にはとても多くのアーカイブ形式があるのだと再認識させられました。

まとめ

Apache Compress Ant LibraryはAntタスクとして定義されているアーカイブを取り扱うためのツール群のことなのかなと思います。個人的にJavaは使ったことがなく、C/C++もあまり扱っておらず、アーカイブファイルも普段から自分で取り扱うことは少ないので、直近このツールを使うことはないかなと思います。しかし、試しに使ってみたいと思いますので、次回はどういうふうに使うのか試してみようと思います。

もしここは違う!などあればぜひコメントいただけますと幸いです。

Discussion