メインコンテンツまでスキップ

キーベースのキャッシュの使用

キーベースキャッシュでは、一緒に使用する必要のある2つのStepsが必要です:

  • Save Cache: キーで識別されるキャッシュアーカイブにビルドファイルを保存します。
  • Restore Cache: キーで識別されるキャッシュアーカイブからビルドファイルを復元します。
専用のキーベースキャッシュSteps

npmやyarnの依存関係をキャッシュするには、Save NPM Cacheなどの専用のキーベースキャッシュStepsを使用できます。

専用のキーベースキャッシュStepsの完全な一覧については、依存関係マネージャー向けの専用キャッシュStepsをご覧ください。

Stepsはどちらも、キー文字列を使用してキャッシュアーカイブにアクセスします。これらのキーは、Cache keys Step inputの値として指定する必要があります。各キーは個別のキャッシュアーカイブを識別します。

キャッシュの保持と削除ポリシーClick to copy link​

キャッシュエントリは、最後に使用されてから7日間保持されます。ワークフローで7日間連続して使用されない場合、自動的に削除されます。

キャッシュストレージの許容量を超えた場合、アプリ上のLeast Recently Used(LRU)キャッシュエントリは、新しく生成されたものに置き換えられます。LRUは、新しいデータのために領域を確保するために、最も使用されていないデータを削除するキャッシュ置換アルゴリズムです。置き換えられたキャッシュエントリがWorkflowsで必要とされる場合、キャッシュヒット率が低下する可能性があります。Workflowsに必要なキャッシュエントリを失わないように、より多くのストレージを確保するために上位プランへのアップグレードをお勧めします。

新しいキャッシュアーカイブの作成Click to copy link​

  1. Workflowの最後にSave Cache Stepを追加します。

  2. Cache key inputでcache keyを定義します。このキーはキャッシュアーカイブを識別するために使用されます。

    キーの制限事項

    cache keyの最大長は512文字です(それより長いキーは切り詰められます)。キーにカンマ(,)を使用することはできません。

    テンプレートと関数を使用すると、ビルド環境やその他の要因に応じて変化する動的なキーを作成できます。

    動的キーを使用した条件付きキャッシュ

    Stepを設定して、ビルド中にコンテンツが変更されていない場合に、キャッシュのアーカイブ化とアップロードを自動的にスキップさせることができます。詳細は条件付きキャッシュをご覧ください。

    OSを参照するキーを使用して新しいキャッシュアーカイブを作成する

    この例では、build machineのオペレーティングシステムの種類を参照するキーを使用してキャッシュアーカイブを作成します。

    - save-cache@1:
    inputs:
    - key: |-
    npm-cache-{{ .OS }}
  3. Paths to cache inputで、キャッシュするファイルとフォルダを定義します。

    この入力ではワイルドカード*および**を使用できます。入力値は実行時に評価されます。

    アーカイブサイズの上限

    1つのキャッシュアーカイブのサイズは15GBを超えることはできません。

    node_modulesフォルダ内のすべてのファイルとフォルダを再帰的にキャッシュする
    - save-cache@1:
    inputs:
    - key: |-
    npm-cache-{{ .OS }}
    - paths: node_modules/

キャッシュアーカイブが作成されたら、App Settingsページでアクセスできます。詳細はキーベースキャッシュアーカイブへのアクセスをご覧ください。

既存のキャッシュアーカイブの復元Click to copy link​

  1. Workflowの最初にRestore Cache Stepを追加します。

  2. Cache key inputに、復元したいキャッシュのキーを入力します。

    テンプレートと関数を使用すると、ビルド環境やその他の要因に応じて変化する動的なキーを作成できます。

    複数のキーを指定できます。Stepはそれらを順番に評価し、最初に一致したものを選択します。詳細はキャッシュアーカイブのキー照合をご覧ください。

    2つのキーのいずれかからキャッシュアーカイブを復元する

    この例では、2つのキーのいずれかを使用して復元します:

    • まず、現在のWorkflowの名前を含むキーを持つキャッシュアーカイブを探します。たとえば、現在のWorkflowの名前がprimaryの場合、Stepはキーnpm-cache-primaryを持つアーカイブを探します。
    • 次に、現在のブランチの名前を含むキーを持つアーカイブを探します。たとえば、現在のブランチの名前がmainの場合、Stepはキーnpm-cache-mainを持つアーカイブを探します。
    - restore-cache@1:
    inputs:
    - key: |-
    npm-cache-{{ .Workflow }}
    npm-cache-{{ .Branch }}

キーベースキャッシュのテンプレートと関数Click to copy link​

キーベースキャッシュのStepsはどちらも、Step inputs内でテンプレート要素を使用できます。Stepsは実行時にキーテンプレートを評価し、使用される最終的なcache keyはビルド環境やリポジトリ内の特定のファイルによって変化する場合があります。

利用可能なキャッシュテンプレートClick to copy link​

Template expressionDefinitionPossible values
cache-key-{{ .Branch }}ビルドが実行されている現在のgitブランチ。アプリに存在する任意のブランチの正確な名前。
cache-key-{{ .CommitHash }}ビルドが実行されているgitコミットのSHA-256ハッシュ。既存の任意のコミットハッシュ。
cache-key-{{ .Workflow }}現在のBitriseワークフロー名(例:primary)。アプリに存在する任意のWorkflowの正確な名前。
{{ .OS }}-cache-keyビルドstackの現在のオペレーティングシステム(linuxまたはdarwin)。- linux:Linuxベースのstack向け。 - darwin:macOSベースのstack向け。

