当サイトはPR広告を利用しています。

【入門】Gradleとは?機能まとめ

2024年4月1日

Gradleの機能をまとめています。設定可能な項目は大量にあるので網羅的な説明はGradle公式ページに任せ、この記事ではGradleの基本情報を説明します。

ちなみにGradleの読み方はグラドルではなくグレイドルです。

概要

Gradleはオープンソースのビルド自動化ツールです。つまり、Javaなどのソースコードを配布可能なパッケージにするために必要な処理をまとめて行ってくれるツールです。具体的にはソースコードのコンパイル自動テスト実行パッケージ化までをユーザーが設定した値に従って一気に実行してくれます。

Gradleでどのようにビルドするのかを設定するスクリプトにはGroovyという言語が採用されています。Groovyはjavaとrubyが混ざったような言語です。文法の大半はjavaと同様なのでjavaの文法を知っていれば簡単に使えます。またバージョン5.0からはKotlinでの記述にも対応しました。

実はGradle自身の機能は限られており、Gradleを通して利用する機能は基本的にプラグインというものを利用します。どのプラグインをどのように利用するのかは設定用スクリプトで定義します。

Gradleのメリット

設定をスクリプトで記述するために問題がある個所が明確になりやすいです。EclipseやVSCodeなどのgroovyやkotlinの解釈をしてくれるエディタを使っていれば、記述ミスを検知してくれます。

またjavaに文法が似たgroovyやKotlinで記述できるので、javaの開発をしている人にとっては学習コストが低く済む点もメリットです。

Gradleのデメリット

記述方法が柔軟すぎる点がデメリットにあげられます。スクリプトとして動作すればどんな順番で書いても良く、型が少ないためです。

また省略記法が豊富で、すでに出来上がっているGradle設定を新規参入者が見た時に分かりにくくなりがちな点もデメリットです。

Gradleで利用するファイル

Gradleを動作させるために必要なファイルとその役割を説明します。

build.gradle

Gradleにおけるメインの設定用スクリプトです。プロジェクト単位で作成し、利用するライブラリやパッケージの名称、パッケージ作成後のアップロード場所など、プロジェクト全体にかかわる設定を記述します。このファイルは特に重要なので、後の章でどのような設定項目があるのか詳細に説明します。

settings.gradle

マルチプロジェクトの管理を行うファイルです。マルチプロジェクト内のルートプロジェクトに配置して、どのフォルダをサブプロジェクトとして扱うかを定義してマルチプロジェクトの範囲と、各プロジェクトとのフォルダとしての位置関係の定義を担います。

gradle.properties

build.gradleやsettings.gradleで利用する変数をキーバリュー形式で定義できるファイルです。このファイルに記述する内容はほとんどが他のファイルで利用する変数の定義ですが、中には"org.gradle.jvmargs"といったJVM設定などgradleのビルドスクリプトが裏で勝手に読み取って設定を反映させることもあるので、どこで利用されているか分からない値を設定しているような場合は検索して確認しておきましょう。

重要用語解説

この後Gradleで設定可能な項目について説明をするのですが、その設定項目自体について正しく理解をするために必要な用語の解説を最初にします。

  • Task:ビルドのプロセスで実行される処理を小分けにしたもの。プログラミングでいう関数だと考えれば良い。複数のタスクが合わさってビルドが行われることもあれば、一つの大きなタスクでビルドが行われることもある。コンパイルだけでなくデプロイ、テスト実行、ドキュメント作成など様々な処理を設定可能。
  • Dependency:アプリケーションコードやテストコード、ビルドスクリプトが動作するときに利用するライブラリのこと。
  • plugin:ビルド時に利用できる追加機能。プラグイン名を指定してインポートすることで、そのプラグインの機能がビルドプロセスで使われる。
  • Repositories:PluginやDependencyの取得元を記述する。URLなどを記述できる。リモートリポジトリからだけでなくローカルにあるものも設定可能。複数の取得元を設定でき、上から順番にインポート対象のライブラリを探すことになる。

設定可能項目

Gradleで設定可能な項目のうち主要なものは以下です。

  • アプリケーションコードで利用するライブラリ
  • ビルド時に利用するライブラリ
  • 自動テストの実行有無
  • 品質チェック実行有無(コーディング規約に沿っているかや初期化されてない変数など潜在的なバグがないかの確認)

ここからは記述例も含めて具体的に説明します。

アプリケーションコードで利用するライブラリ

アプリケーションコードで利用するライブラリを指定できます。どこにあるものを使うのか、どのバージョンを利用するのかを定義できます。設定例は以下です。

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    testImplementation 'junit:junit:4.13.2'
}

dependenciesでアプリケーションコードで利用するライブラリを設定できます。implementationでは実際に動作するアプリケーションコードで利用するライブラリを、testImplementationではテスト時のみに利用するライブラリを指定しています。

このようにどのタイミングで利用するライブラリなのかも設定可能です。

ビルドで利用するプラグイン

ビルドに利用するプラグインを適用する方法は2つあります。1つ目がpluginsを利用するやり方。2つ目がapply plugin:です。

一つ目のpluginsではGradle Plugin Portalに公開されているプラグインの適用が可能です。以下がコード例です。

plugins {
    id 'org.springframework.boot' version '4.5.5'
    id 'java'
}

この例では特定のバージョンのspring bootとjavaを適用しています。Gradle Plugin Portalにはよく利用されるプラグインが大体あるので、基本この記載方法で問題ありません。

