1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubActionsのキャッシュ化使ってJavaのbuild高速化してみた

Last updated at Posted at 2025-03-17

はじめに

こんにちは、Gakken LEAP のエンジニアの shogawa です。
現在自分が携わっているJavaのプロジェクトでは、ソースコードが肥大化(リファクタリングしろ!)しており、
GitHub Actionsでのbuild時に時間が掛かりすぎてしまう問題がありました。

例えばステージング環境にリリースするのにも、多少の待ち時間が発生してしまうので工数的にももったいないので、
それを解消するために実践したことを書いていきます。

前提

  • Javaプロジェクトで、GitHubActionsでbuildしている
  • buildツールは、gradleまたはmaven
     ※今回はgradleとmavenでやったのでそれの紹介です。

参考:GitHub 公式ドキュメント

修正前コード(抜粋)

元々のGitHubActionsは以下のようになっていました。
buildジョブがシンプルに ./gradlew bootWar(./mvnw package -DskipTests) してるだけです。
(いまだにJava8かよ。。。とかいうツッコミは禁止!)

jobs:
  build:
    runs-on: ubuntu-latest
    concurrency:
      group: build-app-stg
      cancel-in-progress: true
    environment: stg
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: 'corretto'
          java-version: '8'
      - name: build war
        id: builder
        run: |
          # gradleの場合
          ./gradlew bootWar
          # mavenの場合
          #./mvnw package -DskipTests

修正後コード(抜粋)

公式ドキュメントを参考に、build前にキャッシュ関連の設定を追加していきます。
cacheアクションでは、key, pathが必須で、keyにヒットしない場合も考慮してオプションのrestore-keysも設定しておきます。

設定値は公式ドキュメントを見つつ、プロジェクトに合わせた形で設定していきます。

修正後のGitHubActionsは以下の通り。

jobs:
  build:
    runs-on: ubuntu-latest
    concurrency:
      group: build-app-stg
      cancel-in-progress: true
    environment: stg
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: 'corretto'
          java-version: '8'
+      # Gradleキャッシュの設定
+      - name: Cache Gradle dependencies
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.gradle/caches
+            ~/.gradle/wrapper
+          key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
+          restore-keys: |
+            gradle-${{ runner.os }}-
+      # Gradleキャッシュの設定ここまで
+      # Mavenキャッシュの設定
+      - name: Cache Maven repository
+        uses: actions/cache@v4
+        with:
+          path: ~/.m2/repository
+          key: maven-${{ runner.os }}-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            maven-${{ runner.os }}-
+      # Mavenキャッシュの設定ここまで
      - name: build war
        id: builder
        run: |
          # gradleの場合
          ./gradlew bootWar
          # mavenの場合
          #./mvnw package -DskipTests

実際の動作

キャッシュ設定をする前と後でどれくらいの速度の違いが出るのかを確認してみます。

image.png

buildジョブの実行時間に着目すると、
修正前は[8m31s]掛かっていたものが、
修正後は[1m27s]とおよそ7分の短縮に繋がりました!

エンジニア募集中

Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています!!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?