

Amazon CodeCatalyst は新規のお客様には提供されなくなりました。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[CodeCatalyst から移行する方法](migration.md)」を参照してください。

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

# アップストリームリポジトリを持つパッケージバージョンのリクエスト
<a name="packages-upstream-repositories-request"></a>

次の例は、パッケージマネージャーがアップストリームリポジトリを持つ CodeCatalyst パッケージリポジトリからパッケージをリクエストする場合のシナリオを示しています。

この例では、`npm` のようなパッケージマネージャーが、複数のアップストリームリポジトリを持つ `downstream` という名前のパッケージリポジトリからパッケージバージョンをリクエストします。パッケージがリクエストされると、次のことが発生する可能性があります。
+  リクエストされたパッケージバージョンが`downstream`に含まれる場合、クライアントにリターンされます。
+  リクエストされたパッケージバージョンが `downstream` にない場合、CodeCatalyst は `downstream` のアップストリームリポジトリでこのパッケージバージョンを検索します。パッケージバージョンが見つかると、そのバージョンへのリファレンスが`downstream`にコピーされます、そしてパッケージのバージョンがクライアントに返されます。
+  `downstream` にもそのアップストリームリポジトリにもパッケージバージョンがない場合、クライアントには HTTP 404 `Not Found` レスポンスが返されます。

 1 つのリポジトリに許可される直接アップストリームリポジトリの最大数は 10 です。CodeCatalyst がパッケージバージョンがリクエストされた際に検索するリポジトリの最大数は 25 です。

## アップストリームリポジトリからのパッケージの保持
<a name="package-retention-upstream-repos"></a>

リクエストされたパッケージバージョンが、アップストリームリポジトリで見つかった場合、そのバージョンのリファレンスは保持され、リクエスト元のダウンストリームリポジトリで常時利用できます。これにより、アップストリームリポジトリが予期せず停止した場合でも、パッケージにアクセスできます。保持されたパッケージバージョンは、次のいずれの影響も受けません: 
+  アップストリームリポジトリの削除。
+  アップストリームリポジトリのダウンストリームリポジトリからの切断。
+  アップストリームリポジトリからのパッケージバージョンの削除。
+  アップストリームリポジトリのパッケージバージョンの編集（例えば、新しいアセットを追加するなど）。

## アップストリームの関係を通じてパッケージを取得する
<a name="fetching-packages-through-an-upstream-relationship"></a>

CodeCatalyst は、アップストリームリポジトリと呼ばれる複数のリンクされたリポジトリを介してパッケージを取得できます。CodeCatalyst パッケージリポジトリが、ゲートウェイリポジトリへのアップストリーム接続を持つ別の CodeCatalyst パッケージリポジトリへのアップストリーム接続を持っている場合、アップストリームリポジトリにないパッケージのリクエストは、外部リポジトリからコピーされます。例えば、`repo-A` という名前のリポジトリにゲートウェイリポジトリ `npm-public-registry-gateway` へのアップストリーム接続があるとします。`npm-public-registry-gateway` にはパブリックパッケージリポジトリ [https://npmjs.com](https://npmjs.com) へのアップストリーム接続があります。

![簡略な3つの連結したリポジトリを示すアップストリームリポジトリの図。](http://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/images/packages/upstream-with-external.png)


もし `npm` が `repo-A` リポジトリを使用するよう設定されていた場合、`npm install` の実行により[https://npmjs.com](https://npmjs.com) から `npm-public-registry-gateway` へのパッケージのコピーが開始されます。インストールされているバージョンも`repo-A`プルされます。次の例では、`lodash`がインストールされます。

```
$ npm config get registry
https://packages.{{region}}.codecatalyst.aws/npm/{{space-name}}/{{proj-name}}/{{repo-name}}/
$ npm install lodash
+ lodash@4.17.20
added 1 package from 2 contributors in 6.933s
```

`npm install` の実行後、`repo-A` には最新バージョン (`lodash 4.17.20`)のみが含まれています。なぜなら、それが `npm` によって `repo-A` から取得されたバージョンだからです。

 `npm-public-registry-gateway` が [https://npmjs.com](https://npmjs.com) に外部アップストリーム接続するため、[https://npmjs.com](https://npmjs.com) からインポートされるすべてのパッケージバージョンは `npm-public-registry-gateway` に保存されます。これらのパッケージバージョンは、`npm-public-registry-gateway`とのアップストリーム関係を持つ任意のダウンストリームリポジトリによって取得されている可能性があります。

`npm-public-registry-gateway` の内容から、[https://npmjs.com](https://npmjs.com) からインポートされたすべてのパッケージとパッケージバージョンを段階的に確認できます。

## 中間リポジトリでのパッケージの保持
<a name="package-retention-intermediate-repositories"></a>

 CodeCatalyst を使用すると、アップストリームリポジトリを連結できます。例えば、`repo-A` に `repo-B` を、`repo-B` に `repo-C` をアップストリームとして設定できます。この設定により、`repo-B`と`repo-C`にあるパッケージバージョンが`repo-A`から入手可能になります。

![簡略な3 つの連結したリポジトリを示すアップストリームリポジトリの図。](http://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/images/packages/upstream-chaining.png)


 パッケージマネージャーがリポジトリ `repo-A` に接続し、リポジトリ `repo-C` からパッケージバージョンを取得する場合、そのパッケージバージョンはリポジトリ `repo-B` に保持されません。パッケージバージョンは、最も下流のリポジトリにのみ保持されます。この例では、`repo-A` にのみ保持されます。中間リポジトリには保持されません。これは、長いチェーンにも当てはまります。例えば、`repo-A`、`repo-B`、`repo-C` `repo-D` という 4 つのリポジトリがあり、`repo-A` に接続しているパッケージマネージャーが、`repo-D` からパッケージバージョンを取得した場合、そのパッケージバージョンは `repo-A` に保持されますが、`repo-B` や `repo-C` には保持されません。

パッケージ保持に関する動作は、外部リポジトリからパッケージバージョンをプルする場合と同様ですが、パッケージバージョンはパブリックリポジトリへの直接のアップストリーム接続を持つゲートウェイリポジトリに保持されます。例えば、`repo-A` は `repo-B` をアップストリームリポジトリとしています。`repo-B` は `npm-public-registry-gateway` をアップストリームリポジトリとしており、このリポジトリはパブリックリポジトリ **npmjs.com** とアップストリーム接続されています。次の図を参照してください。

![npmjs.com への外部アップストリーム接続に連結された 3 つのリポジトリを示すアップストリームリポジトリ図。](http://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/images/packages/upstream-chaining-external.png)


 `repo-A` に接続しているパッケージマネージャーが、例えば *lodash 4.17.20* という特定のパッケージバージョンをリクエストし、そのパッケージバージョンが 3 つのリポジトリのいずれにも存在しない場合は、**npmjs.com** から取得されます。*lodash 4.17.20* が取得されると、最も下流のリポジトリである `repo-A`と、外部のパブリックリポジトリである **npmjs.com** へのアップストリーム接続がある `npm-public-registry-gateway` に保持されます。*lodash 4.17.20* は中間リポジトリである `repo-B` には保持されません。