Gradle Plugin Portalに公開されていないマイナーなプラグインや自作のプラグインの場合にはpluginsは利用できないので、apply plugin:を利用する必要があります。またapply plugin:を利用する場合にはどこから持ってくるのかを明示する必要があります。以下がコード例です。

buildscript {
    repositories {
        maven()
    }
    dependencies {
        classpath 'com.someorg:myplugin:1.0.0'
    }
}

apply plugin: 'myplugin'

要素が多く少し複雑なのですが、やっていることは以下です。

  1. repositoriesにより、どこにあるリポジトリから情報を取得するのかを設定(この例だとMavenリポジトリ)
  2. dependenciesにより、どのリソースを利用可能にするか設定(repositoriesで設定したリポジトリから取得)
  3. apply pluginにより、ビルドに利用するプラグインを設定(dependenciesで設定したリソースから取得)

pluginsと比べるとかなりややこしいため、pluginsを利用できるならpluginsを利用しましょう。

自動テストの実行有無

Javaのプロジェクトではプロジェクト内のテストケースが実行されるようにデフォルトで設定されています。

これを無効にするには以下のような設定をします。

test {
    enabled = false
}

品質チェック実行有無

品質チェック用のプラグインを適用することで動作します。例として、コード規約に沿っているかチェックする"checkstyle"を適用するコードを載せます。

apply plugin: 'checkstyle'

この一行を追加するだけで、ビルド時にcheckstyleでの品質チェックが行われます。

より深く理解してもらうために少しだけ内部的な部分もお話ししておきます。Gradleによるビルド実行時には以下のタスクが実行されることがデフォルトで決まっています。

  1. コンパイル
  2. テスト
  3. 品質チェック
  4. パッケージング

品質チェックのタスクはcheckという名称なのですが、checkstyleを適用することによりcheckタスク実行時にcheckstyleを利用することが内部的に設定されます。このような動きによってcheckstyleプラグインを適用するだけでビルド時に利用されるようになるのです。

まとめ

Gradleは柔軟かつプラグインにより豊富な機能を利用することが出来る強力なビルド自動化ツールです。使いこなすことで開発に必要な工数を大幅に減らすことが出来ます。

時間をかけてでもプラグインや設定によって何ができるのかじっくり調べてみると良いでしょう。きっと長期的にみると良い結果になります。

ちょっと細かいけど知っておいた方が良いこと

最後に少し細かいのですが、知っておくと役に立つGradle関係の知識を共有します。

タスクの個別実行方法

Gradleではbuild.gradleでタスクをいくつもつくることが出来るのですが、それらをgradleコマンドを利用して個別に実行する方法をお伝えします。実行方法は以下です。

gradle タスク名

タスク名からタスクを特定するためにはbuild.gradleを参照できる場所である必要があるので、build.gradleを置いているプロジェクトのルートディレクトリで実行する必要があります。

gradlew

gradleをコマンドで実行するときにはgradleコマンドを利用します。しかし末尾にwがついかgradlewコマンドも存在します。この末尾のwはラッパー(wrapper)を意味しています。

この二つの違いは、システム全体で利用されるgradleかプロジェクトに設定されているgradleを利用するかです。gradlewを使うことでプロジェクト参加者全員が同じgradleを利用することが出来るようになるため、基本的にはgradlewを使います。またgradlewはプロジェクトのリポジトリに含むために、開発者はgradleを別途インストールする必要もなく楽です。

簡単にgradlewを利用できるようにするところから利用するまでを解説します。

  1. build.gradleでプロジェクトで利用するgradleのバージョンを指定する。例:wrapper {gradleVersion = '8.2’}
  2. wrapperタスクを実行する。実行方法:gradle wrapper
    これによりプロジェクト内にgradlewコマンドを実行するためのファイルが作成されます。
  3. gradlewコマンドを実行するためのファイルを共有
  4. 共有された開発者がgradlewコマンドを利用する。実行方法は以下。単純にフォルダにある実行可能なファイルを実行しているだけです。
    • windowsでは「gradlew.bat タスク名」
    • linuxでは「./gradlew タスク名」

参考


共有

私がフリーランスを始めてからずっとお世話になっているエージェント↓

レバテックフリーランス

抱えている案件数が大量なのでほんとに希望にあった会社を紹介してくれて助かります。

紹介してくれる企業数も大量でしたが、専用サイトにリスト形式で送られてきて気になる案件をぽちぽち選んでいくだけなので確認するのが簡単な点も嬉しいポイントです。他のエージェントさんだと1件1件メールやLINEで紹介するパターンもあり、返信が面倒でしたがそのようなことがありませんでした。

フリーランスを始める前の情報収集としての利用も歓迎しているので、フリーランスになる予定が具体的に決まっていなくてもどのような条件の案件があるか興味がある人にはおすすめです。

ちなみに私はリモートメインなので気にしなかったのですが、レバテックフリーランスは基本的に通勤手当が出ない(交渉すればもしかしたら出るかも)ので、もし出社するフリーランス案件を受けたいなら以下の出勤手当の出るエージェントがおすすめです。

midworks

私も登録していて担当の方にはとても親切に対応いただきましたし、フリーランス友達もこのエージェントを利用しているとのことだったので、登録して間違いないエージェントだと思います。

Javaframework,gradle

Posted by ラプラス