支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


はじめに

1990年代中盤に登場して以来長い間利用され続けているJavaは、大規模な金融系システムや業務システム、Webサイトやアプリ、ゲーム、組み込み系システムと非常に幅広い開発で利用されているプログラム言語です。そのため通常は言語の名称に関してIT業界で働いているプログラマー・エンジニアしか認識していないことの方が多いですが、Javaはそれらに関わっていない方でも知っている可能性があります。組み込み系システムでも利用されているため、家電やゲーム機等にJavaのロゴマークが貼られていることがあるからです。言語の一つだとは認識していなくても、この機器にはJavaというものが使われているのだと何となく理解している人もいることでしょう。

今回はそんなJavaでの開発において重要なJARファイルについて紹介します。実際JARファイルについて知らなくても開発自体は行えますが、運用や管理、経営を考えていくとJARファイルは重要な要素の一つとなります。これからJavaプログラマーを目指している方、JARファイルの活用方法がわからないという方はぜひ読み進めてみてください。

Javaの仕組みについておさらい

JARファイルの作成や実行方法等を紹介する前に、Javaの仕組みについて簡単におさらいしておきます。なぜならJavaの仕組みを理解していることで、よりJARファイルの有用性に納得できるからです。すでにJavaは十分に理解しているという方に関しては、この項目は飛ばして問題ありません。

Javaはコンパイラ言語です。プログラミング言語には大きくコンパイラ言語とインタプリタ言語の2種類がありますが、Javaは前者となるため、人間が記述したコード内容をコンピュータが理解できるように翻訳する「コンパイル」という処理が事前に行われ、プログラムの実行時には単純に読み込みのみが行われます。そのため高速な実行が可能な言語と言われていますが、その一方で複数のデータが出来上がるため、大規模なシステムであればあるほどサーバーの容量をJavaのデータで圧迫してしまう可能性があります。容量が不足したのであれば拡張に費用がかかる必要があるだけではなく、場合によっては拡張作業のためにシステムを停止しなければいけない状況も発生しかねません。

Javaでは「java test.java」というコマンドでコンパイルを行い、「.class」という拡張子のファイルを生成させます。このファイルを生成することで初めてJavaの実行が可能となるため、単純計算するとファイルの量が倍になると考えて良いでしょう。Webシステム等であればこの他にも画像データ等も入ってくるので、できることならデータを圧縮した状態で保存しておきたいものです。しかし圧縮してしまうと、通常は実行する際に解凍する手間が発生するのでジレンマが発生します。これを解決できる方法が、今回紹介するJARファイルの作成・実行となります。

なお、例えばJavaScriptのように特別な実行環境を用意することなく動作可能なプログラミング言語がありますが、Javaにおいては独自の実行環境JRE(Java Runtime Environment)がインストールされていないと動作できません。デメリットのようにも見えますが、逆に言うと実行環境さえインストールされていればOSに依存せず実行可能という見方もでき、実際にそれがJavaの特徴となっています。そのため今回紹介するJavaの機能であるJARファイルも、JREがない環境での実行はできません

JARファイルとは何か?なぜ利用するのか?

JARファイルはJava Archiveの略で、Javaの一連のファイルを一つにまとめて圧縮したものです。そのため他の言語では使用できないということを覚えておきましょう。なお圧縮の際は、Windows等でも利用されるzip形式で行われるのですがzipと違う点は、圧縮された状態のままでも実行が可能というところです。これがJARファイルと大きな特徴とも言え、容量を圧迫しがちなJavaのデータを実行可能な状態のまま圧縮しておくことが可能となります。

現在のJavaの提供元であるOracleの公式ページには、データごとに都度HTTP接続を発生させることなく単一のHTTPトランザクションのみでブラウザにダウンロード可能にすることを目的に開発されたと記載されています。これは、Javaプログラムをブラウザ上で実行させることができるJavaアプレット形式のシステムにおける負荷軽減、スピードの向上を想定しています。ブラウザで実行するにはサーバーからのデータ転送、ユーザー側ではダウンロードが必要となりますが、JARファイル化することでその容量を小さくできます。

JavaでのJARファイルの作成方法

