この広告は、90日以上更新していないブログに表示しています。
仕事で一時期ビルド職人ぽいことをしていたので参考のため軽く復習しようと購入した本。著者は超入門シリーズなどで知られる掌田津耶乃さんです。
1-1 ビルドツールとは?
1-2 Dockerのセットアップ

2-1Mavenの基礎知識
Apache Antの後継。Antと違ってビルドに関する作業以外も含んでいる。pom.xml に設定を記述。M3_HOMEにフォルダを指定、Pathに%M3_HOME%\bin を追加。MacはPATHに追加するだけ。mvn archetype:generate で、対話形式でMavenプロジェクトが生成できる。ソースコート置き場は{プロジェクトルート}/src/ でなく{プロジェクトルート}/src/main/java のようになるのが特徴。後の他のツールにも受け継がれている。pom.xml 直接修正でもやれることをダイアログから選べたりタスクを実行したり、IDE上でも操作できる。NetBeansではさらにMavenプロジェクトをそのまま開ける。2-2 pom.xmlの基本を覚える
Project Object Modelの略。<project>タグ内はプロジェクト情報。JavaScriptのnpmにおけるpackage.jsonと似たような感じ。artifactIdはgroupIdの中で一意である必要があり、プロジェクトの識別子のようなもの。<dependencies>の中に依存するライブラリを書く。ないものはセントラルリポジトリから探して入れてくれる。2-3 基本的なゴールについて
mvn compile でtarget/classes 配下にJavaクラスコンパイルされる。mvn test-compile でtarget/test-classes 配下にテストクラスがコンパイルされる。mvn test でJUnitテスト実行。mvn package でコンパイル後のjar作成など。target/{artifactIdの名前}-{バージョン指定}.jar が作られるmvn clean でtarget/の下をお掃除。
exec-java-pluginを利用するようpom.xmlのbuild-puglinsの中に書くと、コマンドmvn exec:java でjavaコマンド実行ができる。
mvn eclipse:eclipse でMavenプロジェクト→Eclipseプロジェクトへ変換mvn eclipse:to-maven でEclipseプロジェクト→Mavenプロジェクトへ変換mvn eclipse:clean でMavenプロジェクト→Eclipseプロジェクトへ変換したのを戻すIntelliJでもmvn idea:idea と同じようにできる
maven-jar-plugin利用を設定すると、mvn package実行で作ったjarファイルにmainクラスを指定してjavaコマンドから動かせるようになる。
2-4 セントラルリポジトリ
ここから検索可能。この本のスクショではいかにもApacheぽいサイトが載っていますが、今アクセスするとリポジトリマネージャーのNexusなどで有名なsonatype社のロゴが先頭に出ていて、時代の変遷を感じます。
なお最初にAntはビルドそのものが対象だがMavenはそれ以外の作業も広く対応...とありますが、Antでもタスクを書けばJUnitを実行したりJavaDocを生成したりはそんなに難しくはないですね。(むかーし色々やりました...懐かしい...)
3-1リポジトリの利用
<repositories>に書いておくと、mvn packageの過程でそこにアクセスしてライブラリを取ってこれる。mvn packageでjarファイルを作った後、mvn install やmvn install:install-file でローカルリポジトリに登録できる。Windowsだと実際の場所は{ホームディレクトリ}/.m2/repository にインストールしたライブラリが並ぶ。3-2 デスクトップアプリケーション開発
mvn archetype:generate -DarchetypeGroupId={グループID} -DarchetypeArtifactId={アーティファクトID} で細かく特定のテンプレートをもとにプロジェクトを作成できる。JavaFXのプロジェクトも生成できる。こういう例も載っているのがありがたいですね。とはいえ2021~現在、JavaでGUIアプリを作る機会があるかというとだいぶなさそうな気も。
3-3 Webアプリケーションの開発
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp で生成。{プロジェクトルート}/main/webapp ができてここにJSPを置いたりweb.xmlを置いたり。mvn packageコマンドで生成されるのもjarファイルでなくwarファイルに最初から設定されている。maven-jetty-plugin を入れると、TomcatなどWebサーバーにデプロイしなくても、コマンドmvn jetty:run で内臓のJettyがWebサーバーとして動いて動作確認できる。jersey-quickstart-webappというアーティファクトIDも用意されていて、JAX-RSによるRESTサービス用のプロジェクトも生成できる。中のファイル構成やpom.xmlなどが最初から設定済み。spring-boot-sample-jetty-archetype というアーティファクトIDを使うと、Spring Bootフレームワーク版のプロジェクトも作れる。各レイヤーのサンプルのクラス群が用意されている。3-4Mavenの拡張
pom.xmlに記述、プロジェクトの中で使う例を説明。pom.xmlの中が複雑になる。プログラミング言語ごとにライブラリ管理ツールは主要なものが別にあったり、雛形作成系は主要Webアプリケーションフレームワークが持っていたり専用のライブラリがあったり差はありますが、改めて俯瞰すると根本的にはだいたいやっていることは同じです。
Java系では最も速いApache Antが2000/7月リリース。後続のMaven 1.0のリリースが2004/7、v2.0が2005/10、v3.0が2010/10。こうしたビルドツール系の流れの中では先駆者だし、他のツールの参考にもされたのだろうなあと思います。
4-1 Gradleの基礎知識
Groovyがある。Javaの方言のような位置づけ。このGroovyを使ったビルドツール。Java、Scalaでよく使われる。Groovy言語自体のインストールは実はなくても動く。ダウンロードして展開後、システム環境変数GRADLE_HOMEにインストール場所を指定して新規追加、Pathに%GRADLE_HOME%\bin;を追加。MacならPATHに追加するだけ。
gradle init --type java-library でプロジェクトフォルダを生成。中に.gradle/ gradle/ build.gradle, gradlew など固有のフォルダ、ファイルがいくつか作られる。
src/main/java などでMavenの伝統を引き継ぐ。build.gradleがメインで、ここにプラグインの設定、リポジトリの設定、依存するライブラリなどを書いて実行。4-2 開発環境での利用
EclipseにはGradle統合のプラグインがあって各種作業がEclipse上からも行える。build.gradleにEclipseプラグイン使用を書いておいてコマンドgradle eclipseで、Eclipse用のプロジェクトが作成できたりする。IntelliJは元から標準でGradleをサポート。同じくbuild.gradleにideaプラグイン使用を書いておいてコマンドgradle ideaで、IntelliJ用のプロジェクトが作成できる。NetBeansはGradle Supportというプラグインが必要。gradle --GUI コマンドで起動する、でGradle専用のGUIツールも実はある。4-3 build.gradleの基本を覚える
build.gradle にtask taskName { ... } でいろいろ書いていく。前処理、後処理の挿入も可能。コマンドラインからの実行時の引数も受け取れる。gradle java でビルドが走ってjarファイル生成が走る。gradle build だと言語を問わないビルド。compileJava, processResources, classes, test, jar, javadoc, clean など一般的なタスクが揃う。gradle run でプログラム実行ができる。gradle test で実行。テストのレポートも出力される。mavenCentral() と書くと、リポジトリからのライブラリ取得にMavenセントラルリポジトリを使える。便利。5-1 さまざまなプログラムの作成
gradle initから。gradle initから。フォルダやファイルは手で作り、build.gradleにservletなどのライブラリを書いておく。5-2 さまざまなアプリケーションの作成
gradle initから。フォルダやファイルは手で作り、build.gradleに使うライブラリを書き、jetty経由で起動。gradle initからで同様。ビルド後の実行はjava -jar {生成されたSpring Boot用のJAR}.jar で起動。gradle init --type groovy-libraryになる。5-3Apache Antの利用
ant.echoやant.mkdirのように書いていけばよい。ant.importBuild {build.xmlの場所} と書くと、Antのビルドファイルbuild.xmlも呼べる。ちょうど仕事でもちょっと触れていたので復習できてよい章でした。各種アプリケーションの作り方など、設定例も載っているので使う方には役に立つと思います。
まずAntが生まれてビルドツールという考え方も含めて普及→欠点を直して改良してMaven誕生→さらに改良してGradle誕生...の流れなので、子孫のGradleから始祖にあたるAntの機能も使えるのは面白いですね。
6-1 SBTの基礎知識
www.scala-lang.orgwww.scala-sbt.org
sbt new {テンプレート名}でプロジェクトフォルダ新規生成。コード置き場は{プロジェクトルート}/src/main/scala で、MavenやGradleと同様。build.stbファイルがビルドファイルで、ここに変数などを記述。なくても動く。sbt compile でコンパイル。sbt run でプログラム実行。sbt package でjarファイル生成。Scala IDEとして提供。(しかしその後更新が滞っているようです)Scalaプラグインがあり、タスク実行などもろもろ可能。nbscalaというプラグインがあるが、NetBeans 8.1のみ対応。ActivatorというGUIツールを持っている。activator ui コマンドでブラウザから起動、プロジェクトの管理や起動ができる。6-2 SBTを使いこなす
build.stbにプロジェクト定義以外にタスクもScalaコードで書ける。依存ライブラリもこのファイルに記述。別ファイルに切り出すやり方もある。build.stbにJettyプラグインの記述をしてsbt -jetty:startで動く。build.stbに対応した記述を書いておくとsbt runで動く。build.stbに対応した記述を書いておくとsbt runで動く。build.stbを出力することもできる。自分的にはScalaは追っていないのでSBTは知らなかったのですが、こういうツールもあるのですね。最新はv1.4.6で2020/12リリースとなっています。
7-1 Bazelの基礎知識
ワークスペース/プロジェクトフォルダ/src/main/javaのような構成。WORKSPACE,BUILDというファイルにビルド内容を独自言語で記述する。~/bin/bazel build コマンド実行でビルド~/bin/bazel run bazel-app でmainメソッドが実行。7-2 Bazelを使いこなす
7-3 Bazelの基本的な機能
マクロ名.bzlというファイルでマクロが定義でき、BUILDファイルから呼べる。マクロ内からコマンド実行など各種可能。まったく知らなかったのですがこういうツールもあるのか...という感じ。なんとなくLinuxの中で作りこんだシェルスクリプトの延長のような感じがします。その後あまり話を聞かないですが、2020年にAodroidオープンソースプロジェクトのビルドツールとしてこのBazelが採用されていますね。
最後には本書の2017年時点でのビルドツールの今後の展望が記述されています。本書の予想によれば...
大体2021年現在もこうなっているなあという感じです。
SBTとBazelは使う機会がなさそうなので多くの場合はMavenとGradleの情報が主になるかと思いますが、復習にはちょうど良い本でした。2017年2月発売とちょい古いですが、プロジェクトの土台を支えるこうしたビルドツール周りは変化のスピードはあまり激しくなので、十分役立つ内容でした。
掌田津耶乃さんの本は超入門シリーズなどは時々誤植が多かったり内容が薄かったりすることもあるのですが、本書はボリューム380ページ、かなりしっかり書いてある印象です。まだまだ多いであろう歴史あるJavaプロジェクトや、Android開発に携わっている方にはちょうど良いのではないでしょうか。

