
【Java】ビルドツールについて学ぼう
Javaで開発を行う際、ビルドツールを利用された経験はありますか。
Javaのビルドツールにはいろいろと種類があります。私はMavenとGradleしか知りませんでした。
他に存在するビルドツールの種類についてや、メリット・デメリットについて記事作成を通して学んでいこうと考えてます。
1. ビルドとは

まずビルドとは、ソースコード上に問題がないか解析した上で、問題がなければ機械語に翻訳し、それぞれのファイルを組み合わせることを指します。
一言でまとめるとコンパイルとリンクを行う作業になります。
コンパイルは、ソースコードを機械語に翻訳することを行い、リンクはそれらの翻訳後のファイルを適切に組み合わせることを指します。
これらの一連の流れがビルドとなります。
単一のソースコードからなるプログラムではコンパイルするだけで済みますが、複雑なソフトウェアでは、多数のソースコードのファイルで構成されており、それらを組み合わせるステップが必要になります。それがリンクの作業になります。
総じて、ビルドとは上記のコンパイル+リンクの作業となります。
2. ビルドツールの紹介

1.make
1976年4月にベル研究所で作成されました。
make(メイク)は、プログラムのビルド作業を自動化するツールになります。
コンパイル、リンク、インストール等のルールを記述したテキストファイル (makefile) に従って、これらの作業を自動的に行います。
■メリット
・タイムスタンプを参照し、必要最低限の作業を自動で行うため速い
・バージョン管理システムでの親和性に優れている
■デメリット
・スクリプトが理解しにくい
・多少学習コストが高い
2.Apache Ant
Apache Ant(アパッチ アント)は、ビルドツールソフトウェアである。
GNU make のJava版ともいえるものであり、オペレーティングシステム (OS) など特定の環境に依存しにくいビルドツールです。
XML文書では、ビルド(ソフトウェア構築)のルールを記述することが特徴となります。
また、統合開発環境EclipseにはAntプラグインが標準で内蔵されています。
元々 Apache Tomcat をビルドするために開発されたものです。
Antはタスクと呼ばれる何種類ものXML要素をビルドファイル (デフォルトではbuild.xml) 上に記述してビルドのルールを作ります。
このタスクは、Antのプラグインとして提供されているものを外部から取り入れることで、追加することもできます。
また、このタスクをAntのアプリケーションプログラミングインタフェース (API) に従ってJavaで記述することにより、自作することもできます。
■メリット
・プラットフォームに依存しない利用が可能であること
・ビルドスクリプトがプラットフォームに依存しないこと
■デメリット
・ビルドスクリプトが冗長化しやすい
・ライブラリの依存関係を手動で解決しなければならない
3.Apache Maven
「アパッチ メイヴン(メイヴェン)」と読みます。
Mavenはイディッシュ語(中欧・東欧のユダヤ人が話していたドイツ語に近い言葉)で「知識の蓄積」「専門家」などの意味を持っています。
このツールの大きな特徴はプラグイン拡張により様々な使い方ができることです。
ソースコードのコンパイル、テスト、Javadoc生成、テストレポート生成、プロジェクトサイト生成、JAR生成、サーバへのデプロイ、WARやEARファイル生成など様々な機能が用意されており、Antの場合にはbuild.xmlという設定ファイルに細かい指示を記述して行っていた各処理を、Mavenでは大まかな指示をpom.xmlに記述して処理する形となっています。
Mavenの大きな特徴は、pom.xmlの<dependency>タグにプロジェクトで使用したいJARライブラリ名及びバージョンを指定することで、外部サイトで集中管理されているJARを自動ダウンロードし、ローカルでビルドに使用することができます。
JARを手動でひとつずつダウンロードして設定する旧来の手法と比較して、このPerlのCPANやPHPのPEARに似た技術により、WindowsUpdateなどのLiveUpdateのように容易にライブラリを管理・アップデートできます。
そのほかGit、CVSやSubversionなどのバージョン管理システムにも対応しています。
■メリット
・プロジェクトで利用するライブラリを管理できる
・プラグインが豊富
■デメリット
・Java以外の言語では適していない場合がある
・学習コストが高い(難易度が高い)
4.Gradle
GradleはApache AntやApache Mavenのコンセプトに基づくオープンソースビルド自動化システムであり、プロジェクト設定の宣言にはApache Mavenが利用するXML形式ではなくGroovyベース、もしくはKotlin Scriptベースのドメイン固有言語 (DSL) を採用しています。
Gradleはタスクの起動
3. ビルドツールの人気度調査
2018年版のJVM Ecosystem reportによると、約1万人からの調査によれば、Maven 60%、Gradle 19%、Ant 11%が上位を占めています。
※2024年度の最新レポートは見受けれらなった
4. まとめ
記事作成を通してさまざまなビルドツールを勉強してきました。
開発業務においてどのビルドツールを選択するか取捨選択する必要があります。
どんなビルドツールがあってどのメリットやデメリットが存在しているのか答えられるくらいにはなっておきたいと考えます。
この記事を読んだ方が少しでもビルドツールについて理解していただけたら幸いです。