settings.gradle: その概要、モジュールのinclude、pluginManagement

著者: IT Sectr 公開日: 2026-05-31 読了時間: 9 分

settings.gradleは、マルチモジュールプロジェクトの構造を定義するGradleのルート設定ファイルです。どのモジュールがビルドに含まれるか、どのプラグインが利用可能か、依存関係がどのように解決されるかを定義します。build.gradleが各モジュールのビルド方法を記述するのに対し、settings.gradleはプロジェクトがどのモジュールで構成されているかを記述します。Gradleドキュメント、2025によると、settings.gradleを適切に設定すると、モジュール解決の最適化により、マルチモジュールプロジェクトの設定時間が25%削減されます。このファイルは、Gradleビルドライフサイクルの最初のフェーズであるInitializationフェーズで実行されます。

重要ポイント

  • settings.gradle — プロジェクト構造を記述するルート設定ファイル。
  • include — モジュールをビルドに追加するディレクティブ。
  • pluginManagement — Gradleプラグインのバージョンとそのリポジトリを管理するブロック。
  • dependencyResolutionManagement — 依存関係リポジトリの集中管理。
  • Version Catalogs(libs.versions.toml)は、ライブラリバージョンを管理するためにsettings.gradleを介して接続されます。

settings.gradleとは?

settings.gradle(Kotlin DSLの場合はsettings.gradle.kts)は、GradleがInitializationフェーズで実行するファイルです。プロジェクト階層を定義し、モジュールを追加し、プラグインと依存関係のリポジトリを設定します。settings.gradleがないと、Gradleはどのモジュールをビルドすべきか、どのプラグインが利用可能かを認識できません。シングルモジュールプロジェクトではsettings.gradleがなくても問題ありませんが、マルチモジュールプロジェクトでは必須です。

settings.gradleファイルはプロジェクトルートにあり、ルートのbuild.gradleと並んで配置されます。典型的なルートプロジェクト構造: settings.gradle.ktsbuild.gradle.ktsgradle.propertieslocal.propertiesgradle/wrapper/。settings.gradleはbuild.gradleより先に実行されます。Initializationフェーズでは、Gradleがプロジェクトツリー(Gradle APIのProject)を構築します。Initialization完了後、Configurationが開始され、各モジュールのbuild.gradleが実行されます。

歴史的には、settings.gradleはGradle 0.7(2010年)で登場し、当初はincludeディレクティブのみを含んでいました。Gradleの進化に伴い、pluginManagement(Gradle 6.8)、dependencyResolutionManagement(Gradle 7.0)、versionCatalogs(Gradle 7.4)が追加されました。最新のsettings.gradleは、プロジェクト全体のプラグイン、リポジトリ、バージョン管理を集中化する強力な設定ファイルです。GoogleはAGP 8.0以降、Android Gradle Pluginでこれらの機能を必須としています。

settings.gradle vs build.gradle

settings.gradleはプロジェクト構造とグローバル設定(プラグイン、リポジトリ)を管理します。build.gradleはビルド(依存関係、Android設定、タスク)を管理します。settings.gradleが最初に実行され、Settings APIにアクセスできます。build.gradleはその後で実行され、Project APIにアクセスできます。モジュールレベルの設定(androidブロック、dependencies)をsettings.gradleに記述することはできません。

includeによるモジュールの追加

includeディレクティブはsettings.gradleの中核です。どのモジュールをビルドに含めるかをGradleに指示します。includeの引数はモジュールパスの文字列です。include(":app")はルートレベルのモジュールを追加し、include(":core:network")はcore/network/サブディレクトリのモジュールを追加します。先頭のコロンはパスがプロジェクトルートからの相対パスであることを示します。includeの後、Gradleは指定されたディレクトリのbuild.gradleを自動的に見つけ、モジュールをプロジェクトツリーに追加します。

各includeは、include文字列と同じ名前のProjectをGradle APIに作成します。プロジェクト名は、他のモジュールのbuild.gradleファイルのimplementation(project(":module"))で使用されます。includeで追加されていないモジュールを参照すると、“Project not found”エラーが発生します。Android Studio IDEも、Projectパネルにモジュールを表示するためにsettings.gradleを使用します。includeされていないモジュールはファイルツリーに表示されません。

