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?

【GitHub Actions】キャッシュ

Posted at

はじめに

※6月26日に投稿予定でしたが、GitHub Actions のコードを変更したことで投稿できていなかったので、まとめて投稿します

こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。

GitHub ActionsでCIを回すたびに bundle installnpm install を毎回実行して時間がかかっていませんか?
その悩み、キャッシュ機能(actions/cache)を使えば解決できます。

この記事では、GitHub Actionsにおけるキャッシュの基本的な仕組みから、Rubyプロジェクトでの使い方(bundler-cache: trueを含む)を解説します。

キャッシュとは?

GitHub Actionsのキャッシュとは、依存ファイルなどの重い処理結果を保存して、次回以降のワークフローで再利用する仕組みです。

Rubyプロジェクトであれば、vendor/bundleにインストールされたgemをキャッシュすることで、次回の bundle install を大幅に高速化できます。

基本構文(手動でキャッシュを使う)

- name: Cache Ruby gems
  uses: actions/cache@v3
  with:
    path: vendor/bundle
    key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
    restore-keys: |
      ${{ runner.os }}-gems-

各項目の意味

項目 説明
uses: actions/cache@v3 GitHub提供のキャッシュアクションを使う
path キャッシュしたいディレクトリ。ここでは vendor/bundle
key キャッシュを識別するための固有キー。Gemfile.lockのハッシュで依存変更を検出
restore-keys keyにマッチしなかったときに、部分一致で使える予備キャッシュ

キャッシュの流れ

  1. keyで完全一致するキャッシュがあれば復元
  2. 見つからなければ、restore-keysの接頭一致キーを使う
  3. ジョブが成功した場合、現在の keyでキャッシュを保存

bundler-cache: trueの便利さ

Ruby用の ruby/setup-rubyアクションには、Bundler用キャッシュを自動で行ってくれるオプションがあります。

- uses: ruby/setup-ruby@v1
  with:
    ruby-version: 3.3
    bundler-cache: true

これがやってくれること

  • bundle configの設定
  • bundle installの実行
  • vendor/bundleのキャッシュ
  • Gemfile.lockをキーにしたキャッシュキーの自動生成
  • actions/cacheを内部で使う

どちらを使えばいい?

比較項目 bundler-cache: true 手動で actions/cache
記載量 少ない(1行で完結) 多め(key, pathなど手動指定)
メンテナンス性 高い 精粋な調整が必要
カスタマイズ性 低め 高い
デバッグ性 見えにくい 分かりやすい

基本的には bundler-cache: trueを使うのが便利ですが、複数キャッシュを使いたい場合や、動作分析したい場合は手動で指定すると良いでしょう。

実践例:Ruby on Rails CI

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.3
          bundler-cache: true
      - run: bin/rails db:schema:load
      - run: bin/rake

注意点

  • Gemfile.lockを必ずコミットする
  • キャッシュの保存はジョブ成功時のみ
  • Freeプランは1リポジトリのキャッシュ上限が10GB

まとめ

項目 ポイント
キャッシュとは 重い処理結果を保存して再利用する機能
actions/cache@v3 手動でキャッシュパスやキーを指定する自由度の高い方法
bundler-cache: true Ruby特化の簡潔なキャッシュ設定
使い分けのコツ 簡易なCIなら bundler-cache: true、カスタマイズしたいなら手動設定

CIを高速化し、開発体験を良くするためにも、キャッシュは非常に重要な要素です。
まずは bundler-cache: trueから始め、必要に応じて手動設定へ発展していきましょう。

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?