好きなところ嫌いなところ(ビルドツール界隈編)
個人の見解です。
異なるスキルセットの人が複数人いる場面で教育コストと標準化を考えるとビルドシステムは極力ミニマムのことができればイイと思います。なんでもできることはそれはそれで良いこともあるのですが、変に頑張れてしまうので場違いな頑張りの所為でカオスになることが多々あります。
個人的に使うのであれば自由度が限りなく高い方が望ましいと思う。
※ 初回の公開から8年が経過しているという衝撃を受けながら編集しました。
総論はGradle大嫌いです
Maven
Java プロジェクトでこれまで(2023年1月時点)で最も使ってきたビルドルーツです。
好きなところ
- 守備範囲が明確。コマンドが決まっているので自由がきかない。→利用者の習熟度が成熟しやすい、教育コスト低い。
- 現時点でデファクト=世間のリソース、ノウハウが豊富
- プロジェクトのスタイル(殆どが Web アプリケーション)なので、設定ファイル(POM)の使いまわしがきく
- IDEとのリレーションハードルが低い。Eclipse+m2e+WTP
嫌いなところ
- 遅い
- できないことが多い(トレードオフ。ただ今のところは致命的ではなく代替案が大体ある)
- リポジトリにつながらないのが一定期間続くと、モジュールの更新がうまくいかないときがある。→そんなときはローカルリポジトリ削除しかない
- XMLでの設定
- ブラックボックスなので問題が起きたときの原因調査に時間がかかる。
- ファイルの操作が Maven だけではできない。
- カスタマイズ面倒。
Gradle
2015年以降Javaアプリケーションの開発やAndroidアプリケーションの開発で使用する機会が増え、常に何かしらGradleを触ってる状態。ただし、自分に選択権がある場合は採用していない。理由は以下の通り。
好きなところ
- Groovy スクリプトなので自由にタスク決められる
- Kotlin での記述もできる
嫌いなところ
- 自由度高すぎる=複雑にしようと思えばどこまででも複雑にできる。
- あるゴール(やりたいこと)を記述する方法が複数あり、一体どれが適切な姿なのか一切わからない。
- プラグインなどである程度デフォルトがつくられているが、タスクの名前を自由に決めるので、人によってルールが変わる→毎回説明がいる。引き継ぎ面倒臭い。
- IDE を Eclipse にするとやたらめんどくさい。Eclipse で設定した内容を build.gradle に記述しておかないと消失する。
- 基本的な機能も記述しなければいけない(MavenにおけるProfile切替みたいなこととか)
- build.gradle の文字コードが実行環境に依存してる
- Groovy、Kotlinと複数の記述方法があり、プロジェクトにより採用がバラバラになる=覚えることが増える
- モジュール依存を記載するにも2種類あって表記が揺れて、そろえるのにいちいち面倒くさい
結局ivy使ってるので、Mavenと両方つかうとローカルリポジトリが膨大に
Ant
好きなところ
- できることが Maven よりもちょっとおおい
嫌いなところ
- タスクの名前を自由に決めるので、人によってルールが変わる→毎回説明がいる。
- プロジェクトのディレクトリ構成のスタンダードがない(自由だからね)
- ライブラリのバージョン管理ができない(思想にない。ivyがあるけど、それなら Maven でいい)
- 設定が XML なのかプロパティファイルに分散することがおおい
- プロファイルの切り替えみたいなことがデフォルトでない