33
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gradleってなんだろう?

Posted at

javaのビルド周りに興味をもったので、その時のメモ。

Gradleとは

javaのビルドツールで jarファイル(javaのバイトコードファイルや画像をzipファイル形式で一つにまとめたもの)
へのビルドをしてくれます。
mavenと違い、設定ファイルはgrovyという言語で書きます。

また、gradleを毎回インストールすることがないように、gradle wrapper というものを作り、
これを配布することで、gradleをインストールしていない環境でもgradle を使うことが出来ます。

Gradle 初期化

簡単なgradleプロジェクトを作ります。

gradle init

これで色々ファイルが作られます。具体的には以下の感じ

├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

依存性解決

gradleはjavaの外部のパッケージを管理して、自身ののプロジェクトでそのパッケージを使えるようにしてくれます。

dependencies {
    implemention("パッケージ名")
}

タスク

gradleにおけるタスクとは,公式から引用すると、ビルドを行うための細かい作業とのことです。

組み込みのタスク

このタスクはgradleのプロジェクトが生成された時点でいくつか作られています。
例えば、テスト、ビルド、実行などです。

これらは、

gradle tasks

で一覧を見ることが出来ます。

タスクの定義

これは、自分で定義できるので、簡単なタスクを定義してみましょう。

task hello {
    println("hello")
}

実行してみよう。

gradle hello

#以下のが表示されるはず
#hello
#:hello UP-TO-DATE

こんな感じでタスクを作って、内部でプラグインの設定や特定のタスクのみを束にしておくことが出来ます。

タスクをアクションで構成する

タスクは自分が実行スべきタスクをアクションという単位で認識していて、それを配列として順次実行していきます。

アクションは
doFirst:先頭に追加する
doLast: 末尾に追加する

といった形で追加していきます。

task hello{
    hello.doFirst {
        println "hello1"
        println "hello2"
    }
    hello.doLast {
        println "hello3"
        println "hello4"
    }
}

これを実行すると

gradle hello

結果は

:hello
hello1
hello2
hello3
hello4

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

となる。

こんな形で実行順序を制御して、処理順序をカスタマイズすることができます。

gradleのtips

これまででざっくりとgradleの使い方を触ってきましたが、今度は各々のタスクが早くなる設定や分析ための便利な機能を見ていきたいと思います。

並列化

graleは基本的にタスクを一つずつしか実行していきません。ですが、
並列実行を強制する設定があります。
なお、これは完全に独立しているタスクを並列実行するので、依存関係があるものに関してはこれまでどおり逐次実行されます。

gradle.propertiesに以下を追加します。

org.gradle.parallel=true

プロファイリング

gradleにはタスク実行時にどのくらい時間を使ったか、並列実行したかなどをプロファイリングして、視覚化してくれる機能があります。
これはタスクの実行時に --scan をつければ、実行後にCLIにURLが表示され、そこから確認ができます。

ただ、これにはgradleでメールアドレスの登録などが必要なため、情報管理的な部分を考える必要があります。

screenshot-scans.gradle.com-2020.03.20-12_00_39.png

このプロファイリングは結構便利で、テストの重い部分やサジェストなど、ビルドの効率化に重要な情報を得ることができます。

参考

最後に

gradleは設定ファイルが、独自言語だったりしますが、その言語にさえ慣れてしまえば設定は読みやすいし、
タスクの設定も細かく行える印象です。

また、ビルド時のプロファイリングなど、検証と改善の昨日も揃っているところもいいです。

それでは良いgradleライフを

33
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?