こんにちは。最近GitHub Actionsをいじりはじめた、「みやまえゆたか」です。
GitHub Actionsには依存関係をキャッシュする機能があります。 -> 依存関係をキャッシュしてワークフローのスピードを上げる - GitHub ヘルプ
キャッシュするとどれくらい効果があるのか? 検証してみました。
実験1(Java + Gradle)
cache/examples.md · GitHub にならってワークフローを記述します。
環境は「Java & Gradle」です。
検証に使ったプロジェクトのキャッシュサイズ~/.gradle/caches/
は162Mでした。
name: TEST on: [push] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up JDK uses: actions/setup-java@v1 with: java-version: 11 - name: Grant execute permission for gradlew run: chmod +x gradlew # キャッシュする場合は以下を挿入 - uses: actions/cache@v1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles(‘**/*.gradle’) }} restore-keys: | ${{ runner.os }}-gradle- # ーーーーーーーーーーーーーーーー - name: Test with Gradle run: ./gradlew test - name: Caches size run: du -sh ~/.gradle/caches/
結果
キャッシュした場合と、しない場合。3回やってみます。
(※事前に1度実行し、キャッシュは生成済である)
1回目
- キャッシュなし: 1m05s
- キャッシュあり: 50s 🚀
2回目
- キャッシュなし: 1m08s
- キャッシュあり: 39s 🚀
3回目
- キャッシュなし: 1m17s
- キャッシュあり: 54s 🚀
「キャッシュする」 とパフォーマンスが上がるようです。
実験2 (Python + pip)
次の環境は「Python + pip」です。
requirements.txt
には、pandas
, numpy
, urllib3
などのライブラリを20個ほど記入しています。
キャッシュサイズ~/.cache/pip/
は61Mでした。
name: TEST on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python 3.8 uses: actions/setup-python@v1 with: python-version: 3.8 - name: Upgrade pip run: python -m pip install —-upgrade pip # キャッシュする場合は以下を挿入 - uses: actions/cache@v1 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles(‘**/requirements.txt’) }} restore-keys: | ${{ runner.os }}-pip- # ーーーーーーーーーーーーーーーー - name: Install dependencies run: pip install -r requirements.txt - name: Run python run: python test.py - name: Caches size run: du -sh ~/.cache/pip
test.py
にはprint(“test”)
とだけ記述してあります。
結果
1回目
- キャッシュなし: 34s 🚀
- キャッシュあり: 54s
2回目
- キャッシュなし: 37s 🚀
- キャッシュあり: 49s
3回目
- キャッシュなし: 45s 🚀
- キャッシュあり: 1m02s
ブレはありますが、「キャッシュする」 とパフォーマンスが下がりました。
結論
プロジェクトによってキャッシュの効果がある場合と、むしろ逆効果な場合がありました。
よって、uses: actions/cache
を加筆したワークフローと、していないワークフローを用意し、どちらが早くなるかを検証してみると良いと思います!!