

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon S3 のキャッシュ
<a name="caching-s3"></a>

Amazon S3 キャッシュでは、複数のビルドホスト間で利用できるキャッシュを Amazon S3 バケットに保存します。これは、ダウンロードするよりも構築にコストがかかる小規模から中間ビルドアーティファクトに適したオプションです。

ビルドで Amazon S3 を使用するには、`buildspec.yml` にキャッシュするファイルのパスを指定できます。CodeBuild は、プロジェクトで設定された Amazon S3 の場所にキャッシュを自動的に保存し、更新します。ファイルパスを指定しない場合、CodeBuild はビルドの高速化に役立つ共通言語の依存関係をベストエフォートでキャッシュします。キャッシュの詳細は、ビルドログで表示できます。

さらに、複数のバージョンのキャッシュが必要な場合は、`buildspec.yml` でキャッシュキーを定義できます。CodeBuild はこのキャッシュキーのコンテキストにキャッシュを保存し、作成後に更新されない一意のキャッシュコピーを作成します。キャッシュキーはプロジェクト間で共有することもできます。動的キー、キャッシュバージョニング、ビルド間のキャッシュ共有などの機能は、キーが指定されている場合にのみ使用できます。

buildspec ファイルのキャッシュ構文の詳細については、buildspec リファレンスの「[キャッシュ](build-spec-ref.md#build-spec.cache)」を参照してください。

**Topics**
+ [

## 動的キーを生成する
](#caching-s3-dynamic)
+ [

## codebuild-hash-files
](#caching-s3-dynamic.codebuild-hash-files)
+ [

## キャッシュバージョン
](#caching-s3-version)
+ [

## プロジェクト間のキャッシュ共有
](#caching-s3-sharing)
+ [

## buildspec の例
](#caching-s3-examples)

## 動的キーを生成する
<a name="caching-s3-dynamic"></a>

キャッシュキーは、シェルコマンドと環境変数を含めて一意にし、キーが変更されたときの自動キャッシュ更新を有効にすることができます。たとえば、`package-lock.json` ファイルのハッシュを使用してキーを定義できます。そのファイルの依存関係が変更されると、ハッシュ、つまりキャッシュキーが変更され、新しいキャッシュの自動作成がトリガーされます。

```
cache:
    key: npm-key-$(codebuild-hash-files package-lock.json)
```

CodeBuild は式 `$(codebuild-hash-files package-lock.json)` を評価して最終的なキーを取得します。

```
npm-key-abc123
```

`CODEBUILD_RESOLVED_SOURCE_VERSION` などの環境変数を使用してキャッシュキーを定義することもできます。これにより、ソースが変更されるたびに新しいキーが生成され、新しいキャッシュが自動的に保存されます。

```
cache:
   key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION
```

CodeBuild は式を評価して最終的なキーを取得します。

```
npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369
```

## codebuild-hash-files
<a name="caching-s3-dynamic.codebuild-hash-files"></a>

`codebuild-hash-files` は、glob パターンを使用して CodeBuild ソースディレクトリ内の一連のファイルの SHA-256 ハッシュを計算する CLI ツールです。

```
codebuild-hash-files <glob-pattern-1> <glob-pattern-2> ...
```

次に `codebuild-hash-files` の使用例を示します。

```
codebuild-hash-files package-lock.json
codebuild-hash-files '**/*.md'
```

## キャッシュバージョン
<a name="caching-s3-version"></a>

キャッシュバージョンは、キャッシュされるディレクトリのパスから生成されるハッシュです。2 つのキャッシュのバージョンが異なる場合、それらはマッチングプロセス中に個別のキャッシュとして扱われます。たとえば、次の 2 つのキャッシュは異なるパスを参照するため、異なると見なされます。

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "pip-dependencies/**/*"
```

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target tmp/pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "tmp/pip-dependencies/**/*"
```

## プロジェクト間のキャッシュ共有
<a name="caching-s3-sharing"></a>

`cache` セクションにある `cacheNamespace` API フィールドを使用して、複数のプロジェクト間でキャッシュを共有できます。このフィールドでは、キャッシュの範囲が定義されます。キャッシュを共有するには、以下を行う必要があります。
+ 同じ `cacheNamespace` を使用する。
+ 同じキャッシュ `key` を指定する。
+ 同一のキャッシュパスを定義する。
+ 同じ Amazon S3 バケットを使用し、設定されている場合は `pathPrefix` を使用する。

これにより、一貫性が確保され、プロジェクト間でキャッシュ共有が可能になります。

### キャッシュ名前空間を指定する (コンソール)
<a name="caching-s3-sharing.console"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) で AWS CodeBuild コンソールを開きます。

1. **[プロジェクトを作成]** を選択します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。

1. [**アーティファクト**] で、[**追加設定**] を選択します。

1. [**キャッシュタイプ**] で、[**Amazon S3**] を選択します。

1. [**キャッシュ名前空間 - オプション**] で、名前空間の値を入力します。  
![\[CodeBuild コンソールで名前空間パラメータをキャッシュします。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. デフォルト値のまま続行し、**[ビルドプロジェクトを作成する]** を選択します。

### キャッシュ名前空間を指定する (AWS CLI)
<a name="caching-s3-sharing.cli"></a>

で `--cache`パラメータを使用して AWS CLI 、キャッシュ名前空間を指定できます。

```
--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'
```

## buildspec の例
<a name="caching-s3-examples"></a>

一般的な言語の buildspec の例を以下に示します。

**Topics**
+ [

### Node.js の依存関係をキャッシュする
](#caching-s3-examples.nodejs)
+ [

### Python の依存関係をキャッシュする
](#caching-s3-examples.python)
+ [

### Ruby の依存関係をキャッシュする
](#caching-s3-examples.ruby)
+ [

### Go の依存関係をキャッシュする
](#caching-s3-examples.go)

### Node.js の依存関係をキャッシュする
<a name="caching-s3-examples.nodejs"></a>

プロジェクトに `package-lock.json` ファイルが含まれており、`npm` を使用して Node.js の依存関係を管理する場合、次の例はキャッシュをセットアップする方法を示しています。デフォルトでは、`npm` は依存関係を `node_modules` ディレクトリにインストールします。

```
version: 0.2

phases:
  build:
    commands:
      - npm install
cache:
  key: npm-$(codebuild-hash-files package-lock.json)
  paths:
    - "node_modules/**/*"
```

### Python の依存関係をキャッシュする
<a name="caching-s3-examples.python"></a>

プロジェクトに `requirements.txt` ファイルが含まれており、pip を使用して Python の依存関係を管理する場合、次の例はキャッシュをセットアップする方法を示しています。デフォルトでは、pip はシステムの `site-packages` ディレクトリにパッケージをインストールします。

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"
```

さらに、依存関係を特定のディレクトリにインストールし、そのディレクトリのキャッシュを設定できます。

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt --target python-dependencies
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "python-dependencies/**/*"
```

### Ruby の依存関係をキャッシュする
<a name="caching-s3-examples.ruby"></a>

プロジェクトに `Gemfile.lock` ファイルが含まれており、`Bundler` を使用して gem の依存関係を管理する場合、次の例はキャッシュを効果的に設定する方法を示しています。

```
version: 0.2

phases:
  build:
    commands:
      - bundle install --path vendor/bundle
cache:
  key: ruby-$(codebuild-hash-files Gemfile.lock)
  paths:
    - "vendor/bundle/**/*"
```

### Go の依存関係をキャッシュする
<a name="caching-s3-examples.go"></a>

プロジェクトに `go.sum` ファイルが含まれており、Go モジュールを使用して依存関係を管理する場合、次の例はキャッシュを設定する方法を示しています。デフォルトでは、Go モジュールは `${GOPATH}/pkg/mod` ディレクトリにダウンロードされて保存されます。

```
version: 0.2

phases:
  build:
    commands:
      - go mod download
cache:
  key: go-$(codebuild-hash-files go.sum)
  paths:
    - "/go/pkg/mod/**/*"
```