GitHub Actions は CI/CD パイプラインの自動化に不可欠なツールで、Go の開発者にも大変便利です。特に、依存ライブラリのキャッシュはプロジェクトの CI/CD 時間を短縮し、開発効率を向上させるために重要な機能です。最近リリースされた GitHub Actions のactions/setup-go@v4では、キャッシュ機能が組み込まれるようになりました。
この記事では setup-go の v3 と v4 におけるキャッシュ方法の違いに焦点を当てて紹介します。
setup-go@v3 におけるキャッシュ方法
v3 では以下のようにactions/cacheと組み合わせる必要がありました。
steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: go-version: "1.20" - name: Cache Go modules id: cache-go uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download Go modules shell: bash if: ${{ steps.cache-go.outputs.cache-hit != 'true' }} run: go mod download
キャッシュがヒットしたかどうか知りたい場合は actions/cache を使う部分に id
を指定して後続の処理で steps.ID.outputs.cache-hit
を見ることで条件分岐ができます。
キャッシュの Key や Path などを正しく理解して設定してあげる必要があり、GitHub Actions に慣れていないと何をやっているのか見ただけで理解するのは難しいと思います。すべての開発者が CI/CD に興味があるわけではないので、ついメンテナンスが滞ってしまったり間違った設定でキャッシュされないまま運用されていたりすることもあります。
では v4 ではどのように改善されたのでしょうか?
setup-go@v4 におけるキャッシュ方法
v4 からはtoolkit/cacheを組み込むようになったので actions/cache を使う必要がなくなりました。
steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 id: setup-go with: go-version-file: "go.mod" - name: Download Go modules shell: bash if: ${{ steps.setup-go.outputs.cache-hit != 'true' }} run: go mod download
キャッシュ機構が組み込みになったことでかなりスッキリしました。cache-hit
についても提供されているため、従来通りキャッシュの有無に応じて処理を変えることも可能です。
詳細は setup-go のREADMEやaction.ymlをご確認ください。
まとめ
簡単ではありますが setup-go の v4 からキャッシュ機構が組み込まれたことを紹介させていただきました。v3 までは「キャッシュをする」と意識して明示的に記述しなければいけませんでしたが、v4 からは意識せずにキャッシュが組み込まれるようになりました。CI/CD はどうしても属人化しやすい分野だと感じているので推奨設定がデフォルトで有効になるというのは非常に嬉しいです。
この記事をきっかけに放置気味になってしまっている CI/CD の設定を見直す機会になれば幸いです。