『EclipseではじめるJavaフレームワーク入門 第5版Maven/Gradle対応』が2016年、同じく掌田津耶乃さんの本。総合的に扱った本ですがMavenとGradleの話も出ています。586ページと情報も詰まっていてけっこうおすすめです。
当ブログにも以前に読んだ時の感想記事があります。完全に余談ですがこの記事、けっこう今でも検索からのアクセスがあります。やはりJava関係の情報は検索されることが多いのだなあと思ったりします。
Gradleについては2014年なのでだいぶ古いですが、『Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築』という本が出ています。
ビルドツールを専門に扱った本というとやはりあまりないですね。Java開発を総合的に扱った本や各種情報の載ったムック、特定のフレームワークの解説本などに、中の作業の一部としてビルドツールの話も一緒に載っているような体裁が多いです。
id:iwasiman引退した元TRPGゲーマー。COBOLでもなくPL/Iの金融系レガシー紙駆動開発から脱出→国産メーカー系総合ITベンダーのITエンジニア。所謂SIerのSEだけど仕事はほぼソフトウェアエンジニア/ソフトウェアアーキテクトとして、Web開発でコードを書いたり技術を追ったり時々イベントに行ったり、楽しいエンジニアリングを目指しています。Views are my own.
お気軽にどうぞ~
リンク集:https://lit.link/iwasiman
AIイラスト関連の活動はこちら↓
https://www.chichi-pui.com/users/iwasiman/
https://pixiv.me/iwasiman
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。