Javaでのプログラミングを始めたばかりの方は、ビルドという言葉は知ってるけどコンパイルとの違いや実際のやり方となるとよくわかっていない方もいらっしゃるのではないでしょうか。
本記事では、初心者Javaプログラマー向けにビルドとは何かといった概要から実際のビルド方法までご紹介していきます。
そもそもJavaにおけるビルドとは
Javaにおけるビルドは、一般的に記述したプログラムを本番環境で動かせるような実行ファイルを作成する工程のことを指します。
コンパイルとの違い
ビルドと似た用語として「コンパイル」が挙げられますが、コンパイルはビルド工程の1つです。
コンパイルはプログラマーが記述したコードを、コンピューターが読み取れる機械語に翻訳する作業のことを指しています。
実際のアプリでは、様々な依存ライブラリや設定ファイルなどが必要となり、それらを組み合わせて実際にアプリとして動かせるようにする工程がビルド作業です。
ビルドの流れ
アプリ開発での一般的なビルドの流れとして、下記の4つの工程が実施されています。
- 静的解析
- プリプロセッサ
- コンパイラ
- リンカ
静的解析
静的解析の工程では、文法や構文の間違いを検出する作業が実施されます。
バグが発見された場合、以降の作業は実施されずバグを検出したポイントが通知されます。
プリプロセッサ
プリプロセッサは、コンパイルの前処理が実施される工程です。
Javaでは通常プリプロセッサは用いられませんが、C言語などで用いられます。
コンパイラ
ソースコードを機械語に変換するコンパイルを実施するのが「コンパイラ」です。
Javaでは「class」拡張子のファイルを作成するのがこの工程です。
リンカ
コンパイルしたオブジェクトファイルやライブラリを、アプリとして動作させるために関連付けを実施するのが「リンカ」です。
作成したコードや各種ファイルをリンクして、システムを動かせるような実行ファイルを作成します。
Javaのビルドツールを知ろう
Javaのビルドについて概要や工程を確認してきましたが、実際にビルドを行う場合、ビルドツールを利用します。
一般的なビルドツールについて、いくつか確認しておきましょう。
Maven
後述するAntの後継として作成された、近年のJavaアプリ開発で頻繁に利用されるのが「Maven」です。
Project Object Model(POM)の考え方で作成されており、構成ファイルは「pom.xml」を利用します。
Mavenではライブラリの依存関係を解決してくれたり、必要なライブラリを自動でダウンロードしてくれるため、より手軽にビルドすることが出来るようになっています。
Gradle
Gradleは、Java言語はもちろんScalaやC言語など、様々な言語で利用可能なビルドツールです。
Groovyという言語で記述されており、他のビルドツールで多く用いられるxmlの記述よりも読みやすく書きやすいとされています。
近年のJavaプロジェクトでは、上述したMavenまたはGradleを利用することが多いです。
make
古くから利用されているビルドの方法として「make」コマンドを利用する方法が存在します。
makeはC言語やC++言語で利用されていますが、Java言語でも利用することが可能です。
Makefileと呼ばれるファイルを作成し、依存関係を記述しておくと、記述された内容を自動化して実行してくれるツールです。
Ant
Javaでレガシーなビルドツールと言えば「Ant」の存在は欠かせません。
AntはJavaで記述された、Java用のビルドツールであり、多くのJavaプロジェクトで利用されています。
XMLベースの構成ファイルでタスクを実行し、コンパイルやテストなどが実行出来ます。
EclipseでJavaアプリをビルドしてみよう
Eclipseには標準で「Ant」のビルドツールが組み込まれています。
今回はこのAntを利用してJavaプログラムをビルドしてみましょう。
bulid.xmlの作成
Antでは「build.xml」という名前で構成ファイルを作成するのが一般的なので、今回のサンプルでも作成していきます。
プロジェクトを右クリックして「新規」→「ファイル」と選択し、「build.xml」の名前でファイルを作成しましょう。
build.xmlのファイルには下記のように記述しておきます。
<?xml version="1.0" encoding="UTF-8"?>
<project name="sample1.buildjar" default="buildjar" basedir=".">
<target name ="buildjar" description="ビルドテスト用">
<jar jarfile="sample1.jar" includes="*.class" basedir="bin"/>
</target>
</project>
サンプルではシンプルに、ビルドツールが実行されると「bin」フォルダに格納されたclassファイルをまとめて、「sample1.jar」を作成するものです。
またコンパイル対象となるMain.javaにはコンソール出力を行うシンプルな下記コードを記述しました。
public class Main { public static void main(String[] args) throws Exception { System.out.println("ビルドツールのテスト"); } }
ビルドツールの設定
build.xmlの記述を反映させるために、画面上のナビバーから「ウィンドウ」→「ビューの表示」→「Ant」を選択します。
Antエディタ上で、「ビルドファイルの追加」アイコンをクリックします。
ビルドファイルを選択するためのポップアップが表示されるので、先程作成したbuild.xmlを選択しておきましょう。
これでビルドファイルとして、作成した「build.xml」が設定されました。
ビルダーの構成
今度は設定したビルドファイルをビルダーとして構成していきます。
対象プロジェクトを右クリックして、「プロパティ」を選択します。
「ビルダー」カテゴリーを選択して、「新規」ボタンをクリックしましょう。
「Antビルダー」を選択して「OK」ボタンをクリックして進めていきます。
ビルダーの名前を自由に入力し、ビルドファイルの設定欄にある「ワークスペースの参照..」ボタンをクリックします。
「ロケーションの選択」ポップアップで、作成したビルドファイルを選択します。
基底ディレクトリーも同じく「ワークスペースの参照..」からルートとなるディレクトリを選択し、「適用」ボタンをクリックしておきましょう。
「ターゲット」タブを開いてみると、どのアクションでビルドファイルの内容が実行されるかを設定・確認することも可能です。
作成したビルダーが追加されていることを確認したら、「適用して閉じる」ボタンをクリックします。
ビルドを実行
では実際にターゲットとして設定したアクションを実行すると、ビルドが実施されるのか確認してみましょう。
ターゲットの設定として、クリーンを実施した際にビルドが実行される構成となっていたので、画面上部の「プロジェクト」→「クリーン」を選択してみます。
対象のプロジェクトが選択されていることを確認して、「クリーン」ボタンをクリックします。
クリーンが実行されると「コンソール」ウィンドウに処理結果が表示され、「sample1.jar」が作成されていることを確認出来ます。
さいごに:Javaのアプリ開発ではビルド作業は必須
本記事では、Java開発で行われる「ビルド」について、基本的な概要から実際の方法までご紹介してきました。
ある程度の規模でアプリを開発する場合、ビルドツールの利用は不可欠であり、初心者の方でも意識していないだけで使った経験がある方も多いはずです。
ビルド構成を自分が記述する機会はそれほど多くないかも知れませんが、どういった仕組みでアプリ開発が行われているのかをきちんと把握するためにも、しっかりとビルドについて学習しておきましょう。