Gradle / Programming

ザクっと理解するsettings.gradle(.kts)の書き方 – Gradle Android Kotlin

Gradleシリーズです。
なんとなく使っているGradleをザクっと理解できるように書いています。
前回はビルドのライフサイクルをザクっとご紹介しました。
今回はsettings.gradle(.kts)の書き方についてご紹介します。
settings.gradle(.kts)のザクっと理解はこちら

Writing Settings Filesより

Settingsオブジェクト

前回の記事にあるビルドフェーズの初期化でもご紹介した通り、各settings.gradle(.kts)にSettingsインスタンスを作成し、それに対して設定ファイルを実行します。
設定ファイルを実行することで、Settingsインスタンスを構成するため、設定ファイルはSettingsオブジェクトを定義していることになります。

SettingsオブジェクトはGradle APIの一部であり、設定ファイルの多くのトップレベルのプロパティやブロックはSettings APIの一部です。
※Kotlin DSLのSettingsオブジェクトのドキュメントはこちら
※Groovy DSLのSettingsオブジェクトのドキュメントはこちら

下記は基本的なプロパティの一例です。

名前説明
buildCacheビルドキャッシュの構成
plugins適用するプラグインのコンテナ
rootDirビルドのルートディレクトリ
rootProjectビルドのルートプロジェクト
settingsSettingsオブジェクトをリターン

下記は基本的なメソッドの一例です。

名前説明
include()指定したプロジェクトをビルドに加える
includeBuild()指定したビルドをCompositeビルドに加える

設定スクリプト(設定ファイル)の構造

設定スクリプトは、Kotlinでは「ラムダ(lambda)」、Groovyでは「クロージャー(closure)」と呼ばれる特別な方法で呼び出すGradle APIで構成されています。

plugins { // ラムダ(クロージャー)
  ...
}
//
// ↓
//
plugins(function() { // オリジナル
  ...
})

Gradleは、設定スクリプトを上から順に1行ずつ実行していきます。

pluginManagement { // 1
    repositories {
        gradlePluginPortal()
        google()
    }
}

plugins { // 2
    id("org.gradle.toolchains.fake") version "0.6.0"
}

rootProject.name = "root-project" // 3

dependencyResolutionManagement { // 4
    repositories {
        mavenCentral()
    }
}

include("sub-project-a") // 5
include("sub-project-b")
include("sub-project-c")

1. プラグインの場所を定義
pluginManagementを使用することで、プロジェクトで使用するプラグインを任意で定義できます。
これには、Gradle Plugin PortalやincludeBuilds()を使用したほかのGradleのビルドのようなバイナリリポジトリも含まれます。
また、このブロックにはプラグインの依存関係解決戦略の追加も可能です。

2. プラグインの適用
任意で後から適用するプラグインの宣言もでき、ビルドやサブプロジェクト間で共有できます。
設定ファイルに適用するプラグインは、Settingsオブジェクトにのみ影響を与え、影響範囲はプロジェクト全体になります。

3. ルートプロジェクトの名前の定義
rootProject.name」プロパティに値を代入することでルートプロジェクトの名前を定義できます。
各ビルドにロートプロジェクトは1つのみです。

4. ビルド全体のリポジトリの定義
repositories」を使用することで、プロジェクトが依存するコンポーネントの場所(およびコンポーネントの解決方法)を任意で定義できます。
コンポーネントの例として、Maven Centralや「includeBuild」を使用して指定するほかのGradleのビルドが挙げられます。

5. ビルドにサブプロジェクトを追加
「include(“name”)」を使用し、サブプロジェクトをすべて追加することで、プロジェクトの構成を定義しています。

スクリプト記述の注意点

上記で紹介した以外にも、Settingsオブジェクトには多くのプロパティやメソッドがあります。
多くのGradleスクリプトは、KotlinもしくはGroovyの構文を使用して短く記述していますが、それらすべては、基本的に、GradleAPIのSettingsオブジェクトのメソッドを呼び出していることに注意する必要があります。

// Kotlin構文(Kotlin syntax)
include("app")

//
// ↓
//

// Gradle API
settings.include("app")

そして、KotlinとGroovy言語の全機能を使うことができます。
例えば、すべてのサブプロジェクトを追加するために、何回も「include()」を使用するのではなく、プロジェクトのルートにあるフォルダのリストを反復処理することもできます。

rootDir.listFiles().filter { 
  it.isDirectory &&
    (new File(it, "build.gradle.kts").exists()) 
}.forEach {
  include(it.name)
}

このようなロジックはプラグインの中に記述することが推奨されています。

おわりに

次回はbuild.gradle(.kts)の書き方について解説します。
ご要望等がありましたらお気軽にコメントまでお願いします。

参考文献

Writing Settings Files

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です