GitHub Actionsは、CI/CDパイプラインを自動化するための強力なツールですが、ビルドやテストの実行時間を短縮するためには、キャッシュの設定が非常に重要です。キャッシュを利用することで、依存関係のダウンロードやビルド結果の再生成を避け、効率的なワークフローを実現できます。
本記事では、GitHub Actionsでキャッシュを効率的に設定する方法について詳しく解説します。
1. キャッシュの基本概念
GitHub Actionsのキャッシュは、特定のファイルやデータを保存し、次回のワークフロー実行時に再利用するための仕組みです。これにより、毎回同じデータを生成する必要がなくなり、ビルド時間を大幅に短縮できます。キャッシュは、ユニークなキーによって識別され、特定のパスに保存されます。
キャッシュの利点
- ビルド時間の短縮
- 依存関係やビルド結果を再利用することで、実行時間を短縮できます。
- リソースの節約
- 不要なダウンロードを避けることで、ネットワーク帯域やストレージを節約できます。
- 効率的な開発
- 開発サイクルが短縮され、迅速なフィードバックが得られます。
2. キャッシュの設定方法
GitHub Actionsでキャッシュを設定するためには、actions/cache
アクションを使用します。このアクションを利用することで、特定のパスをキャッシュし、次回の実行時に復元することができます。
1. 基本的なキャッシュ設定
以下は、Node.jsプロジェクトでnpmの依存関係をキャッシュする基本的な設定例です。
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Cache node modules
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
この設定では、~/.npm
ディレクトリをキャッシュし、package-lock.json
のハッシュをキーとして使用しています。これにより、依存関係が変更された場合に新しいキャッシュが作成されます。
2. キャッシュの復元とキーの管理
キャッシュの復元は、指定したキーに基づいて行われます。キャッシュが見つからない場合、restore-keys
を使用して部分一致のキャッシュを検索することができます。これにより、キャッシュが存在しない場合でも、以前のキャッシュを利用できる可能性があります。
- name: Cache node modules
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
${{ runner.os }}-
この設定では、最初に完全一致のキャッシュを探し、見つからなければ部分一致のキャッシュを探します。
3. キャッシュのクリアと管理
キャッシュは自動的に管理されますが、必要に応じて手動でクリアすることもできます。キャッシュが古くなったり、不要になった場合は、GitHubのWebインターフェースやAPIを使用して削除できます。
1. Webインターフェースからの削除
GitHubリポジトリの「Settings」タブに移動し、「Actions」セクションの「Caches」からキャッシュを管理できます。ここから不要なキャッシュを選択して削除できます。
2. GitHub CLIを使用した削除
GitHub CLIを使用してキャッシュを削除することも可能です。以下のコマンドでキャッシュを一覧表示し、削除できます。
gh actions-cache list
gh actions-cache delete <cache-key>
これにより、特定のキャッシュを簡単に管理できます。
4. キャッシュのトラブルシューティング
キャッシュを設定する際には、いくつかのトラブルシューティングが必要になることがあります。以下は、一般的な問題とその解決策です。
1. キャッシュが見つからない
キャッシュが見つからない場合、以下の点を確認してください。
- キーの一致
- キャッシュキーが正しく設定されているか確認します。特に、ハッシュファイルのパスや名前が正しいかをチェックします。
- キャッシュの存在
- キャッシュが実際に存在するか、GitHubのWebインターフェースやCLIで確認します。
2. キャッシュのサイズ制限
GitHub Actionsのキャッシュにはサイズ制限があります。現在、1つのキャッシュは最大5GBまで保存できます。これを超えると、古いキャッシュが自動的に削除されることがあります。
3. キャッシュの競合
複数のブランチやプルリクエストで同じキャッシュキーを使用すると、キャッシュの競合が発生することがあります。この場合、異なるキーを使用するか、restore-keys
を適切に設定することで解決できます。
5. キャッシュのベストプラクティス
キャッシュを効率的に利用するためのベストプラクティスを以下に示します。
1. 適切なキャッシュキーの設定
キャッシュキーは、依存関係の変更に応じて更新されるように設定します。これにより、常に最新の依存関係がキャッシュされます。
2. 不要なキャッシュの削除
定期的に不要なキャッシュを削除し、ストレージを最適化します。特に、古いブランチやプルリクエストに関連するキャッシュは、不要になることが多いです。
3. セキュリティに配慮する
キャッシュには機密情報を保存しないようにします。特に、APIキーや認証情報が含まれるファイルはキャッシュしないように注意が必要です。
6. まとめ
GitHub Actionsでキャッシュを効率的に設定する方法について解説しました。キャッシュを利用することで、ビルド時間を短縮し、リソースを節約することができます。適切なキャッシュキーの設定や管理、トラブルシューティングの方法を理解することで、よりスムーズなCI/CDパイプラインを実現できるでしょう。これらのテクニックを活用して、GitHub Actionsを最大限に活用しましょう。