ワークフロー依存関係のキャッシュについて
ワークフローの実行は、しばしば他の実行と同じ出力あるいはダウンロードされた依存関係を再利用します。 たとえばMaven、Gradle、npm、Yarnといったパッケージ及び依存関係管理ツールは、ダウンロードされた依存関係のローカルキャッシュを保持します。
GitHub でホストされるランナー上のジョブは、クリーンなランナー イメージで開始されるため、毎回依存関係をダウンロードする必要があり、その結果、ネットワーク使用量の増加、実行時間の長期化、コストの増加につながります。 依存関係などのファイルの再作成にかかる時間を短縮するために、 GitHub は、ワークフローで頻繁に使用するファイルをキャッシュできます。
メモ
セルフホステッド ランナーを使用する場合、ワークフロー実行のキャッシュは、 GitHub所有のクラウド ストレージに格納されます。 顧客所有のストレージ ソリューションは、 GitHub Enterprise Serverでのみ使用できます。
成果物と依存関係キャッシュの比較
成果物とキャッシュは、 GitHubにファイルを格納する機能を提供するため似ていますが、各機能は異なるユース ケースを提供し、同じ意味で使用することはできません。
- パッケージ管理システムによってダウンロードされた依存関係、中間ビルド出力、再生成にコストがかかるその他のファイルなど、ワークフローの実行間で頻繁に変更されないファイルを再利用する場合は、キャッシュを使用します。 これらのファイルをキャッシュするとワークフローの実行速度が向上しますが、キャッシュが使用できない場合、ジョブは常にこれらのファイルを再ダウンロードまたは再生成できる必要があります。
- ビルド バイナリやビルド ログなど、ワークフローの実行が終了した後に使用または表示するためにジョブによって生成されたファイルを保存する場合、またはワークフロー内のジョブ間でファイルを渡す場合は、アーティファクトを使用します。
ワークフロー実行の成果物について詳しくは、「ワークフロー成果物を使ったデータの格納と共有」をご覧ください。
キャッシュのセキュリティ
キャッシュは、ワークフローまたはジョブの ID ではなく、ワークフロー実行で使用されるブランチまたはタグに基づいて共有されます。 さまざまなワークフロー トリガーに使用されるブランチについては、 ワークフローをトリガーするイベント と GITHUB_REF を参照してください。 キャッシュを読み取ることができる実行では、その内容が as-is復元されるため、復元されたファイルは信頼されていない入力として扱い、シークレットやその他の機密データはキャッシュに格納しないでください。
信頼されていないワークフローは、フォークから pull_request がキャッシュを復元する場合など、機密性の高いキャッシュコンテンツを読み取ることができます。 有害なキャッシュは、信頼されたワークフローでコードが実行される可能性があります。 キャッシュポイズニングのリスクを制限するために、 GitHub は、低信頼トリガーに応答して実行されるワークフローに、既定のブランチのスコープ内のキャッシュへの読み取り専用アクセスを提供します。
キャッシュ スコープ、アクセス制限、キャッシュを安全に使用するためのベスト プラクティスの詳細については、 依存関係キャッシュのリファレンス を参照してください。
次のステップ
ワークフローに依存関係のキャッシュを実装するには、「依存関係キャッシュのリファレンス」を参照してください。