キャッシュテンプレートでの関数の使用Click to copy link​

キーベースキャッシュのテンプレートでは、2つの異なる関数を使用できます:

  • checksum:この関数は、1つまたは複数のファイルの内容のSHA-256チェックサムを計算します。これは、キャッシュするコンテンツを記述するファイルに基づいて一意のcache keysを作成する場合に役立ちます。以下の例を参照してください。
  • getenv:この関数は、環境変数(Env Var)の値を返します。変数が定義されていない場合は空の文字列を返します。以下の例を参照してください。
checksum関数の使用

checksum関数を使用して、package-lock.jsonファイルのチェックサムを計算するキーを作成します:

- save-cache@1:
inputs:
- key: npm-cache-{{ checksum "package-lock.json" }}
- paths: node_modules

checksum関数を使用して、任意の.gradleファイルおよびgradle.propertiesファイルのチェックサムを計算するキーを作成します:

- save-cache@1:
inputs:
- key: gradle-cache-{{ checksum "**/*.gradle*" "gradle.properties" }}
- paths: AndroidApp
getenv関数の使用

getenv関数を使用して、BITRISE_BUILD_NUMBER Env Varの値を含むキーを作成します。

- save-cache@1:
inputs:
- key: npm-cache-{{ getenv "BITRISE_BUILD_NUMBER" }}
- paths: node_modules

キャッシュアーカイブのキー照合Click to copy link​

キーベースキャッシュのStepsのCache keys inputには、複数のキーを定義できます。追加のキーは、1行に1つずつ記述することで指定できます。このリストは優先順位順になっており、Stepはまず指定した最初のキーの一致を試み、そのキーに対応するキャッシュが保存されていない場合は、2番目のキーの一致を試みます(以降も同様です)。

inputs:
key: |
key-1
key-2
key-3

複数のキーを列挙するだけでなく、各キーは保存されたcache keyの接頭辞であっても、一致するキャッシュアーカイブを取得できます。たとえば、キーmy-cache-は、キーmy-cache-a6a102ffで保存された既存のアーカイブと一致する場合があります。最初のキーをチェックサムキーと完全一致させ、フォールバックとしてより汎用的な接頭辞キーを使用するようにキーを設定することをお勧めします:

inputs:
key: |
npm-cache-{{ checksum "package-lock.json" }}
npm-cache-

動的キーを使用した条件付きキャッシュの利用Click to copy link​

ビルドを実行するたびにキャッシュアーカイブを更新したくない場合があります。キャッシュをスキップすることで、次のことができます:

  • 誤ったビルドデータをキャッシュに保存することを回避する。
  • PRの検証ワークフローを高速化する。
  • 保存および転送されるデータ量を制限する。

ビルド中にキャッシュされたコンテンツがまったく変更されなかった場合、Save cache Stepはキャッシュの圧縮とアップロードを自動的にスキップできます。これを機能させるには、キャッシュの内容が変更されるたびに変化する一意のcache keyをキャッシュアーカイブに設定する必要があります。実際には、チェックサムを使用した動的キーと、キャッシュ対象のコンテンツを記述するファイルが必要です。チェックサムはファイルの内容に基づいて計算されるため、ファイルが変更されなければチェックサムも変更されません。

この機能を活用できるようにStepを設定することを強くお勧めします。以下の手順に従うか、このセクションの最後にあるYAMLの例まで読み進めてください。

Save cache Stepを完全にスキップする

キャッシュ対象のコンテンツが変更された場合でもキャッシュアーカイブを更新したくない場合は、WorkflowからSave cache Stepを削除するか、Stepに条件を設定できます。詳細はStepを条件付きで有効化・無効化するをご覧ください。

  1. Bitrise にアクセスして Log in、左側の Bitrise CI を選択し、プロジェクトを選択します。

  2. メインページの Workflows ボタンをクリックします。

  3. Workflowを開き、Save cache Stepを選択します。

  4. Unique cache key inputをtrueに設定します。

    inputがfalseに設定されている場合でも、Stepはキャッシュのアップロードをスキップできますが、チェックサムを計算するためにまずキャッシュアーカイブを作成する必要があります。これには時間がかかります。

  5. Cache key inputで、キャッシュ対象のコンテンツを記述するファイルのチェックサムを含むキーを作成します。

    たとえば、npm-cache-{{ checksum "package-lock.json" }}はpackage-lock.jsonファイルが変更されない限り変化しない動的キーです。

  6. Restore cache StepのCache keys inputに、同じ動的キーを追加します。

すべてが正しく設定されていれば、2つのキャッシュStepsのキーが一致する場合、キャッシュアーカイブは更新されません。

チェックサムを使用した動的キーのYAML例

この例では、cache keyが任意の.gradleファイルおよびgradle.propertiesファイルのチェックサムを計算します。Restore cacheとSave cache Stepはどちらも同じcache keyを探します:

workflows:
caching:
steps:
- restore-cache@1:
inputs:
- key: gradle-cache-{{ checksum "**/*.gradle*" "gradle.properties" }}
- save-cache@1:
inputs:
- key: gradle-cache-{{ checksum "**/*.gradle*" "gradle.properties" }}
- is_key_unique: 'true'