includeはincludeBuild("../library-project")によるincluded buildscomposite buildsをサポートしています。これにより、Gradleプロジェクト全体を外部モジュールとして含めることができます。Included buildsは、アプリケーションと並行してライブラリを開発する場合に便利です。ライブラリの変更は、Mavenリポジトリに公開しなくてもアプリケーションに即座に反映されます。プロダクションビルドでは、includeBuildは通常のMaven依存関係に置き換えられます。

kotlin
// settings.gradle.kts — 典型的な構造
rootProject.name = "MyApp"

// アプリケーションモジュール
include(":app")
include(":core:network")
include(":core:database")
include(":core:ui")
include(":feature:home")
include(":feature:profile")
include(":feature:settings")

// 外部ライブラリの追加(composite build)
includeBuild("../my-analytics-lib") {
    dependencySubstitution {
        substitute(module("com.example:analytics"))
            .using(project(":analytics"))
    }
}

プラグイン管理ブロック

解決戦略

pluginManagementは、Gradleプラグインの読み込み元を指定するsettings.gradleのブロックです。Gradle 6.8で導入され、プラグインを適用する前に集中管理するためのものです。pluginManagement内には、repositories(プラグインを検索するリポジトリのリスト)、resolutionStrategy(バージョン解決ルール)、plugins(明示的なプラグインバージョンの宣言)があります。pluginManagementが定義されていない場合、Gradleはbuild.gradleのリポジトリを使用しますが、プラグインは宣言された後にのみ検索されるため、プラグインが見つからない場合にエラーが発生します。

Androidプロジェクトでは、Version CatalogsやConvention Pluginsを使用する場合、pluginManagementが必須です。pluginManagementがないと、Gradleはbuild.gradle.ktsで適用する際にcom.android.applicationプラグインを見つけられません。一般的な設定: repositoriesにはgoogle()(Androidプラグイン)、mavenCentral()(サードパーティプラグイン)、gradlePluginPortal()(公式Gradleプラグイン)が含まれます。

pluginManagementはpluginsもサポートしています。これはバージョン付きでプラグインを宣言し、後でbuild.gradleでバージョンを指定せずに適用するためのものです。これによりプラグインバージョンが集中管理されます。10個のモジュールがkotlin-androidを適用する場合、バージョンはpluginManagementで一度だけ指定します。重要: pluginManagement.pluginsは単なる宣言です。プラグイン自体はbuild.gradleでplugins { id("org.jetbrains.kotlin.android") }によって適用されます。

kotlin
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
        maven { url = "https://jitpack.io" }
    }

    // プラグインバージョン — 集中管理
    plugins {
        id("com.android.application") version "8.7.0"
        id("com.android.library") version "8.7.0"
        id("org.jetbrains.kotlin.android") version "2.0.21"
        id("com.google.devtools.ksp") version "2.0.21-1.0.25"
    }

    resolutionStrategy {
        // 全モジュールの強制プラグインバージョン
        eachPlugin {
            if (requested.id.id == "com.google.gms.google-services") {
                useVersion("4.4.2")
            }
        }
    }
}

plugins {
    // プラグインの適用 — apply false(ルートに適用しない)
    id("com.android.application") apply false
    id("org.jetbrains.kotlin.android") apply false
}

依存関係解決管理

repositoriesModeのモード

dependencyResolutionManagementは、すべてのモジュールのリポジトリを集中管理するsettings.gradleのブロックです。Gradle 7.0で、各build.gradleでrepositoriesを宣言する代わりとして導入されました。ブロック内では、repositoriesMode(モード: PREFER_PROJECT、PREFER_SETTINGS、FAIL_ON_PROJECT_REPOS)とrepositories(リポジトリのリスト)を設定します。repositoriesMode = PREFER_SETTINGSの場合、モジュールレベルのrepositoriesは無視され、集中管理されたリストのみが使用されます。

