複雑怪奇なJavaのプロジェクトに対して、ビルドツールを使うのが最近の流行り。
2018年現在代表的なビルドツールは4種類あります。
- Apache Maven
- Gradle
- SBT
- Bazel
そんなビルドツールを体系的に知りたい方はこの本がオススメ。
この記事では、本で学んだことをメモしつつ、ビルドツールについての簡単な解説をしていきます。
目次
開発環境の変化(初心者向けの導入)
はじめてのCみたいな本で学んだ後、実際の仕事では「開発環境」を構築してプログラミングを行います。
ソースコードを書いて、コンパイルして完成、という単純な話だけではなくなります。
ライブラリ、フレームワークを駆使して、それぞれのバージョンとか依存関係を理解して…という感じ。
つまり「プログラムのロジック」とは別のところを理解する必要があります。
複雑な開発環境の変化に伴い、手作業では困難な作業が増えてきています。
それを解決する専用プログラムと発展してきたのが「ビルドツール」ともいえます。
ビルドツールとは
ビルドツールは主に開発に関わる処理を管理、自動化するツールです。
- ライブラリの管理
- プロジェクトのビルド
- テストの実行
- デプロイ
ビルドツールという名前ではありますが、「ビルド」=「プログラムをコンパイルしてアプリケーションを生成する」以外にも色々とやっていますね。
※ちなみに「ビルド」は様々な処理があります→プログラムをコンパイルして、ライブラリも参照して、指定ディレクトリに必要リソースを集めて…など
Dockerとは
Dockerについての簡単な説明もあります。
これは余談ですね。
- Linuxベースの軽量仮想環境
- 「コンテナ」という環境を作成してその内部でプログラムをインストールして実行する
- プラットフォームまるごとではなく、ユーザ空間を提供する(Dockerエンジンの上にコンテナを作成)
ちなみに仮想環境を構築するプログラムは「ホストコンピュータ内に仮想コンピュータを用意してOSをインストールして起動する」ものが昔ながらの方法でしたが、これは重いです。
Apache Maven
Javaビルドツールのデファクト・スタンダードは「Apache Maven」です。
Javaビルドツールの歴史
Javaビルドツールの歴史は以下の通り
- ビルド大変だ!自動化したい!
- ビルドに関する作業だけを行うApache Antが登場(プログラムのコンパイル、Jarなどへのパッケージ化など)
- Antも思ったよりも書くのが面倒だ!
- アプリケーションの全行程について処理を自動化するApache Mavenが登場!
って感じ。
※Antは今どきはあまり見かけません。
Mavenの特徴
- XMLでビルドファイルを記述
- ゴールによる目的の指定(アプリ生成なのか、javadocのドキュメント作成なのか、など)
- ライブラリ管理 ※セントラルリポジトリからダウンロード
- テスト、ドキュメント生成
Mavenの「セントラルリポジトリ」は大きな発明だったと言われています。
セントラルリポジトリは、Mavenで利用可能なライブラリをまとめて管理するWebサービスです。
ビルドファイルの情報をもとにセントラルリポジトリにアクセスして、必要ファイルをダウンロードします。
また、セントラルリポジトリに対して、ローカルリポジトリというものもあります。
自分で作成したライブラリや、セントラルリポジトリにない(有名ではない)ライブラリなどを使用するために利用します。
Mavenを利用したプロジェクトを生成する機能
archetypeを選択すれば簡単にプロジェクトを生成出来ます。
- archetype:generate →「archetype」を利用してプロジェクトを生成する。
- archetype →プロジェクトのテンプレートみたいなもの
よく使われるarchetypeは以下の通り
一般的なJavaアプリケーション
一般的なもの
- グループID: org.apache.maven.archetypes
- アーティファクトID:maven-archetype-quickstart
JavaFXアプリケーション
GUIアプリの基本フレームワーク「JavaFX」の時に使うもの
- グループID: org.codehaus.mojo.archetypes
- アーティファクトID:javafx
Webアプリケーション
Webアプリの場合
- グループID: org.apache.maven.archetypes
- アーティファクトID:maven-archetype-webapp
ちなみにwarファイルが作成されたら、サーブレットコンテナ(Tomcatとか)にデプロイして動作確認するのが普通です。
しかし、プラグイン「Jetty」を使えば、Maven作業の延長でWebアプリを動かせるらしいです。便利だなー。
JAX-RSによるREST開発
WebでRESTサービスを開発する場合
- グループID: org.glassfish.jersey.archetypes
- アーティファクトID:jersey-quickstart-webapp
Gradle
Groovyを利用したビルドツールがGradleです。
GroovyはJava仮想マシン上で動作するオープンソースのスクリプト言語です。
Java使いなら簡単に書けるはず。
XMLと違って、柔軟に処理を記述できるのが便利。
Gradleが対応する言語は、Java, Groovy, Scalaです。ネイティブコードプラグインを使えばC/C++, iOSAppも対応可能。
あとは、Mavenのセントラルリポジトリにも対応しています。
SBT
Simple Build Tool、通称SBTです。
Scala言語がベースのビルドツールです。なので、Scalaのインストールも必要。
※ちなみにPlay Frameworkでは標準でSBTがをビルドツールとして採用しています。
Bazel
Googleが開発するオープンソースのビルドツールがBazel。
Googleが社内プロジェクトのビルドのために開発したものです。
Bazelの特徴は以下の通り
- 多言語対応(Java, C/C++, C#, Python, Groovy, Scalaなど)
- Bazel独自の簡易言語で記述 ※独自だが、簡単
- 拘束で柔軟
ビルドの並列処理も実現していて、とにかく早いのが特徴。
まとめ:「Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応」は良書
「Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応」は良書でした。
環境構築手順を画面キャプチャつきで解説してくれます。
初心者に向いている本です。
特に「ビルドツール?なにそれ?」状態の人にオススメです。
付録で書かれている今後のビルドツールについても面白かった。
著者は「Apache Maven」のXMLベースによるビルド内容の記述は徐々に廃れて、スクリプト言語でビルド処理を書くのが流行るのではないかと言っています。
今後、どんなツールが流行るかわかりませんが、ザックリとした潮流は抑えるのにも役立ちます。
関連記事