タイトルJava Watch on the X》4 - アプリケーションをパッケージとしてビルドする(1)パッケージの構成カテゴリーProjectBuilder/Interface Builder, Java, Java Watch on the X
作成日2002/1/11 18:0:4作成者新居雅行
Mac OS XでPure Javaプログラムを作ることをテーマにお届けしているJava Watch on the Xは、しばらくは、Project Builderを中心にして、Mac OS X向けのアプリケーションのパッケージを作るといった話題を説明する。まずは、Javaに限らないMac OS Xのアプリケーションの話だ。
従来のMac環境を御存じの方は、アプリケーションにはリソースというものが必ずくっついていた。また、必要なファイル情報の設定などもあって、それらの関連を良く知っていないと、思った通りにならないというのは常に経験していたことだろう。しかしながら、それは、アプリケーションは1つのバイナリファイルで構成されるという前提があった時代のものだ。Mac OS X、そしてMac OS 9でもすでに存在していたのだが、アプリケーションは「パッケージ」というフォルダにまとめたものとして作成することができるようになった。「パッケージ」によるアプリケーションでは、リソースは使う必要はなく、特にJavaやnibファイルベースのアプリケーションでは一切使う必要がなくなっていると言える。ただし、Mac OS Xでは過去のOSとの互換性を確保するために、リソースを含む単一のアプリケーションファイルの実行をサポートしているが、現状で新たにビルドするアプリケーションではそうした手段はまず使うことはないだろう。とにかく「パッケージ」を作るというのが基本だ。

まず、Mac OS XのアプリケーションはたとえばTextEditなどは1つのアイコンとしてファイルのように見えているが、実体はフォルダである。フォルダの拡張子が.appの場合、それはアプリケーションの1つのアイコンとして表示され、ダブルクリックしてもそのフォルダは開かない。ダブルクリックするとアプリケーションを起動するのである。この.appのフォルダ内部を「パッケージ」と呼んでいる。パッケージの中をFinderで参照することも可能で、アプリケーションのアイコンをcontrolキーを押しながら表示されるメニューで、「パッケージの内容を表示」を選択することで新たなウインドウにパッケージの中身を表示する。解析するときには中身を見る必要も出てくるかもしれない。なお、SNAXではパッケージの中身も通常のフォルダのように表示してしまうオプションもあるので、中身を見たいときには便利だ。

Javaで作ったプログラム、すなわち.javaファイルは、コンパイルすると.classファイルになる。しかしながら、一般にはそのままではなくて、アーカイブした1つの.jarファイルにまとめられる。複数のjarファイルにわける方法などは追って説明をするが、いずれにしても、Project BuilderでJavaのプログラムを組むと、そのコンパイル結果は1つの.jarファイルに保存されることになる。その.jarファイルは、パッケージの中のContents/Resources/Javaといフォルダに組み込まれる。ファイル名は指定可能だが、デフォルトではプロジェクト名と同じになっている。この名前は特には気にすることはないだろう。
なお、Pure Javaのアプリケーションの場合、Contents/MacOSフォルダに、プロジェクト名と同じ名前で、全員の実行権限がついたバイナリも作成される。これは、プロジェクト側には特にソースは用意していないものである。名前は異なるものの、Pure Javaだと同じサイズでそのファイルが作成される。おそらく、このMacOSフォルダにある実行ファイルがダブルクリックによって起動され、そこからJava VMがセットアップされて、Javaのプログラムより生成した.jarファイルのプログラムの実行が行われているものと思われる。おそらく、スタータープログラム的なものがMacOSフォルダにあるのだろう。

パッケージに必要なファイルとしては、Contents/PkgInfoとContents/Info.plistがある。これらはPure Javaに限らず、CocoaやCarbonでも作成されるファイルだ。PkgInfoは必ず8バイトのサイズのファイルで、最初の4バイトがアプリケーションのファイルタイプ(つまりAPPLで固定)となり、最後の4バイトがクリエイタとなる。テキストファイルで開くと、たとえばクリエイタがome4なら、PkgInfoの中身は「APPLome4」となっているはずだ。なお、クリエイタは、Project Builderで設定することができ、その設定値をもとに自動的にPkgInfoファイルは作成される。
Info.plistは、Mac OS Xのアプリケーションとしてのさまざまな情報がXML形式(プロパティリスト形式)で保存されている。たとえば、アプリケーションのアイコンはどのファイルかなどを記録するものである。これも、Project Builderでの設定がそのままコンパイル時にファイルとして作成されるものである。なお、plist形式のファイルは、Developer Toolsをインストールしてあれば、ダブルクリックすると、PropertyListEditorというアプリケーションが起動してそこでは階層的な表示やあるいは項目単位での編集がしやすくなっている。後から修正したい場合には、PropertyListEditorを使うと手軽だが、テキストエディタで編集してもかまわない。
Project Builderの設定としてどのようなものがあるのかは、改めて説明をしよう。

さらに、Contents/Resources/MRJApp.propertiesというファイルもあるが、これは、Javaのアプリケーションとしての動作を規定するファイルである。たとえば、メインクラスはどれで、起動して与えるシステムプロパティなどを指定することができる。中身は、キーとデータをイコールで結ぶ、Javaでのプロパティリスト形式である。
なお、Contents/Resourcesには、アプリケーションのアイコンファイルを入れるなど、さまざまな使い方がなされている。Contentsフォルダにはpbdevelopment.plistというファイルも作成されるが、これは作成したときのProject Builderに関する情報でプログラムのソースパスがあるだけなので、これは実行には特には関係しないと思われる。

以上、Pure Javaアプリケーションに必要なファイルについては以下のようになる。ここでは、MyApplicationというプロジェクトを作り、デフォルトの状態でファイルを作って行った場合にする。

MyApplication.app
 └Contents
   ├Info.plist (Mac OS Xアプリとして必要な情報)
   ├PkgInfo (パッケージのファイルタイプとクリエイタ)
   ├MacOS
   │ └MyApplication (Javaを起動する小さなスタータ)
   └Resources
     └Java
       ├MyApplication.jar (作成したJavaプログラム)
       └MRJApp.properties (Java実行に必要な情報)

以上のことは、Inside Mac OS X: System Overviewにも記載されているが、ここではそこからPure Javaに関することだけを抽出した。
(この項、続く)
関連リンク