エンジニアステップ

初心者エンジニア(1年目~3年目くらい)のための技術ブログ

「Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応」の感想

「Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応」という本を読んだので感想とポイントまとめ。

 

複雑怪奇なJavaのプロジェクトに大して、ビルドツールを使うのが最近のはやり。

2018年現在代表的なビルドツールは4種類あります。

  • Apache Maven
  • Gradle
  • SBT
  • Bazel

開発環境の変化

はじめてのCみたいな本で学んだ後、実際の仕事では「開発環境構築」してプログラミングを行います。

ソースコードを書いて、コンパイルして完成、という単純な話ではなく、ライブラリ、フレームワークを駆使して、それぞれのバージョンとか依存関係を理解して…という「ロジック」とは別のところを理解する必要があります。

 

複雑な開発環境の変化に伴い、手作業では困難な作業が増えてきています。

それを解決する専用プログラムと発展してきたのが「ビルドツール」ともいえます。

 

ビルドツールとは

ビルドツールは主に開発に関わる処理を管理、自動化するツールです。

  • ライブラリの管理
  • プロジェクトのビルド
  • テストの実行
  • デプロイ

 

ビルドツールという名前ではありますが、「ビルド」=「プログラムをコンパイルしてアプリケーションを生成する」以外にも色々とやっていますね。

※「ビルド」といっても、プログラムをコンパイルして、ライブラリも参照して、指定ディレクトリに必要リソースを集めて…といった様々な処理があります

 

ビルドツールは基本的にほぼ全てLinux用に提供されています。

 

Dockerとは

Dockerについての簡単な説明もあります。これは余談ですね。

  • Linuxベースの軽量仮想環境
  • 「コンテナ」という環境を作成してその内部でプログラムをインストールして実行する
  • プラットフォームまるごとではなく、ユーザ空間を提供する(Dockerエンジンの上にコンテナを作成)

 

ちなみに仮想環境を構築するプログラムは「ホストコンピュータ内に仮想コンピュータを用意してOSをインストールして起動する」ものが昔ながらの方法でしたが、これは重いです。

 

Apache Maven

Javaビルドツールのデファクト・スタンダードは「Apache Maven」です。

 

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独自の簡易言語で記述 ※独自だが、簡単
  • 拘束で柔軟

 

ビルドの並列処理も実現していて、とにかく早いのが特徴。 

 

まとめ

とにかくこの本では、環境構築手順を画面キャプチャつきで解説してくれるので、初心者に向いている本です。ビルドツールなにそれ状態の人にオススメです。

 

付録で書かれている今後のビルドツールについても面白い。

著者は「Apache Maven」のXMLベースによるビルド内容の記述は徐々に廃れて、スクリプト言語でビルド処理を書くのが流行るのではないかと言っています。

 

どんなツールが流行るかわかりませんが、ザックリとした潮流は抑えておきましょう。