repositoriesModeは3つの値を取ります。PREFER_SETTINGS — build.gradleのリポジトリは無視され、settings.gradleのもののみが使用されます。PREFER_PROJECT — build.gradleのリポジトリがsettings.gradleより優先されます。FAIL_ON_PROJECT_REPOS — モジュールが独自のリポジトリを宣言すると、Gradleがエラーを発生させます。新しいプロジェクトではPREFER_SETTINGSが推奨されます。これにより、すべてのモジュールが同じリポジトリを使用することが保証され、重複が排除されます。

repositoriesMode = FAIL_ON_PROJECT_REPOSは特にチームで有用です。開発者が1つのモジュールにのみリポジトリを追加し、他のモジュールからは見えない場合、“works on my machine”問題が発生します。FAIL_ON_PROJECT_REPOSはすべてのリポジトリをsettings.gradleで集中宣言することを強制し、このような状況を防ぎます。GoogleはAGP 8.0以降、すべてのAndroidプロジェクトでFAIL_ON_PROJECT_REPOSを推奨しています。

kotlin
dependencyResolutionManagement {
    // FAIL_ON_PROJECT_REPOS — すべてのリポジトリはここだけ
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

    repositories {
        google()
        mavenCentral()
        maven { url = "https://jitpack.io" }

        // プライベートMavenリポジトリ
        maven {
            url = "https://maven.pkg.github.com/company/internal-lib"
            credentials {
                username = providers.gradleProperty("gpr.user")
                    .getOrNull() ?: System.getenv("GPR_USER") ?: ""
                password = providers.gradleProperty("gpr.key")
                    .getOrNull() ?: System.getenv("GPR_KEY") ?: ""
            }
        }
    }
}

// build.gradleモジュールのrepositoriesは不要になります!
// すべてのリポジトリはsettings.gradleに集中管理

settings.gradleのバージョンカタログ

Version Catalogsは、TOMLファイルを介して依存関係のバージョンを集中管理する方法です。Gradle 7.4以降、バージョンカタログはすべてのAndroidプロジェクトで推奨されるメカニズムです。gradle/libs.versions.tomlファイルには3つのセクションがあります。[versions](バージョン)、[libraries](依存関係)、[plugins](プラグイン)。settings.gradleでは、バージョンカタログは@Suppress("UnstableApiUsage")enableFeaturePreview("VERSION_CATALOGS")(古いGradleバージョン)を介して接続されます。

バージョンカタログを接続すると、build.gradleのモジュール依存関係はlibsを介して指定されます。implementation(libs.retrofit)のように記述します。IDEはlibsのオートコンプリートを提供します。カタログは自動的に型安全なアクセサを生成します: libs.retrofit、libs.kotlin.coroutines、libs.bundles.compose。Bundlesは1行で追加できる依存関係のグループです。バージョンカタログは継承もサポートしており、複数のTOMLファイルを接続できます。

バージョンカタログの利点: バージョンを一元管理(すべてのbuild.gradleを検索する必要なし);型安全なアクセス(libs名のタイプミスはコンパイル時に検出され、実行時ではありません);自動更新(DependabotとRenovateがTOMLをサポート);Convention Pluginsとの互換性。Google FirebaseとAndroidXは独自のTOMLカタログを配布しています。バージョンカタログへの移行には、build.gradleからTOMLにバージョンを自動的に移行するプラグインがあります。

toml
# gradle/libs.versions.toml
[versions]
agp = "8.7.0"
kotlin = "2.0.21"
composeBom = "2024.12.01"
retrofit = "2.11.0"
coroutines = "1.9.0"

[libraries]
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
retrofit-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" }
compose-ui = { module = "androidx.compose.ui:ui" }

[bundles]
compose = ["compose-ui", "compose-material3"]

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

高度な設定: includeBuildと試験的機能

includeBuildは、複合ビルドを作成するためのディレクティブです。現在のビルドの一部として外部のGradleプロジェクトを含めます。include(モジュールを含める)とは異なり、includeBuildは独自のsettings.gradle、モジュール、プラグインを持つプロジェクト全体を含めます。複合ビルドは、アプリケーションと並行してライブラリ(分析、ネットワーキング)を開発する場合、別のリポジトリからConvention Pluginsを含める場合、build-logicモジュールを統合する場合に使用されます。

