build.gradleのbuildscript、plugins、dependenciesの違いについて

こんにちは。 エキサイト株式会社の三浦です。

Javaの依存管理にGradleを使用する場合、build.gradleファイルを使うことになります。

ですがbuild.graldeでライブラリを管理する場合、 buildscriptpluginsdependencies といった複数の書き方があります。

今回は、それぞれの違いについて説明していきます。

buildscript plugins dependencies の違い

buildscript plugins dependencies の3つとも、「ライブラリをインストールする」という意味では同じです。

ですが、細かく見ると以下のような違いがあります。

dependencies の使い所

dependencies は、アプリケーションコード内で使いたいライブラリをインストールするために使用します。

例えば、アプリケーションコード内でAPIにアクセスしたい場合は、 dependencies を使用してHTTPリクエスト用のライブラリをインストールする、といった形です。

allprojects {
    repositories {
        mavenCentral()
    }
}

subprojects {
    // 必要になる部分で定義
    dependencies {
        implementation "org.apache.httpcomponents:httpclient:4.5.13"
    }
}

buildscript plugins の使い所

buildscriptplugins は、ともにbuild.gradle内で使いたいライブラリをインストールするために使用します。

例えば、コードフォーマットをgradleのタスクとして定義したい、という場合は、build.gradle内でコードフォーマット用のライブラリが必要になるので、 buildscriptplugins でコードフォーマット用ライブラリをインストールする、といった形です。

なお、buildscriptplugins の使い分けですが、基本的には plugins で使用できるようにライブラリが開発されていたら plugins を使用するのが良いようです。

plugins の方が新しく出来たインストール方法であり、 buildscript に比べて簡単に記述できるようになっています。

pluginsの使用例

// 可能な限りファイルの最初の方で定義
plugins {
    id 'checkstyle'
}

buildscriptの使用例

// 可能な限りファイルの最初の方で定義
buildscript {
    repositories {
        mavenCentral()
    }

    // buildscript内で使用するdependenciesは、あくまでbuildscript内で効力を持つものであり、
    // 通常のdependenciesの様にアプリケーションコード内で使用できるようにはならない
    dependencies {
        classpath platform('software.amazon.awssdk:bom:2.17.160')
        classpath 'software.amazon.awssdk:s3'
    }
}

最後に

build.gradleは、できることがたくさんある分かなり複雑な設定ファイルです。

この記事が、その理解のための一助となれば幸いです。