はじめに
いつも開発する際に、お世話になっているGradleさん。
buildや実行やUnitテスト実行など必要な操作はわかっているが、手順としてなんとなくわかっているだけで、ちゃんと理解せずに使ってしまっている。
エラーが起きた時、調査に時間がかかったり、やりたいことはできたけど、ここに書いていいのかなとか、もっといいやり方があるのではといつも思ってはいるが、ちゃんと知らないのでいつもまーいっかとなって逃げてしまっている。
いいかげんちゃんと理解したいなと思ったので、アウトプットして理解を深めGradleで幸せなエンジニアライフを送りたいと思いました。
とりあえず公式のチュートリアル
今回のバージョンは8.4でやります。
チュートリアル
Initialize the project
まずはプロジェクトを初期化します。
.
├── app // プロジェクトディレクト
│ ├── build.gradle.kts // プロジェクトのビルドスクリプト
│ └── src // ソースディレクトリ
├── gradle
│ ├── libs.versions.toml // バージョンカタログ
│ └── wrapper // Gradleのwrapper jarが入っているディレクトリ
├── gradlew // Gradleのwrapper(mac,linux実行用)
├── gradlew.bat // Gradleのwrapper(windows用)
└── settings.gradle.kts // サブプロジェクトの設定ファイル
gradle wrapper
Gradleラッパーは、プロジェクトごとに特定のGradleバージョンを指定し、そのバージョンでビルドを実行できるようにするツールです。
これにより、チーム内でのバージョン不一致を防ぎ、安定したビルド環境を維持できます。
settings.gradle.kts
settings.gradle.kts
はプロジェクトのメタ情報や構造を設定します。
rootProject.name = "tutorial"
対象のプロジェクトの名前を設定します。
マルチプロジェクト構成の定義
include("app")
これによって、gradleはapp
ディレクトリをサブプロジェクトとして認識します。
プラグイン管理
Gradleプラグインを設定します。
plugins {
// Apply the foojay-resolver plugin to allow automatic download of JDKs
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
ビルドスクリプトのリポジトリ設定
使用する依存関係やプラグインを検索するリポジトリを指定します。
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
build.gradle.kts
Gradleのビルドスクリプトは、プロジェクトのビルド手順や依存関係を定義する重要なファイルです。
このスクリプトを通じて、タスクの定義やプラグインの適用、依存ライブラリの指定などを行います。
ルートにbuild.gradle.kts
はないのが推奨みたいです。
良くspringbootのプロジェクトを作るときにbuild.gradle.kts
がルートにあるので、これはへーって感じですね。
Some builds may contain a build.gradle.kts file in the root project but this is NOT recommended.
理由はおそらく、プロジェクトが大きくなると、ルートにbuild.gradle.kts
があると、ルートのビルドスクリプトが肥大化してしまうからとか、
プロジェクトの構成が明確になりエンジニアがパッと見でわかりやすいとか、そういう理由があるのかなと思いました。
チュートリアルにはただ非推奨とだけ書いてあったので、従いうようにします。
buildの概念
以下のような一緒に処理できる関連するソフトウェア全体のことを指します。
- ビルド(ソースコードを実行可能な形式に変換する作業)
- jarファイルにする
- テスト(ソフトウェアが正しく動作するか確認する作業)
- JUnitなど
- リリース(最終的にソフトウェアを配布する作業)
- Maven Centralにデプロイする
- ライブラリ: ソフトウェアの一部として再利用可能なコード
- JDBCなど
- プラグイン: 機能を拡張するモジュール
- flywayなど
- ビルドツール: ビルドプロセスをサポートするソフトウェア
- Gradle, Mavenなど
ビルドっていうとソースコードを実行可能な形式にする作業だけをイメージしていましたが、
他のものも含めてビルドという場合もあるんですね。
プロジェクトの概念
project(プロジェクト) は、アーキテクチャ全体を構成する1つの部品
- ライブラリ: 再利用可能なコードの集合
- アプリケーション: 完成したソフトウェア(モバイルアプリやWebアプリなど)
- Gradleプラグイン: Gradleの機能を拡張するモジュール
必要に応じて、他のプロジェクトを含むことができます。
- マルチプロジェクト: 複数のプロジェクトを含むプロジェクト
まとめ
ビルドとは、実行可能な形式にするところから〜公開するところまでの一連の流れまでの話で、
プロジェクトは、アーキテクチャのパーツの一部
という概念がわかりました。
gradlewarpperを使えばバージョンをみんなで揃えることができて便利
settings.gradle.ktsがプロジェクト全体のメタ情報を設定する重要なファイル。
こんなのが第一章のまとめになりますかね。