試験的機能(Incubating Features)は、enableFeaturePreview("FEATURE_NAME")で有効になるGradleの実験的オプションです。AGP 8.7+では、TYPESAFE_PROJECT_ACCESSORS(マルチモジュールプロジェクトでの型安全なプロジェクトアクセス: project(":core:network")の代わりにprojects.core.networkと記述可能)、STABLE_CONFIGURATION_CACHE(安定した設定キャッシュ)、ARTIFACT_TRANSFORM_FOR_INTERNAL_TEST(アーティファクト変換)が利用可能です。試験的機能は本番環境でも有効にできますが、APIは将来のバージョンで変更される可能性があります。

Gradle EnterpriseBuild Scanもsettings.gradleを介して設定されます。plugins { id("com.gradle.enterprise") }とgradleEnterpriseブロックを使用します。Build Scanはクラウドサービスで、各ビルドの詳細情報(各タスクの実行時間、キャッシュ、エラー)を表示します。Build Scanを有効にすると、ビルド速度の問題を診断するのに役立ちます。Build Scanはオープンソースプロジェクトでは無料です。

kotlin
// 試験的機能
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")

// Gradle Enterprise / Build Scan
plugins {
    id("com.gradle.enterprise") version "3.18"
}

gradleEnterprise {
    buildScan {
        termsOfServiceUrl = "https://gradle.com/terms-of-service"
        termsOfServiceAgree = "yes"
        publishAlwaysIf(true)
    }
}

// build.gradleでの型安全プロジェクトアクセサの使用
// 代わりに: implementation(project(":core:network"))
// 可能: implementation(projects.core.network)

よくある質問

Androidプロジェクトにsettings.gradleは必須ですか?

シングルモジュールプロジェクトでは、Gradleはデフォルト値を使用できます。ただし、AGP 8+では、Version CatalogsとConvention Pluginsの適切な動作のためにpluginManagementとdependencyResolutionManagementが必要なため、常にsettings.gradleを用意することをお勧めします。

includeとincludeBuildの違いは何ですか?

includeは現在のプロジェクトからモジュールを追加します(単一のモジュールツリー)。includeBuildは外部のGradleプロジェクトを複合ビルドとして追加します。includeBuildは、同じリポジトリでライブラリを開発したり、Convention Pluginsを追加したりする場合に便利です。

settings.gradleに新しいモジュールを追加するには?

settings.gradleにinclude(":モジュール:名前")を追加し、build.gradleのあるディレクトリを作成します。Android Studioは、File → New → New Moduleでモジュールを作成する際に自動的に行います。追加後、Sync Project with Gradle Filesを実行します。

pluginManagementはbuild.gradleに記述できますか?

いいえ、pluginManagementはsettings.gradle専用のブロックです。Initializationフェーズで、すべてのbuild.gradleファイルが実行される前に実行されます。build.gradleでは、プラグインは適用のみが行われ、管理はされません。

dependencyResolutionManagementがないとどうなりますか?

各モジュールが自身のbuild.gradleでrepositoriesを宣言する必要があります。これによりコードの重複と非同期のリスク(あるモジュールにリポジトリがあり、別のモジュールにはない)が発生します。dependencyResolutionManagementはリポジトリを集中管理し、“works on my machine”エラーを防ぎます。

まとめ

  • settings.gradle — プロジェクト構造を定義するためにInitializationフェーズで実行されるルート設定ファイル。
  • includeはモジュールをビルドに追加します。includeBuildは外部のGradleプロジェクトを統合します。
  • pluginManagementはすべてのモジュールのプラグインリポジトリとバージョンを集中管理します。
  • dependencyResolutionManagementとrepositoriesMode=FAIL_ON_PROJECT_REPOSによりリポジトリの重複が排除されます。
  • Version Catalogs(libs.versions.toml)は型安全な依存関係バージョン管理を提供します。
  • 試験的機能(Typesafe Project Accessors、Configuration Cache)はビルドを高速化し、コードを簡素化します。
  • 推奨: 最新のプロジェクトでは、Kotlin DSL、Version Catalogs、FAIL_ON_PROJECT_REPOS、enableFeaturePreviewを使用してください。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください