1. 概要

ビルドキャッシュを使用すると、コードビルドプロセスが高速化されるため、開発者の生産性が向上します。 この記事では、Gradleビルドキャッシュの基本について学習します。

2. Gradleビルドキャッシュとは何ですか?

Gradleビルドキャッシュは、ビルドタスクの出力を保存する半永久的なストレージです。 これにより、以前のビルドですでに生成されたアーティファクトを再利用できます。 Gradleビルドキャッシュの背後にある指針となる原則は、入力が変更されない限り、すでにビルドされているタスクの再構築を回避することです。このようにして、後続のビルドを完了する時間が短縮されます。

Gradleでは、ビルドキャッシュキーがアーティファクトまたはタスク出力を一意に識別します。タスクを実行する前に、Gradleはタスクへの各入力をハッシュすることによってキャッシュキーを計算します。 次に、リモートキャッシュまたはローカルキャッシュを調べて、計算されたキャッシュキーに対応するタスク出力がすでに存在するかどうかを確認します。 存在しない場合、タスクが実行されます。 それ以外の場合、Gradleは既存のタスク出力を再利用します。

それでは、2種類のGradleビルドキャッシュを見てみましょう。

2.1. ローカルビルドキャッシュ

ローカルビルドキャッシュは、システムディレクトリを使用してタスク出力を保存します。 デフォルトの場所は、$ USER_HOME / .gradle /cachesを指すGradleユーザーのホームディレクトリです。 システムでビルドを実行するたびに、アーティファクトがここに保存されます。 デフォルトで有効になっており、その場所は構成可能です。

2.2. リモートビルドキャッシュ

リモートキャッシュは共有ビルドキャッシュです。 リモートキャッシュからの読み取りとリモートキャッシュへの書き込みは、HTTPを介して行われます。 リモートキャッシュの最も一般的なユースケースの1つは、継続的インテグレーションビルドです。 クリーンビルドのたびに、CIサーバーはリモートキャッシュにデータを入力します。 そのため、変更されたコンポーネントは再構築されないため、CIビルドが高速化されます。 さらに、タスク出力はCIエージェント間で共有することもできます。 リモートキャッシュはデフォルトで有効になっていません。

リモートキャッシュとローカルキャッシュの両方が有効になっている場合、ビルド出力は最初にローカルキャッシュでチェックされます。 出力がローカルキャッシュに存在しない場合は、リモートキャッシュからダウンロードされ、ローカルキャッシュにも保存されます。 次に、次のビルドで、同じタスク出力がローカルキャッシュから取得され、ビルドプロセスが高速化されます。

3. Gradleビルドキャッシュの構成

settings.gradleファイルにSettings.build-cacheブロックを指定することで、キャッシュを構成できます。 ここでは、構成の記述にGroovyクロージャを使用しています。 さまざまなタイプのキャッシュを構成する方法を見てみましょう。

3.1. ローカルビルドキャッシュの構成

settings.gradleファイルにローカルビルドキャッシュ構成を追加しましょう。

buildCache {
    local {
        directory = new File(rootDir, 'build-cache')
        removeUnusedEntriesAfterDays = 30
    }
}

上記のコードブロックで、ディレクトリオブジェクトは、ビルド出力を格納する場所を表します。 ここで、 rootDir 変数は、プロジェクトのルートディレクトリを表します。 ディレクトリオブジェクトを変更して、別の場所を指すようにすることもできます。

スペースを節約するために、ローカルビルドキャッシュは、指定された期間使用されていないエントリも定期的に削除します。プロパティ removeUnusedEntriesAfterDays は、その後の日数を構成するために使用されます未使用のアーティファクトはローカルキャッシュから削除されます。 デフォルト値は7日です。

$ USER_HOME / .gradle / cachesフォルダーからエントリを削除して手動でクリーンアップすることもできます。Linuxシステムでは、rmコマンドを使用してディレクトリをクリーンアップできます。

rm -r $HOME/.gradle/caches

いくつかの追加のプロパティを構成することもできます。 たとえば、 enabled は、ローカルキャッシュが有効かどうかを表すブールプロパティです。 pushプロパティがtrueに設定されている場合、ビルド出力はキャッシュに保存されます。 その値は、デフォルトでローカルビルドキャッシュに対してtrueです。

3.2. リモートキャッシュの構成

settings.gradleファイルにbuildCacheブロックを追加して、リモートキャッシュを構成しましょう。

リモートキャッシュの場合、URLの形式で場所を指定し、それにアクセスするにはユーザー名パスワードを指定する必要があります。

buildCache {
    remote(HttpBuildCache) {
        url = 'https://example.com:8123/cache/'
        credentials {
            username = 'build-cache-user-name'
            password = 'build-cache-password'
        }
    }
}

4. Gradleビルドキャッシュを使用する利点

次に、Gradleビルドキャッシュを使用する利点のいくつかを見てみましょう。

  • ビルド時間を短縮することで、開発者の生産性を向上させることができます。
  • 入力が変更されていない場合はタスク出力が再利用されるため、バージョン管理ブランチ間を行ったり来たりする際のビルド時間を短縮するのにも役立ちます。
  • リモートキャッシュを使用すると、ビルドを生成するためにCIエージェントが実行する必要のある作業量を大幅に減らすことができます。 これにより、CIビルドに必要なインフラストラクチャも削減されます。
  • リモートキャッシュからの結果がローカルキャッシュに保存されるため、CIマシンでのネットワーク使用量が削減されます。
  • リモートキャッシュは、開発者間で結果を共有するのに役立ちます。 これにより、同じプロジェクトで作業している他の開発者がローカルで行った変更を再構築する必要がなくなります。
  • リモートキャッシュは、CIエージェント間でビルドを共有することもできます。
  • ビルド時間が短縮されると、フィードバックサイクルが速くなります。 したがって、ビルドはより頻繁に生成されます。 その結果、これによりソフトウェアの品質が向上する可能性があります。

5. 結論

この記事では、Gradleビルドキャッシュと、それがビルドプロセスをどのように高速化するかについて学びました。 また、さまざまなタイプとその構成についても説明しました。 最後に、Gradleビルドキャッシュの利点について説明しました。