Skip to main content

依存関係のキャッシュ

ワークフローの速度と効率のための依存関係のキャッシュについて説明します。

ワークフロー依存関係のキャッシュについて

ワークフローの実行は、しばしば他の実行と同じ出力あるいはダウンロードされた依存関係を再利用します。 たとえばMaven、Gradle、npm、Yarnといったパッケージ及び依存関係管理ツールは、ダウンロードされた依存関係のローカルキャッシュを保持します。

依存関係などのファイルの再作成にかかる時間を短縮するために、 GitHub は、ワークフローで頻繁に使用するファイルをキャッシュできます。

成果物と依存関係キャッシュの比較

成果物とキャッシュは、 GitHubにファイルを格納する機能を提供するため似ていますが、各機能は異なるユース ケースを提供し、同じ意味で使用することはできません。

  • パッケージ管理システムによってダウンロードされた依存関係、中間ビルド出力、再生成にコストがかかるその他のファイルなど、ワークフローの実行間で頻繁に変更されないファイルを再利用する場合は、キャッシュを使用します。 これらのファイルをキャッシュするとワークフローの実行速度が向上しますが、キャッシュが使用できない場合、ジョブは常にこれらのファイルを再ダウンロードまたは再生成できる必要があります。
  • ビルド バイナリやビルド ログなど、ワークフローの実行が終了した後に使用または表示するためにジョブによって生成されたファイルを保存する場合、またはワークフロー内のジョブ間でファイルを渡す場合は、アーティファクトを使用します。

ワークフロー実行の成果物について詳しくは、「ワークフロー成果物を使ったデータの格納と共有」をご覧ください。

キャッシュのセキュリティ

キャッシュは、ワークフローまたはジョブの ID ではなく、ワークフロー実行で使用されるブランチまたはタグに基づいて共有されます。 さまざまなワークフロー トリガーに使用されるブランチについては、 ワークフローをトリガーするイベントGITHUB_REF を参照してください。 キャッシュを読み取ることができる実行では、その内容が as-is復元されるため、復元されたファイルは信頼されていない入力として扱い、シークレットやその他の機密データはキャッシュに格納しないでください。

信頼されていないワークフローは、フォークから pull_request がキャッシュを復元する場合など、機密性の高いキャッシュコンテンツを読み取ることができます。 有害なキャッシュは、信頼されたワークフローでコードが実行される可能性があります。 キャッシュポイズニングのリスクを制限するために、 GitHub は、低信頼トリガーに応答して実行されるワークフローに、既定のブランチのスコープ内のキャッシュへの読み取り専用アクセスを提供します。

キャッシュ スコープ、アクセス制限、キャッシュを安全に使用するためのベスト プラクティスの詳細については、 依存関係キャッシュのリファレンス を参照してください。

次のステップ

ワークフローに依存関係のキャッシュを実装するには、「依存関係キャッシュのリファレンス」を参照してください。