実行方法の前に、まずJARファイルの作成方法から紹介します。JARファイルは「jar -[オプション] [作成後のJARファイルのファイル名] [対象のファイル名] 」というコマンドで作成します。JARファイルの拡張子は「.jar」となるので、[作成後のJARファイルのファイル名]には「.jar」のファイル名を指定します。例えば複数のclassファイルをJARファイルにする際のコマンドは「jar -cvf Sample.jar *.class」となります。

また良く一緒に使われるオプションを紹介します。圧縮ファイルを新規作成する場合は「-c」、内容の一覧を表示する場合は「-t」、圧縮ファイルを展開する場合は「-x」、jarファイルを更新する場合は「-u」、コマンドラインに処理内容を表示する場合は「-v」、jarファイルを指定する場合は「-f」、マニフェストファイル(詳細は後述します)を指定する場合は「-m」、インデックス情報を作成する場合は「-i」、圧縮しない場合は「-o」、マニフェストファイルを作成しない場合は「-M」、指定したファイルを取り込む場合は「-C」を指定します。前述したコマンドの例のように「cvf」のオプションは良く合わせて利用されます。また大文字・小文字は区別されるので注意が必要です。

解凍(展開)やデータを確認する方法

前述したようにJARファイルは解凍せずに実行できるため、実行時には必要のない操作となりますが、ファイルを編集したい場合やファイルの中身を閲覧したい場合等に解凍する必要が出てきます。JARファイルはzip形式であるため、基本的にzipの解凍ができるソフトウェアを利用すれば解凍(展開)は可能です。また、jarコマンドのオプション「-x」を利用して「jar -xvf Sample.jar」のように実行することでも解凍(展開)できます

次に、解凍せずにJARファイル内に含まれたデータが一覧で確認できる方法を紹介します。どういったデータをJARファイルにまとめたかわからなくなった場合に利用する可能性がありますが、その場合は「-t」オプションを利用して「jar -tf Sample.jar」というコマンドを実行しましょう。これを実行するとコマンドライン上に含まれていたデータが一覧表示されて便利です。

JARを各OSで実行する

JARファイルの実行は、Javaの実行環境がインストールされていればWindows、Linux、MacOS等、いずれのOS上でも実行可能です。GUIで操作できるOSであればJARファイルをダブルクリックすることで実行可能ですが、コマンドを入力することでも可能です。ただしいずれの場合もマニフェストファイルのいうものを作成することが必須なることを覚えておきましょう。

マニフェストファイルの作成

マニフェストファイルとはjarについての情報が書かれたファイルであり、JARファイルを作成した際に自動生成されますが、作成することも可能です。作成は特に難しいことはなく、「Main-Class:[クラス名]」を記述し「.mf」という拡張子を付けて保存するだけです。例えばSampleというクラスを作成したとすると「Main-Class:Sample」と記述して、「Sample.mf」で保存します。なおマニフェストファイルを指定してJARファイルを作成することも可能で、その場合は「jar -cvfm Sample.jar Sample.mf *.class」というように記述して実行します。

実行

実行時はマニフェストファイルを指定します。コマンドはとてもシンプルで「java -jar Sample.jar」のようになります。なお補足ですが、Windowsで「start」コマンドを使って実行することで終了も待つことなく非同期での処理が可能となります。またLinuxでは「java -jar Sample.jar &」のように末尾に「&」を加えることでバックグラウンドでの実行が可能です。

classpathを指定する方法

最後にclasspathを指定する方法の紹介ですが、Javaにおいてclasspathは、複数の別ディレクトリにあるファイルを同時に指定したい場合に利用します。JARファイルでclasspathを指定する場合は、Javaで利用する方法と同様にJARファイルの末尾に「;(セミコロン)」を付加するだけです。

まとめ

Javaの開発を行ううえでJARファイルは必須ではないものの、この仕組みを活用することでリソースの有効活用ができ、かつ通常の圧縮ファイルよりも便利であることがわかっていただけたことでしょう。ディスク容量を節約できるということは、開発プロジェクト全体で見ると経費の削減につながるため、結果として経営層やクライアントを助けることに繋がります。独立して利用するシステムの開発を行っているのであれば、直接的に自身のコスト負担が軽減されることにもなります。「.jar」という拡張子を見たことはあったがその正体がわからなかったという方も、一度JARファイルの作成や実行方法を覚えてしまえば特に扱いが難しいものではないので、ぜひこれからJavaでのプログラミングを行う際は利用してみてはいかがでしょうか。