

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

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

# CodeCatalyst でソフトウェアパッケージを公開および共有する
<a name="packages"></a>

Amazon CodeCatalyst は、開発チームがアプリケーション開発に使用するソフトウェアパッケージをセキュアに保存、共有できるようにする、フルマネージド型のパッケージリポジトリサービスです。こうしたパッケージはパッケージリポジトリに保存され、CodeCatalyst のプロジェクト内で作成および整理されます。

1 つのパッケージリポジトリに、サポートされているすべてのパッケージタイプのパッケージを保存できます。CodeCatalyst は、次のパッケージ形式をサポートしています。
+ npm
+ Maven
+ NuGet
+ Python

パッケージリポジトリ内のパッケージは、そのリポジトリが含まれるむプロジェクトのメンバー間で検出および共有できます。

リポジトリにパッケージを公開し、リポジトリからパッケージを使用するには、リポジトリエンドポイント (URL) を使用するようにパッケージマネージャーを設定します。その後、パッケージマネージャーを使用して、パッケージをリポジトリに公開できます。Maven、Gradle、npm、yarn、nuget、dotnet、pip、twine などのパッケージマネージャーを使用できます。

CodeCatalyst パッケージリポジトリを使用するように CodeCatalyst ワークフローを設定することもできます。ワークフローでのパッケージの使用の詳細については、「[ワークフローへのパッケージリポジトリの接続](workflows-packages.md)」を参照してください。

アップストリームリポジトリとして追加することで、1 つのパッケージリポジトリ内のパッケージを同じプロジェクトの別のリポジトリで利用できるようになります。アップストリームリポジトリで使用可能なすべてのパッケージバージョンは、ダウンストリームリポジトリでも使用できます。詳細については、「[アップストリームリポジトリを設定して使用する](packages-upstream-repositories.md)」を参照してください。

CodeCatalyst リポジトリでオープンソースパッケージを使用できるようにするには、**ゲートウェイ**と呼ばれる特殊なタイプのリポジトリを作成します。ゲートウェイリポジトリにアップストリームすると、npmjs.com や pypi.org などの一般的なパブリックリポジトリからパッケージを取得し、CodeCatalyst リポジトリに自動的にキャッシュできます。詳細については、「[外部のパブリックリポジトリに接続する](packages-connect-external.md)」を参照してください。

**Topics**
+ [パッケージの概念](packages-concepts.md)
+ [パッケージリポジトリを設定して使用する](packages-repositories.md)
+ [アップストリームリポジトリを設定して使用する](packages-upstream-repositories.md)
+ [外部のパブリックリポジトリに接続する](packages-connect-external.md)
+ [パッケージの公開と変更](working-with-packages.md)
+ [npmを使う](packages-npm.md)
+ [Mavenを使う](packages-maven.md)
+ [NuGetを使う](packages-nuget.md)
+ [Pythonの使用](packages-python.md)
+ [パッケージのクォータ](packages-quotas.md)

# パッケージの概念
<a name="packages-concepts"></a>

CodeCatalyst でパッケージを管理、公開、使用するときに知っておくべき概念と用語をいくつか紹介します。

## パッケージ
<a name="packages-concepts-packages"></a>

*パッケージ*とは、ソフトウェアと、ソフトウェアのインストールおよび依存関係の解決に必要なメタデータの両方を含むバンドルです。CodeCatalyst は npm パッケージ形式をサポートしています。

パッケージの内容は以下のとおりです。
+ 名前 (例: `webpack` はよく利用されている npm パッケージの名前です)
+ オプションの[名前空間](#packages-concepts-package-namespaces) (`@types/node` の `@types` など)
+ 一連の[バージョン](#packages-concepts-package-versions) (`1.0.0`、`1.0.1`、`1.0.2` など)
+ パッケージレベルのメタデータ (npm ディストリビューションタグなど)

## パッケージの名前空間
<a name="packages-concepts-package-namespaces"></a>

一部のパッケージ形式では、階層的なパッケージ名をサポートしており、パッケージを論理グループに整理し、名前の衝突を回避できます。同じ名前のパッケージを異なる名前空間に保存できます。例えば、npm はスコープをサポートしており、npm パッケージ `@types/node` のスコープは `@types` で、名前は `node` です。他にも多くのパッケージ名が`@types`スコープにあります。CodeCatalyst では、スコープ (「types」) はパッケージ名前空間と呼ばれ、名前 (「node」) はパッケージ名と呼ばれます。Maven パッケージの場合、パッケージ名前空間はMaven GroupIDに対応します。Mavenパッケージ`org.apache.logging.log4j:log4j` は、groupID (パッケージの名前空間)が`org.apache.logging.log4j`、artifactID (パッケージ名) が`log4j`です。Python などの一部のパッケージ形式では、npm のスコープや Maven のgroupID のような概念を持つ階層名をサポートしていません。パッケージ名をグループ化する方法がないと、名前の衝突を回避するのが難しくなる場合があり。

## パッケージバージョン
<a name="packages-concepts-package-versions"></a>

*パッケージバージョン*は、`@types/node@12.6.9`のようにパッケージの特定のバージョンを識別します。バージョン番号の形式とセマンティクスは、パッケージ形式によって異なります。例えば、npmパッケージのバージョンは[セマンティックバージョニングの仕様](https://semver.org/) に準拠する必要があります。CodeCatalystでは、パッケージバージョンは、バージョン識別子、package-version-level メタデータ、アセットセットで構成されます。

## アセット
<a name="packages-concepts-assets"></a>

*アセット*とは、CodeCatalyst に格納されている、npm `.tgz` ファイルや Maven POM、JAR ファイルなど、パッケージのバージョンに関連付けられた個々のファイルのことです。

## パッケージリポジトリ
<a name="packages-concepts-repository"></a>

CodeCatalyst の*パッケージリポジトリ*には、[パッケージバージョン](#packages-concepts-package-versions)を含む[パッケージ](#packages-concepts-packages)のセットが含まれており、各パッケージバージョンは[アセット](#packages-concepts-assets)のセットに対応付けられています。パッケージリポジトリは多言語対応であり、単一のリポジトリには、サポートされている任意のタイプのパッケージを含めることができます。各パッケージリポジトリは、NuGet CLI (`nuget`、`dotnet`)、`npm` CLI、Maven CLI (`mvn`)、Python CLI (`pip` および `twine`) などのツールを使用してパッケージを取得および公開するためのエンドポイントを公開します。各スペースに作成できるパッケージリポジトリの数など、CodeCatalyst のパッケージクォータについては「[パッケージのクォータ](packages-quotas.md)」を参照してください。

パッケージリポジトリをアップストリームとして設定することで、別のパッケージリポジトリにリンクできます。リポジトリがアップストリームとして設定されている場合、アップストリームに加え、チェーン内の追加のアップストリームリポジトリの任意のパッケージを使用できます。詳細については、「[アップストリームリポジトリ](#packages-concepts-upstream-repositories)」を参照してください。

ゲートウェイリポジトリは、公式の外部パッケージ管理元からパッケージをプルして保存する特殊なタイプのパッケージリポジトリです。詳細については、「[ゲートウェイリポジトリ](#packages-concepts-gateway-repositories)」を参照してください。

## アップストリームリポジトリ
<a name="packages-concepts-upstream-repositories"></a>

CodeCatalyst を使用すると、2 つのリポジトリ間にアップストリーム関係を作成できます。パッケージリポジトリが別のリポジトリの*アップストリーム*となるのは、このパッケージリポジトリにあるパッケージバージョンに、ダウンストリームリポジトリのリポジトリエンドポイントからアクセスできる場合です。アップストリーム関係では、2 つのパッケージリポジトリの内容は、クライアントから見ると実質的にマージされていることになります。

例えば、パッケージマネージャーがリポジトリに存在しないパッケージバージョンをリクエストした場合、CodeCatalyst は設定されたアップストリームリポジトリでパッケージバージョンを検索します。アップストリームリポジトリは設定が行われた順序で検索され、パッケージが見つかると CodeCatalyst は検索を停止します。

## ゲートウェイリポジトリ
<a name="packages-concepts-gateway-repositories"></a>

*ゲートウェイリポジトリ*は、サポートされている外部公式パッケージ管理元に接続されている特殊なタイプのパッケージリポジトリです。ゲートウェイリポジトリを[アップストリームリポジトリ](#packages-concepts-upstream-repositories)として追加すると、対応する公式パッケージ管理元からパッケージを使用できます。ダウンストリームリポジトリはパブリックリポジトリと通信せず、すべてゲートウェイリポジトリによって仲介されます。この方法で使用されたパッケージは、ゲートウェイリポジトリと、元のリクエストを受け取ったダウンストリームリポジトリの両方に保存されます。

ゲートウェイリポジトリは事前に定義されていますが、使用するプロジェクトごとに作成する必要があります。次のリストには、CodeCatalyst で作成できるすべてのゲートウェイリポジトリと、それぞれが接続されているパッケージ管理元が含まれています。
+ **npm-public-registry-gateway** は、npmjs.com から npm パッケージを提供します。
+ **maven-central-gateway** は、Maven Central リポジトリから Maven パッケージを提供します。
+ **google-android-gateway** は、Google Android から Maven パッケージを提供します。
+ **commonsware-gateway** は、CommonsWare から Maven パッケージを提供します。
+ **gradle-plugins-gateway** は、Gradle Plugins から Maven パッケージを提供します。
+ **nuget-gallery-gateway** は、NuGet Gallery から NuGet パッケージを提供します。
+ **pypi-gateway** は、Python Package Index から Python パッケージを提供します。

# パッケージリポジトリを設定して使用する
<a name="packages-repositories"></a>

CodeCatalyst では、パッケージはパッケージリポジトリ内に保存され、管理されます。CodeCatalyst にパッケージを公開する、あるいは CodeCatalyst (またはサポートされているパブリックパッケージリポジトリ) からパッケージを消費するには、パッケージリポジトリを作成し、パッケージマネージャーをそのリポジトリに接続する必要があります。

**Topics**
+ [パッケージリポジトリを作成する](packages-repositories-create.md)
+ [パッケージリポジトリに接続する](packages-repositories-connect.md)
+ [パッケージリポジトリを削除する](packages-repositories-delete.md)

# パッケージリポジトリを作成する
<a name="packages-repositories-create"></a>

CodeCatalyst でパッケージリポジトリを作成するには、次の手順を実行します。

**パッケージリポジトリを作成するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. パッケージリポジトリを作成するプロジェクトに移動します。

1. ナビゲーションペインで、**[パッケージ]** を選択します。

1. **[パッケージリポジトリ]** ページで、**[パッケージリポジトリの作成]** を選択します。

1. **[パッケージリポジトリの詳細]** セクションで、以下を追加します。

   1. **[リポジトリ名]**。プロジェクト名やチーム名、リポジトリの使用方法などの詳細を含むわかりやすい名前を使用することを検討してください。

   1. (オプション) **[説明]**。リポジトリの説明は、プロジェクト内の複数のチームをまたぐ複数のリポジトリがある場合に特に有用です。

1. **[アップストリームリポジトリ]** セクションで、**[アップストリームリポジトリを選択]** を選択して、CodeCatalyst パッケージリポジトリを介してアクセスするパッケージリポジトリを追加します。**[ゲートウェイリポジトリ]** を追加して、外部パッケージリポジトリまたは他の **[CodeCatalyst リポジトリ]** に接続できます。

   1. パッケージがパッケージリポジトリからリクエストされると、アップストリームリポジトリはこのリストに表示される順序で検索されます。パッケージが見つかると、CodeCatalyst は検索を停止します。アップストリームリポジトリの順序を変更するには、リスト内のリポジトリをドラッグアンドドロップします。

1. **[作成]** を選択してパッケージリポジトリを作成します。

# パッケージリポジトリに接続する
<a name="packages-repositories-connect"></a>

CodeCatalyst に公開するか、CodeCatalyst からパッケージを使用するには、パッケージリポジトリエンドポイント情報と CodeCatalyst 認証情報を使用してパッケージマネージャーを設定する必要があります。リポジトリを作成していない場合は、「[パッケージリポジトリを作成する](packages-repositories-create.md)」の手順に従って作成できます。

パッケージマネージャーを CodeCatalyst パッケージリポジトリに接続する方法については、以下のドキュメントを参照してください。
+ [Gradle Groovy を設定して使用する](packages-maven-gradle.md)
+ [mvn を設定して使用する](packages-maven-mvn.md)
+ [nuget CLI または dotnet CLI を設定して使用する](packages-nuget-cli.md)
+ [npm を設定して使用する](packages-npm-use.md)
+ [pip の設定と Python パッケージのインストール](packages-python-pip.md)
+ [Twine の設定と Python パッケージの公開](packages-python-twine.md)

# パッケージリポジトリを削除する
<a name="packages-repositories-delete"></a>

CodeCatalyst のパッケージリポジトリを削除するには、次の手順を実行します。

**パッケージリポジトリを削除するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. 削除するパッケージリポジトリを含むプロジェクトに移動します。

1. ナビゲーションペインで、**[パッケージ]** を選択します。

1. **[パッケージリポジトリ]** ページで、削除するリポジトリを選択します。

1. **[削除]** を選択します。

1. パッケージリポジトリを削除することの影響について提供された情報を確認します。

1. ボックスに「`delete`」と入力し、**[削除]** を選択します。

# アップストリームリポジトリを設定して使用する
<a name="packages-upstream-repositories"></a>

ゲートウェイリポジトリと他の CodeCatalyst パッケージリポジトリの両方を、パッケージリポジトリのアップストリームとして接続できます。これにより、パッケージマネージャークライアントは、単一のパッケージリポジトリエンドポイントを使用して、複数のリポジトリに含まれるパッケージにアクセスできます。アップストリームリポジトリを使用する主な利点は次のとおりです。
+ 複数のソースからプルするために、1 つのリポジトリエンドポイントでパッケージマネージャーを設定するだけで済む。
+ アップストリームリポジトリから取得されるパッケージは、ダウンストリームリポジトリに保存されるため、アップストリームリポジトリで予期しない停止が発生した場合や、アップストリームリポジトリ内のパッケージが削除された場合でも、パッケージが使用可能になる。

アップストリームリポジトリは、パッケージリポジトリを作成するときに追加できます。既存のパッケージリポジトリからアップストリームリポジトリを追加または削除するには、CodeCatalyst コンソールを使用します。

ゲートウェイリポジトリをアップストリームリポジトリとして追加すると、パッケージリポジトリはゲートウェイリポジトリの対応するパブリックパッケージリポジトリに接続されます。サポートされているパブリックパッケージリポジトリのリストについては、「[サポートされている外部パッケージリポジトリとそのゲートウェイリポジトリ](packages-connect-external.md#packages-upstream-repositories-supported-external)」を参照してください。

複数のリポジトリをアップストリームリポジトリとしてリンクできます。例えば、チームで `project-repo` という名前のリポジトリを作成したとします。`team-repo` という名前の別のリポジトリを既に使用しており、このリポジトリには、**npm-public-registry-gateway** がアップストリームリポジトリとして追加され、パブリック npm リポジトリ `npmjs.com` に接続されています。`team-repo` をアップストリームリポジトリとして `project-repo` に追加できます。この場合、`project-repo` を使用するようにパッケージマネージャーを設定するだけで、`project-repo`、`team-repo`、`npm-public-registry-gateway`、`npmjs.com` からパッケージをプルできるようになります。

**Topics**
+ [アップストリームリポジトリを追加する](packages-upstream-repositories-add.md)
+ [アップストリームリポジトリの検索順序を編集する](packages-upstream-repositories-search-order.md)
+ [アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)
+ [アップストリームリポジトリを削除する](packages-upstream-repositories-remove.md)

# アップストリームリポジトリを追加する
<a name="packages-upstream-repositories-add"></a>

パブリックパッケージリポジトリまたは別の CodeCatalyst パッケージリポジトリをアップストリームリポジトリとしてダウンストリームリポジトリに追加すると、アップストリームリポジトリ内のすべてのパッケージを、ダウンストリームリポジトリに接続されているパッケージマネージャーで使用できます。

**アップストリームリポジトリを追加するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージリポジトリ]** ページで、アップストリームリポジトリを追加するパッケージリポジトリをクリックします。

1. パッケージリポジトリの名前の下で、**[アップストリーム]** を選択し、**[アップストリームリポジトリを選択]** を選択します。

1. **[アップストリームタイプを選択]** で、次のいずれかを選択します。
   + **ゲートウェイリポジトリ**

     使用可能なゲートウェイリポジトリのリストから選択できます。
**注記**  
Maven Central、npmjs.com、Nuget Gallery などの外部のパブリックパッケージ管理元に接続するために、CodeCatalyst はゲートウェイリポジトリを、外部リポジトリからプルされたパッケージを検索して保存する中間リポジトリとして使用します。これにより、プロジェクト内のすべてのパッケージリポジトリでゲートウェイ中間リポジトリからパッケージを使用できるため、時間とデータ転送量を節約できます。詳細については、「[外部のパブリックリポジトリに接続する](packages-connect-external.md)」を参照してください。
   + **CodeCatalyst リポジトリ**

     プロジェクトで使用可能な CodeCatalyst パッケージリポジトリのリストから選択できます。

1. アップストリームリポジトリとして追加するすべてのリポジトリを選択したら、**[選択]** を選択してから、**[保存]** を選択します。

   アップストリームリポジトリの検索順序の変更の詳細については、「[アップストリームリポジトリの検索順序を編集する](packages-upstream-repositories-search-order.md)」を参照してください。

アップストリームリポジトリを追加したら、ローカルリポジトリに接続されているパッケージマネージャーを使用して、アップストリームリポジトリからパッケージを取得できます。パッケージマネージャーの設定を更新する必要はありません。アップストリームリポジトリからパッケージバージョンをリクエストする方法の詳細については、「[アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)」を参照してください。

# アップストリームリポジトリの検索順序を編集する
<a name="packages-upstream-repositories-search-order"></a>

CodeCatalyst は、設定された検索順序でアップストリームリポジトリを検索します。パッケージが見つかると、CodeCatalyst は検索を停止します。アップストリームリポジトリがパッケージを検索する順序は変更できます。

**アップストリームリポジトリの検索順序を編集するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージリポジトリ]** ページで、アップストリームリポジトリの検索順序を編集するパッケージリポジトリを選択します。

1. パッケージリポジトリの名前の下で、**[アップストリーム]** を選択します。

1. **[アップストリームリポジトリ]** セクションで、アップストリームリポジトリとその検索順序を表示できます。検索順序を変更するには、リスト内のリポジトリをドラッグアンドドロップします。

1. アップストリームリポジトリの検索順序の編集が完了したら、**[保存]** を選択します。

# アップストリームリポジトリを持つパッケージバージョンのリクエスト
<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` には保持されません。

# アップストリームリポジトリを削除する
<a name="packages-upstream-repositories-remove"></a>

アップストリームリポジトリ内のパッケージにアクセスしなくなった場合は、パッケージリポジトリからアップストリームリポジトリを削除できます。

**警告**  
アップストリームリポジトリを削除すると、アップストリームの関係チェーンが壊れ、プロジェクトやビルドが壊れる可能性があります。

**アップストリームリポジトリを削除するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージリポジトリ]** ページで、アップストリームリポジトリを削除するパッケージリポジトリをクリックします。

1. パッケージリポジトリの名前の下で、**[アップストリーム]** を選択します。

1. **[アップストリームリポジトリを編集]** セクションで、削除するアップストリームリポジトリを見つけ、[![\[Remove\]](http://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/images/packages/remove.png)] を選択します。

1. アップストリームリポジトリを削除したら、**[保存]** を選択します。

# 外部のパブリックリポジトリに接続する
<a name="packages-connect-external"></a>

CodeCatalyst パッケージリポジトリは、対応するゲートウェイリポジトリをアップストリームリポジトリとして追加することで、サポートされている外部のパブリックリポジトリに接続できます。ゲートウェイリポジトリは、外部リポジトリからプルされたパッケージを検索して保存する中間リポジトリとして機能します。これにより、プロジェクト内のすべてのパッケージリポジトリでゲートウェイリポジトリから保存されたパッケージを使用できるため、時間とデータ転送量を節約できます。

**ゲートウェイリポジトリを使用してパブリックリポジトリに接続するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージ]** で、**[ゲートウェイリポジトリ]** ページを選択します。サポートされているゲートウェイリポジトリとその説明のリストが表示されます。

1. ゲートウェイリポジトリを使用するには、まずゲートウェイリポジトリを作成する必要があります。ゲートウェイリポジトリが作成されている場合は、作成された日時が表示されます。まだ作成していない場合は、**[作成]** を選択して作成します。

1. ゲートウェイリポジトリのパッケージを使用するには、CodeCatalyst リポジトリからパッケージへのアップストリーム接続を設定する必要があります。**[パッケージリポジトリ]** を選択し、接続するパッケージリポジトリを選択します。

1. パブリックリポジトリに接続するには、**[アップストリーム]** を選択し、**[アップストリームリポジトリを選択]** を選択します。

1. **[ゲートウェイリポジトリ]** を選択し、アップストリームリポジトリとして接続するパブリックリポジトリに対応するゲートウェイリポジトリを選択します。

1. アップストリームリポジトリとして追加するすべてのゲートウェイリポジトリを選択したら、**[選択]** を選択します。

1. アップストリームリポジトリの順序を決めたら、**[保存]** を選択します。

アップストリームリポジトリの作成方法の詳細については、「[アップストリームリポジトリを設定して使用する](packages-upstream-repositories.md)」を参照してください。

ゲートウェイリポジトリをアップストリームリポジトリとして追加すると、ローカルリポジトリに接続されているパッケージマネージャーを使用して、それに対応する外部のパブリックパッケージリポジトリからパッケージを取得できます。パッケージマネージャーの設定を更新する必要はありません。この方法で使用されるパッケージは、ゲートウェイリポジトリとローカルパッケージリポジトリの両方に保存されます。アップストリームリポジトリからパッケージバージョンをリクエストする方法の詳細については、「[アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)」を参照してください。

## サポートされている外部パッケージリポジトリとそのゲートウェイリポジトリ
<a name="packages-upstream-repositories-supported-external"></a>

CodeCatalyst は、ゲートウェイリポジトリを使用して、次の公式パッケージ管理元へのアップストリーム接続の追加をサポートしています。


| リポジトリパッケージタイプ | 説明 | ゲートウェイリポジトリ名 | 
| --- | --- | --- | 
| npm | npm 公開レジストリ | npm-public-registry-gateway | 
| Python (パイソン) | Python パッケージインデックス  | pypi-gateway | 
| Maven (メイヴン) | Maven Central | maven-central-gateway | 
| Maven (メイヴン) | Google Android リポジトリ | google-android-gateway | 
| Maven | CommonsWare | commonsware-gateway | 
| Maven | Gradle プラグインリポジトリ | gradle-plugins-gateway | 
| NuGet | NuGet ギャラリー | nuget-gallery-gateway | 

# パッケージの公開と変更
<a name="working-with-packages"></a>

CodeCatalyst における*パッケージ*とは、依存関係の解決とソフトウェアのインストールに必要なソフトウェアとメタデータのバンドルです。CodeCatalyst でサポートされているパッケージ形式のリストについては、「[CodeCatalyst でソフトウェアパッケージを公開および共有する](packages.md)」を参照してください。このセクションでは、パッケージの公開/表示/削除、パッケージバージョンのステータスの更新について説明します。

**Topics**
+ [CodeCatalyst パッケージリポジトリにパッケージを公開する](package-publishing.md)
+ [パッケージバージョンの詳細の表示](working-with-packages-view.md)
+ [パッケージバージョンの削除](working-with-packages-delete.md)
+ [パッケージバージョンのステータスの更新](working-with-packages-update-version-status.md)
+ [パッケージオリジンコントロールの編集](package-origin-controls.md)

# CodeCatalyst パッケージリポジトリにパッケージを公開する
<a name="package-publishing"></a>

 パッケージマネージャーツールを使用して、サポートされている任意のパッケージタイプのバージョンを CodeCatalyst パッケージリポジトリに公開できます。パッケージバージョンを公開するステップは次のとおりです。

**CodeCatalyst パッケージリポジトリにパッケージバージョンを公開するには**

1. まだ作成していない場合は、[パッケージリポジトリを作成します](packages-repositories-create.md)。

1. パッケージマネージャーをパッケージリポジトリに接続します。npm パッケージマネージャーを CodeCatalyst パッケージリポジトリに接続する方法については、「[npm を設定して使用する](packages-npm-use.md)」を参照してください。

1. 接続されたパッケージマネージャーを使用して、パッケージバージョンを公開します。

**Contents**
+ [公開リポジトリとアップストリームリポジトリ](#package-publishing-upstreams)
+ [プライベートパッケージと公開リポジトリ](#package-publishing-upstreams-direct)
+ [パッケージアセットの上書き](#package-publishing-overwrite-assets)

## 公開リポジトリとアップストリームリポジトリ
<a name="package-publishing-upstreams"></a>

CodeCatalyst では、到達可能なアップストリームリポジトリまたはパブリックリポジトリに存在するパッケージバージョンを公開することはできません。例えば、npm パッケージ `lodash@1.0` をパッケージリポジトリ `myrepo` に公開するとします。`myrepo` は、アップストリームリポジトリとして設定されたゲートウェイリポジトリを介して npmjs.com に接続されています。もし `lodash@1.0` がアップストリームリポジトリまたは npmjs.com に存在する場合、CodeCatalyst は `myrepo` への公開の試みを、409 競合エラーを発行することですべて拒否します。これにより、アップストリームリポジトリ内のパッケージと同じ名前とバージョンのパッケージを誤って公開し、予期しない動作が発生する可能性を防ぐことができます。

アップストリームリポジトリに存在するパッケージ名の異なるバージョンを公開することは可能です。たとえば、`lodash@1.0`はアップストリームのリポジトリに存在しますが、`lodash@1.1`がそうではない場合、`lodash@1.1`をダウンストリームのリポジトリで公開します。

## プライベートパッケージと公開リポジトリ
<a name="package-publishing-upstreams-direct"></a>

 CodeCatalyst は、CodeCatalyst リポジトリに保存されているパッケージを npmjs.com や Maven Central などのパブリックリポジトリに公開しません。CodeCatalyst は、パッケージをパブリックリポジトリから CodeCatalyst リポジトリにインポートしますが、パッケージをその逆方向に移動することはしません。CodeCatalyst リポジトリに公開するパッケージはプライベートのままで、リポジトリが属する CodeCatalyst プロジェクトでのみ使用できます。

## パッケージアセットの上書き
<a name="package-publishing-overwrite-assets"></a>

 別のコンテンツで既に存在するパッケージアセットを再公開することはできません。例えば、JAR アセット `mypackage-1.0.jar`を持つ Maven パッケージをすでに公開したとします。古いアセットのチェックサムと新しいアセットのチェックサムが同じである場合のみ、そのアセットを再度公開できます。新しいコンテンツで同じアセットを再公開するには、最初にパッケージバージョンを削除してください。異なるコンテンツで同じアセット名を再公開しようとすると、HTTP 409 の競合エラーが発生します。

複数のアセット (Python と Maven) をサポートするパッケージ形式の場合、必要なアクセス許可を持っていれば、いつでも既存のパッケージバージョンに異なる名前の新しいアセットを追加できます。npm および NuGet はパッケージバージョンごとに 1 つのアセットしかサポートしないため、公開されたパッケージバージョンを変更するには、まずそれを削除する必要があります。

 すでに存在するアセットを再公開しようとした場合 (例えば、`mypackage-1.0.jar`)、公開されたアセットと新規アセットの内容が同じである場合、操作が冪等であるため、この操作は成功します。

# パッケージバージョンの詳細の表示
<a name="working-with-packages-view"></a>

CodeCatalyst コンソールを使用して、特定のパッケージバージョンの詳細を表示できます。

**パッケージバージョンの詳細を表示するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージリポジトリ]** ページで、詳細を表示するパッケージバージョンを含むリポジトリを選択します。

1. **[パッケージ]** テーブルでパッケージバージョンを検索します。検索バーを使用して、パッケージ名と形式でパッケージをフィルタリングできます。リストからパッケージを選択します。

1. **[パッケージの詳細]** ページで、**[バージョン]**、表示するバージョンの順に選択します。

# パッケージバージョンの削除
<a name="working-with-packages-delete"></a>

CodeCatalyst コンソールの **[パッケージバージョンの詳細]** ページからパッケージバージョンを削除できます。

**パッケージバージョンを削除するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージリポジトリ]** ページで、削除するパッケージバージョンを含むリポジトリを選択します。

1. パッケージを検索してテーブルから選択します。

1. **[パッケージの詳細]** ページで、**[バージョン]**、削除するバージョンの順に選択します。

1. **[パッケージバージョンの詳細]** ページで、**[バージョンのアクション]**、**[削除]** の順に選択します。

1. テキストフィールドに「*delete*」と入力し、**[削除]** を選択します。

# パッケージバージョンのステータスの更新
<a name="working-with-packages-update-version-status"></a>

CodeCatalyst のすべてのパッケージバージョンには、パッケージバージョンの現在の状態と使用の可否を示すステータスがあります。CodeCatalyst コンソールでパッケージバージョンのステータスを変更できます。パッケージバージョンに設定できるステータス値とその意味の詳細については、「[パッケージバージョンのステータス](#package-version-status)」を参照してください。

**パッケージバージョンのステータスを更新するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. **[パッケージリポジトリ]** ページで、ステータスを更新するパッケージバージョンを含むリポジトリを選択します。

1. パッケージを検索してテーブルから選択します。

1. **[パッケージの詳細]** ページで、**[バージョン]**、表示するバージョンの順に選択します。

1. **[パッケージバージョンの詳細]** ページで **[アクション]** を選択し、**[リストから削除]**、**[アーカイブ]**、または **[破棄]** を選択します。各パッケージバージョンのステータスの詳細については、「[パッケージバージョンのステータス](#package-version-status)」を参照してください。

1. 確認テキストをテキストフィールドに入力し、更新先のステータスに応じて **[リストから削除]**、**[アーカイブ]**、または **[破棄]** を選択します。

## パッケージバージョンのステータス
<a name="package-version-status"></a>

パッケージバージョンのステータスに設定できる値は以下の通りです。コンソールでパッケージバージョンのステータスを変更できます。詳細については、「[パッケージバージョンのステータスの更新](#working-with-packages-update-version-status)」を参照してください。
+  **[公開済み]**: パッケージバージョンは正常に公開されており、パッケージマネージャーによってリクエストできます。パッケージバージョンは、`npm view <package-name> versions` の出力など、パッケージマネージャーに返されるパッケージバージョンリストに含まれます。パッケージバージョンのすべてのアセットは、リポジトリから入手できます。
+  **[未完了]**: 最後の公開の試みは完了しませんでした。現在、Maven パッケージのバージョンのみが **[未完了]** のステータスになり得ます。これは、クライアントがパッケージバージョンのひとつ以上のアセットをアップロードしながら、そのバージョンを含むパッケージの`maven-metadata.xml`ファイルを公開しないときに発生します。
+  **[リストなし]** - パッケージバージョンのアセットはリポジトリからダウンロードできますが、パッケージマネージャーに返されるバージョンのリストにはパッケージバージョンが含まれません。例えば、npm パッケージの場合、`npm view <package-name> versions` の出力にパッケージバージョンは含まれません。つまり、使用可能なバージョンのリストにバージョンが表示されないため、npm 依存関係解決ロジックではパッケージバージョンを選択しません。ただし、**[リストなし]** パッケージバージョンがすでに `npm package-lock.json` ファイルで参照されていれば、`npm ci` の実行時などにダウンロードとインストールが可能です。
+  **[アーカイブ済み]**: パッケージバージョンのアセットはダウンロードできません。パッケージバージョンは、パッケージマネージャーによって返されるバージョンのリストには含まれません。アセットが使用できないため、クライアントによるパッケージバージョンの使用はブロックされます。**[アーカイブ済み]** に更新されたバージョンにアプリケーションビルドが依存している場合、パッケージバージョンがローカルにキャッシュされていない限り、ビルドは失敗します。パッケージマネージャーまたはビルドツールを使用して**アーカイブ済みパッケージ**バージョンを再公開することはできません。これは、アーカイブ済みパッケージバージョンがリポジトリにまだ存在するためです。ただし、コンソールでパッケージバージョンのステータスを **[リストなし]** または **[公開済み]** に戻すことができます。
+  **[廃棄済み]**: パッケージバージョンはリストに表示されず、アセットをリポジトリからダウンロードできません。**[廃棄済み]** と **[アーカイブ済み]** の主な違いは、**[廃棄済み]** ステータスの場合、パッケージバージョンのアセットが CodeCatalyst によって完全に削除される点です。このため、パッケージバージョンを**[開放済み]** から**[アーカイブ済み]**、**[一覧表示されていない]**、または **[公開]** に移動することはできません。アセットが削除されているため、パッケージバージョンは使用できません。パッケージバージョンが **[廃棄済み]** としてマークされている場合、パッケージアセットの保存に関する費用は請求されません。

 さきほどのリストのステータスに加えて、パッケージバージョンを削除することもできます。削除後、パッケージバージョンはリポジトリ内に存在しなくなり、パッケージマネージャーまたはビルドツールを使用して、そのパッケージバージョンを自由に再公開できます。

## パッケージ名、パッケージバージョン、アセット名の正規化
<a name="package-name-normalization"></a>

CodeCatalyst は、パッケージ名、パッケージバージョン、およびアセット名を保存する前に正規化します。つまり、CodeCatalyst の名前またはバージョンは、パッケージが公開されたときに提供された名前やバージョンとは異なる場合があります。CodeCatalyst でパッケージタイプごとに名前とバージョンが正規化される仕組みについては、次のドキュメントを参照してください。
+ [Python パッケージ名の正規化](python-name-normalization.md)
+ [NuGet パッケージ名、バージョン、アセット名の正規化](nuget-name-normalization.md)

CodeCatalyst では、他のパッケージ形式では正規化を行いません。

# パッケージオリジンコントロールの編集
<a name="package-origin-controls"></a>

Amazon CodeCatalyst では、パッケージバージョンを直接公開したり、アップストリームリポジトリからプルダウンしたり、ゲートウェイを介して外部のパブリックリポジトリから取り込んだりすることで、パッケージバージョンをパッケージリポジトリに追加できます。直接公開とパブリックリポジトリからの取り込みの両方の方法でパッケージバージョンの追加を許可すると、依存関係置換攻撃に対して脆弱になります。詳細については、「[依存関係置換攻撃](#dependency-substitution-attacks)」を参照してください。依存関係置換攻撃から保護するには、リポジトリ内のパッケージにパッケージオリジンコントロールを設定して、パッケージバージョンをリポジトリに追加する方法を制限します。

さまざまなパッケージの新しいバージョンを、直接公開などの内部ソースとパブリックリポジトリなどの外部ソースの両方から入手できるようにしたいと考えている場合は、パッケージオリジンコントロールの設定を検討する必要があります。デフォルトでは、パッケージオリジンコントロールは、パッケージの最初のバージョンがリポジトリに追加された方法に基づいて設定されます。

## パッケージオリジンコントロール設定
<a name="package-origin-control-settings"></a>

パッケージオリジンコントロールでは、パッケージバージョンをリポジトリに追加する方法を設定できます。以下のリストには、使用可能なパッケージオリジンコントロールの設定と値が含まれています。

**公開**

この設定は、パッケージマネージャーや類似のツールを使用してパッケージのバージョンをリポジトリに直接公開できるかどうかを設定します。
+ **許可**: パッケージバージョンを直接公開できます。
+ **ブロック**: パッケージバージョンは直接公開できません。

**アップストリーム**

この設定は、パッケージマネージャーからのリクエストに応じて、パッケージバージョンを外部のパブリックリポジトリから取り込むことができるか、アップストリームリポジトリから保持できるかを設定します。
+ **許可**: すべてのパッケージバージョンは、アップストリームリポジトリとして設定された他の CodeCatalyst リポジトリから保持することも、外部接続を使用してパブリックソースから取り込むこともできます。
+ **ブロック**: パッケージバージョンは、アップストリームリポジトリとして設定された他の CodeCatalyst リポジトリから取得することも、外部接続を使用してパブリックソースから取り込むこともできません。

### パッケージオリジンコントロールのデフォルト設定
<a name="default-package-origin-control-settings"></a>

パッケージオリジンコントロールのデフォルト設定は、パッケージの最初のバージョンがパッケージリポジトリに追加された方法に基づいて設定されます。
+ 最初のパッケージバージョンがパッケージマネージャーによって直接公開された場合、設定は **[公開: 許可]** と **[アップストリーム: ブロック]** になります。
+ 最初のパッケージバージョンがパブリックソースから取り込まれた場合、設定は **[公開: ブロック]** と **[アップストリーム: 許可]** になります。

## 一般的なパッケージアクセスコントロールシナリオ
<a name="package-origin-control-scenarios"></a>

このセクションでは、パッケージバージョンが CodeCatalyst パッケージリポジトリに追加される際のいくつかの一般的なシナリオについて説明します。パッケージオリジンコントロール設定は、最初のパッケージバージョンが追加された方法に基づいて、新しいパッケージに設定されます。

以下のシナリオの*内部パッケージ*は、パッケージマネージャーからリポジトリに直接公開されるパッケージ (ユーザー管理するパッケージなど) を指します。*外部パッケージ*は、パブリックリポジトリに存在するパッケージで、ゲートウェイリポジトリアップストリームを通じてリポジトリに取り込むことができます。

**外部パッケージバージョンが既存の内部パッケージに公開される**

このシナリオでは、内部パッケージ「*packageA*」について考えてみます。チームは *packageA* の最初のパッケージバージョンを CodeCatalyst パッケージリポジトリに公開します。これはパッケージの最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に **[公開: 許可]** および **[アップストリーム: ブロック]** に設定されます。パッケージがリポジトリに保存されると、同じ名前のパッケージが CodeCatalyst パッケージリポジトリに接続されているパブリックリポジトリに公開されます。これは、内部パッケージに対して試みられた依存関係置換攻撃である場合も、単なる偶然である場合もあり得ます。いずれの場合でも、パッケージオリジンコントロールは、潜在的な攻撃からパッケージバージョンを保護するために、新しい外部バージョンの取り込みをブロックするように設定されています。

次の画像では、*repoA* は `npm-public-registry-gateway` リポジトリへのアップストリーム接続を持つ CodeCatalyst パッケージリポジトリを表します。リポジトリには *packageA* のバージョン 1.1 と 2.1 が含まれていますが、バージョン 3.0 はパブリックリポジトリに公開されています。通常、*repoA* はパッケージマネージャーからパッケージがリクエストされた後にバージョン 3.0 を取り込みます。パッケージの取り込みが **[ブロック]** に設定されているため、バージョン 3.0 は CodeCatalyst パッケージリポジトリに取り込まれず、接続しているパッケージマネージャーからは使用できません。

![\[パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。\]](http://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/images/packages/package-origin-controls-one.png)


**内部パッケージバージョンが既存の外部パッケージに公開される**

このシナリオでは、*packageB* という名前のパッケージは、リポジトリに接続したパブリックリポジトリの外部に存在します。リポジトリに接続しているパッケージマネージャーが *packageB* をリクエストすると、パッケージバージョンはパブリックリポジトリからリポジトリに取り込まれます。これは *packageB* の最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に **[公開: ブロック]** および **[アップストリーム: 許可]** に設定されます。その後、ユーザーは同じパッケージ名のバージョンをリポジトリに公開しようとします。ここでは、ユーザーが公開パッケージの存在を知らず、関連のないパッケージを同じ名前で公開しようとしているか、パッチが適用されたバージョンを公開しようとしているか、外部に既に存在するパッケージバージョンとまったく同じものを直接公開しようとしている場合が考えられます。CodeCatalyst は、公開しようとしているバージョンを拒否しますが、拒否を明示的に上書きして、必要に応じてバージョンを公開することができます。

次の画像では、*repoA* は `npm-public-registry-gateway` リポジトリへのアップストリーム接続を持つ CodeCatalyst パッケージリポジトリを表します。パッケージリポジトリには、パブリックリポジトリから取り込んだバージョン 3.0 が含まれています。ユーザーは、バージョン 1.1 をパッケージリポジトリに公開したいと考えています。通常、バージョン 1.2 を *repoA* に公開できますが、公開が **[ブロック]** に設定されているため、バージョン 1.2 は公開できません。

![\[パッケージの公開がブロックされていることを示すシンプルなグラフィック。\]](http://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/images/packages/package-origin-controls-two.png)


**既存の外部パッケージにパッチを適用したパッケージバージョンを公開する**

このシナリオでは、*packageB* という名前のパッケージは、パッケージリポジトリに接続したパブリックリポジトリの外部に存在します。リポジトリに接続しているパッケージマネージャーが *packageB* をリクエストすると、パッケージバージョンはパブリックリポジトリからリポジトリに取り込まれます。これは *packageB* の最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に **[公開: ブロック]** および **[アップストリーム: 許可]** に設定されます。チームは、このパッケージのパッチが適用されたパッケージバージョンをリポジトリに公開することを決めました。パッケージバージョンを直接公開するために、チームはパッケージのオリジンコントロール設定を **[公開: 許可]** および **アップストリーム: ブロック]** に変更します。これで、このパッケージのバージョンをリポジトリに直接公開し、パブリックリポジトリから取り込むことができます。チームがパッチを適用したパッケージバージョンを公開した後、チームはパッケージオリジンの設定を **[公開: ブロック]** および **[アップストリーム: 許可]** に戻します。

## パッケージオリジンコントロールの編集
<a name="edit-package-origin-controls"></a>

パッケージオリジンコントロールは、パッケージの最初のパッケージバージョンがパッケージリポジトリに追加された方法に基づいて自動的に設定されます。詳細については、「[パッケージオリジンコントロールのデフォルト設定](#default-package-origin-control-settings)」を参照してください。CodeCatalyst パッケージリポジトリ内のパッケージのパッケージオリジンコントロールを追加または編集する手順は次のとおりです。

**パッケージオリジンコントロールを追加または編集するには**

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. 編集するパッケージを含むパッケージリポジトリを選択します。

1. **[パッケージ]** の表で、編集するパッケージを検索して選択します。

1. パッケージの要約ページの **[オリジンコントロール]** を選択します。

1. **[オリジンコントロール]** で、パッケージに設定するパッケージオリジンコントロールを選択します。**[公開]** と **[アップストリーム]** の両方のパッケージオリジンコントロール設定を同時に設定する必要があります。
   + パッケージバージョンを直接公開できるようにするには、**[公開]** で **[許可]** を選択します。パッケージバージョンの公開を禁止するには、**[ブロック]** を選択します。
   + 外部リポジトリからのパッケージの取り込みとアップストリームリポジトリからのパッケージの取得を許可するには、**[アップストリームソース]** で **[許可]** を選択します。外部リポジトリおよびアップストリームリポジトリからのパッケージバージョンの取り込みとプルをすべてブロックするには、**[ブロック]** を選択します。

1. **[保存]** を選択します。

## 公開リポジトリとアップストリームリポジトリ
<a name="package-publishing-upstreams"></a>

CodeCatalyst では、到達可能なアップストリームリポジトリまたはパブリックリポジトリに存在するパッケージバージョンを公開することはできません。例えば、npm パッケージ `lodash@1.0` をリポジトリ `myrepo` に公開するとし、`myrepo` が npmjs.com への外部接続を持つアップストリームリポジトリを持つとします。次のシナリオを考えてみます。

1. `lodash` 上のパッケージオリジンコントロール設定は、**[公開: 許可]** と **[アップストリーム: 許可]** です。もし `lodash@1.0` がアップストリームリポジトリまたは npmjs.com に存在する場合、CodeCatalyst は `myrepo` への公開の試みを、409 競合エラーを発行することですべて拒否します。`lodash@1.1` などの別のバージョンを公開することもできます。

1. `lodash` 上のパッケージオリジンコントロール設定は、**[公開: 許可]** と **[アップストリーム: ブロック]** です。ユーザーはパッケージバージョンにはアクセスできないため、まだ存在していないすべてのバージョンの `lodash` をリポジトリに公開できます。

1. `lodash` 上のパッケージオリジンコントロール設定は、**[公開: ブロック]** と **[アップストリーム: 許可]** です。この場合、どのパッケージバージョンもリポジトリに直接公開することはできません。

## 依存関係置換攻撃
<a name="dependency-substitution-attacks"></a>

パッケージマネージャーは、再利用可能なコードをパッケージ化して共有するプロセスを簡素化します。これらのパッケージは、ある組織がアプリケーションで使用するために開発したプライベートパッケージの場合もあれば、組織外で開発され、パブリックパッケージリポジトリによって配布されるパブリックパッケージ (通常はオープンソースパッケージ) の場合もあります。パッケージをリクエストする際、開発者はパッケージマネージャーを使用して依存関係の新しいバージョンを取得します。依存関係置換攻撃 (依存関係かく乱攻撃とも呼ばれる) は、通常、パッケージマネージャーでパッケージの正規バージョンと悪意のあるバージョンを区別できない点を悪用するものです。

依存関係置換攻撃は、ソフトウェアサプライチェーン攻撃と呼ばれる攻撃のサブセットに属します。ソフトウェアサプライチェーン攻撃は、ソフトウェアサプライチェーンのあらゆる場所にある脆弱性を利用する攻撃です。

依存関係置換攻撃は、内部で開発されたパッケージとパブリックリポジトリから取得したパッケージの両方を使用するすべてのユーザーを標的にする可能性があります。攻撃者は内部パッケージ名を特定し、同じ名前の悪意のあるコードを公開パッケージリポジトリに戦略的に配置します。通常、悪意のあるコードはバージョン番号の高いパッケージで公開されます。パッケージマネージャーは、悪意のあるパッケージをパッケージの最新バージョンとみなすため、これらの公開フィードから悪意のあるコードを取得します。これにより、目的のパッケージと悪意のあるパッケージが「かく乱」または「置換」され、コードが危険にさらされることになります。

依存関係置換攻撃を防ぐために、CodeCatalyst にはパッケージオリジンコントロールが用意されています。パッケージオリジンコントロールは、パッケージをリポジトリに追加する方法を制御する設定です。このコントロールは、新しいパッケージの最初のパッケージバージョンが CodeCatalyst リポジトリに追加される際に自動的に設定されます。このコントロールにより、パッケージバージョンをリポジトリに直接公開したり、公開ソースから取り込んだりすることができないため、依存関係置換攻撃から保護されます。パッケージオリジンコントロールとその変更方法については、「[パッケージオリジンコントロールの編集](#package-origin-controls)」を参照してください。

# npmを使う
<a name="packages-npm"></a>

以下のトピックでは、Node.js パッケージマネージャー `npm` をCodeCatalyst で使用する方法を説明します。

**注記**  
CodeCatalyst は、`node v4.9.1` 以降および `npm v5.0.0` 以降をサポートしています。

**Topics**
+ [npm を設定して使用する](packages-npm-use.md)
+ [npm タグ処理](packages-npm-tags.md)

# npm を設定して使用する
<a name="packages-npm-use"></a>

CodeCatalyst で `npm` を使用するには、`npm` をパッケージリポジトリに接続し、認証用の個人用アクセストークン (PAT) を提供する必要があります。CodeCatalyst コンソールで `npm` をパッケージリポジトリに接続する手順を紹介します。

**Contents**
+ [CodeCatalyst で npm を設定する](#npm-configure)
+ [CodeCatalyst パッケージリポジトリからの npm パッケージをインストールする](#npm-install)
+ [CodeCatalyst を介して npmjs から npm パッケージをインストールする](#npm-install-npmjs)
+ [CodeCatalyst パッケージリポジトリに npm パッケージを公開する](#npm-publish)
+ [npm コマンドサポート](#npm-commands)
  + [パッケージリポジトリとやりとりするサポートされているコマンド](#supported-commands-that-interact-with-a-repository)
  + [サポートされているクライアント側コマンド](#supported-client-side-commands)
  + [サポートされていないコマンド](#unsupported-commands)

## CodeCatalyst で npm を設定する
<a name="npm-configure"></a>

次の手順では、`npm` を認証して CodeCatalyst パッケージリポジトリに接続する方法を説明します。npm の詳細については、[npm の公式ドキュメント](https://docs.npmjs.com/)を参照してください。

**`npm` を CodeCatalyst パッケージリポジトリに接続するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトに移動します。

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. リストからパッケージリポジトリの名前を選択します。

1. **[リポジトリに接続]** を選択します。

1. **[設定の詳細]** で、**[パッケージマネージャークライアント]** で **[npm クライアント]** を選択します。

1. オペレーティングシステムを選択すると、対応する設定手順が表示されます。

1. CodeCatalyst で npm を認証するには、個人用アクセストークン (PAT) が必要です。既にトークンある場合はそれを使用できます。ない場合は、次の手順で作成できます。

   1. **(オプション):** **[PAT 名]** と **[有効期限]** を更新します。

   1. **[トークンを作成]** をクリックします。

   1. PAT をコピーして安全な場所に保存します。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。攻撃者が不正に入手した認証情報を使用できる期間を最小限に抑えるため、認証情報の有効期間は短く設定してください。

1. プロジェクトのルートディレクトリから次のコマンドを実行して、パッケージリポジトリで npm を設定します。このコマンドは、次の操作を行います。
   + プロジェクトにプロジェクトレベルの `.npmrc` ファイルがない場合は、作成します。
   + パッケージリポジトリのエンドポイント情報をプロジェクトレベルの `.npmrc` ファイルに追加します。
   + 認証情報 (PAT) をユーザーレベルの `.npmrc` ファイルに追加します。

   次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下のコマンドの値は自動的に更新されるため、変更する必要はありません。
   + *username* を CodeCatalyst のユーザー名に置き換えます。
   + *PAT* を CodeCatalyst の PAT に置き換えます。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   npm set registry=https://packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/ --location project
   npm set //packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/:_authToken=username:PAT
   ```

   **npm 6 以下の場合:** `GET` リクエストでも npm が常に認証トークンを CodeCatalyst に渡すようにするには、次のように、always-auth 設定変数を `npm config set` で設定します。

   ```
   npm set //packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/:always-auth=true --location project
   ```

## CodeCatalyst パッケージリポジトリからの npm パッケージをインストールする
<a name="npm-install"></a>

「[CodeCatalyst で npm を設定する](#npm-configure)」の手順に従って npm をリポジトリに接続すると、リポジトリで `npm` コマンドを実行できます。

`npm install` コマンドを使用して、CodeCatalyst パッケージリポジトリまたはそのアップストリームリポジトリのいずれかにある npm パッケージをインストールできます。

```
npm install lodash
```

## CodeCatalyst を介して npmjs から npm パッケージをインストールする
<a name="npm-install-npmjs"></a>

CodeCatalyst リポジトリを介して [npmjs.com](https://www.npmjs.com/) から npm パッケージをインストールするには、**npm-public-registry-gateway** に接続されたゲートウェイリポジトリへのアップストリーム接続を使用してリポジトリを設定します。npmjs からインストールされたパッケージは、ゲートウェイリポジトリと最も遠いダウンストリームパッケージリポジトリに取り込まれて保存されます。

**npmjs からパッケージをインストールするには**

1. まだ設定していない場合は、「[CodeCatalyst で npm を設定する](#npm-configure)」の手順に従って `npm` を CodeCatalyst パッケージリポジトリで設定します。

1. リポジトリにゲートウェイリポジトリ **npm-public-registry-gateway** がアップストリーム接続として追加されていることを確認します。「[アップストリームリポジトリを追加する](packages-upstream-repositories-add.md)」の手順に従って **npm-public-registry-gateway** リポジトリを選択することで、どのアップストリームソースが追加されているか確認する、または **npm-public-registry-gateway** をアップストリームソースとして追加できます。

1. `npm install` コマンドを使用してパッケージをインストールします。

   ```
   npm install package_name
   ```

アップストリームリポジトリからのパッケージのリクエストの詳細については、「[アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)」を参照してください。

## CodeCatalyst パッケージリポジトリに npm パッケージを公開する
<a name="npm-publish"></a>

「[CodeCatalyst で npm を設定する](#npm-configure)」を完了したら、`npm` コマンドを実行できます。

npm パッケージを CodeCatalyst パッケージリポジトリに公開するには、`npm publish` コマンドを使用します。

```
npm publish
```

npm パッケージを作成する方法については、*npm Docs* 上の「[Creating Node.js Modules](https://docs.npmjs.com/getting-started/creating-node-modules)」を参照してください。

## npm コマンドサポート
<a name="npm-commands"></a>

以下のセクションでは、CodeCatalyst パッケージリポジトリでサポートされている `npm` コマンドと、サポートされていない特定のコマンドをまとめています。

**Topics**
+ [パッケージリポジトリとやりとりするサポートされているコマンド](#supported-commands-that-interact-with-a-repository)
+ [サポートされているクライアント側コマンド](#supported-client-side-commands)
+ [サポートされていないコマンド](#unsupported-commands)

### パッケージリポジトリとやりとりするサポートされているコマンド
<a name="supported-commands-that-interact-with-a-repository"></a>

このセクションでは、`npm` クライアントが設定されたレジストリ (`npm config set registry` など) に 1 つまたは複数のリクエストを行うコマンドをまとめています。以下のコマンドは、CodeCatalyst パッケージリポジトリに対して呼び出されたときに正しく機能することが確認されています。


****  

| コマンド | 説明 | 
| --- | --- | 
|   [bugs](https://docs.npmjs.com/cli/bugs) (バグ)   |  パッケージのバグトラッカー URL の場所を推測し、開こうとします。  | 
|   [ci](https://docs.npmjs.com/cli/ci) (クリーンスレートインストール)   |  クリーンスレートでプロジェクトをインストールします。  | 
|   [deprecate](https://docs.npmjs.com/cli/deprecate) (非推奨)   |  パッケージのバージョンを非推奨にします。  | 
|   [dist-tag](https://docs.npmjs.com/cli/dist-tag) (配布タグ)   |  パッケージ配布タグを変更します。  | 
|   [docs](https://docs.npmjs.com/cli/docs) (ドキュメンテーション)   |  パッケージのドキュメンテーション URL の場所を推測し、`--browser` config パラメータを使用して開こうとします。  | 
|   [doctor](https://docs.npmjs.com/cli/doctor) (ドクター)   |  一連のチェックを実行して、npm インストールで JavaScript パッケージを管理できることを確認します。  | 
|   [install](https://docs.npmjs.com/cli/install) (インストール)   |  パッケージをインストールします。  | 
|   [install-ci-test](https://docs.npmjs.com/cli/install-ci-test) (クリーンスレートインストールのテスト)   |  クリーンスレートでプロジェクトをインストールし、テストを実行します。エイリアス: `npm cit` このコマンドは、`npm ci` の直後に `npm test` を実行します。  | 
|   [install-test](https://docs.npmjs.com/cli/install-test) (インストールテスト)   |  パッケージをインストールしてテストを実行します。`npm install` の直後に `npm test` を実行します。  | 
|   [outdated](https://docs.npmjs.com/cli/outdated) (旧式)   |  設定されたレジストリをチェックして、インストールされているパッケージが古いかどうかを判断します。  | 
|   [ping](https://docs.npmjs.com/cli/ping) (旧式)   |  設定または指定された npm レジストリに ping を実行し、認証を検証します。  | 
|   [publish](https://docs.npmjs.com/cli/publish) (出力)   |  パッケージバージョンをレジストリに出力します。  | 
|   [update](https://docs.npmjs.com/cli/update) (アップデート)   |  パッケージのリポジトリ URL の場所を推測し、`--browser` config パラメータを使用して開こうとします。  | 
|   [view](https://docs.npmjs.com/cli/view) (表示)   |  パッケージメタデータの表示 メタデータプロパティの出力にも使用できます。  | 

### サポートされているクライアント側コマンド
<a name="supported-client-side-commands"></a>

以下のコマンドはパッケージリポジトリとの直接的なやりとりを必要としないため、CodeCatalyst はそのサポートのために何もする必要はありません。


****  

| コマンド | 説明 | 
| --- | --- | 
|   [bin (レガシー)](https://docs.npmjs.com/cli/v8/commands/npm-bin)   |  npm `bin` ディレクトリを表示します。  | 
|   [buid](https://docs.npmjs.com/cli/v6/commands/npm-build) (構築)   |  パッケージを構築します。  | 
|   [cache](https://docs.npmjs.com/cli/cache) (キャッシュ)   |  パッケージキャッシュを操作します。  | 
|   [completion](https://docs.npmjs.com/cli/completion) (完成)   |  すべての npm コマンドでタブ補完を有効にします。  | 
|   [config](https://docs.npmjs.com/cli/config) (設定)   |  ユーザーとグローバル `npmrc` ファイルのコンテンツを更新します。  | 
|   [depute](https://docs.npmjs.com/cli/dedupe) (代理)   |  ローカルパッケージツリーを検索し、依存関係をツリーの上位に移動することで構造を単純化しようとします。ツリーの上位ある依存関係は、複数の依存パッケージでより効果的に共有できます。  | 
|   [edit](https://docs.npmjs.com/cli/edit) (編集)   |  インストールされたパッケージを編集します。現在の作業ディレクトリ内の依存関係を選択し、パッケージフォルダをデフォルトのエディタで開きます。  | 
|   [explore](https://docs.npmjs.com/cli/explore) (調査)   |  インストールされているパッケージを参照します。指定されたインストール済みパッケージのディレクトリにサブシェルを生成します。コマンドが指定されている場合はサブシェルで実行され、すぐに終了します。  | 
|   [help](https://docs.npmjs.com/cli/help) (ヘルプ)   |  npm に関するヘルプを取得します。  | 
|   [help-search](https://docs.npmjs.com/cli/help-search) (ヘルプ検索)   |  npm ヘルプドキュメントを検索します。  | 
|   [init](https://docs.npmjs.com/cli/init) (初期)   |  `package.json` ファイルを作成します。  | 
|   [link](https://docs.npmjs.com/cli/link) (リンク)   |  パッケージディレクトリをシンボリックリンクします。  | 
|   [ls](https://docs.npmjs.com/cli/ls) (リスト)   |  インストールされているパッケージを一覧表示します。  | 
|   [pack](https://docs.npmjs.com/cli/pack) (パッケージ)   |  パッケージから tarball を作成します。  | 
|   [prefix](https://docs.npmjs.com/cli/prefix) (プレフィックス)   |  プレフィックスを表示します。これは、`-g` も指定されていない限り、`package.json` ファイルを格納する最も近い親ディレクトリです。  | 
|   [prune](https://docs.npmjs.com/cli/prune) (削除)   |  親パッケージの依存関係リストに一覧表示されていないパッケージを削除します。  | 
|   [rebuild](https://docs.npmjs.com/cli/rebuild) (再構築)   |  一致したフォルダに対して `npm build` コマンドを実行します。  | 
|   [restart](https://docs.npmjs.com/cli/restart) (再起動)   |  パッケージの停止、再起動、開始スクリプト、および関連する前後のスクリプトを実行します。  | 
|   [root](https://docs.npmjs.com/cli/root) (ルート)   |  実際の `node_modules` フォルダをデフォルト出力に印刷します。  | 
|   [run-script](https://docs.npmjs.com/cli/run-script) (スクリプト実行)   |  任意のパッケージスクリプトを実行します。  | 
|   [shrinkwrap](https://docs.npmjs.com/cli/shrinkwrap) (収縮包装)   |  パブリケーションの依存関係バージョンをロックダウンします。  | 
|   [uninstall](https://docs.npmjs.com/cli/uninstall) (アンインストール)   |  パッケージをアンインストールします。  | 

### サポートされていないコマンド
<a name="unsupported-commands"></a>

以下の `npm` コマンドは、CodeCatalyst パッケージリポジトリではサポートされていません。


****  

| コマンド | 説明 | 注意事項 | 
| --- | --- | --- | 
|   [access](https://docs.npmjs.com/cli/access) (アクセス)   |  公開パッケージのアクセスレベルを設定します。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なるアクセス許可モデルを使用します。  | 
|   [adduser](https://docs.npmjs.com/cli/adduser)   |  レジストリユーザーアカウントを追加します。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なるユーザーモデルを使用します。  | 
|   [audit](https://docs.npmjs.com/cli/audit) (監査)   |  セキュリティ監査を実行します。  |  CodeCatalyst は現在、セキュリティ脆弱性データを提供していません。  | 
|   [hook](https://docs.npmjs.com/cli/v9/commands/npm-hook) (フック)   |  追加、削除、リスト、更新など、npm フックを管理します。  |  CodeCatalyst は現在、いかなる種類の変更通知メカニズムもサポートしていません。  | 
|   [login](https://docs.npmjs.com/cli-commands/adduser.html) (ログイン)   |  ユーザーを認証します。これは `npm adduser` のエイリアスです。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なる認証モデルを使用します。詳細については、「[CodeCatalyst で npm を設定する](#npm-configure)」を参照してください。  | 
|   [logout](https://docs.npmjs.com/cli/logout) (サインアウト)   |  レジストリからサインアウトします。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なる認証モデルを使用します。CodeCatalyst リポジトリからサインアウトする方法はありませんが、認証トークンは、設定可能な有効期限後に期限切れになります。デフォルトのトークンの期間は 12 時間です。  | 
|   [owner](https://docs.npmjs.com/cli/owner) (オーナー)   |  パッケージの所有者を管理します。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なるアクセス許可モデルを使用します。  | 
|   [profile](https://docs.npmjs.com/cli/profile) (プロファイル)   |  レジストリプロファイルの設定を変更します。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なるユーザーモデルを使用します。  | 
|   [search](https://docs.npmjs.com/cli/search) (検索)   |  検索語に一致するパッケージをレジストリで検索します。  |  CodeCatalyst は `search` コマンドをサポートしていません。  | 
|   [star](https://docs.npmjs.com/cli/star) (星)   |  お気に入りのパッケージをマークします。  |  CodeCatalyst は現在、お気に入りメカニズムをサポートしていません。  | 
|   [stars](https://docs.npmjs.com/cli/stars) (星)   |  お気に入りとしてマークされたパッケージを表示します。  |  CodeCatalyst は現在、お気に入りメカニズムをサポートしていません。  | 
|   [team](https://docs.npmjs.com/cli/team) (チーム)   |  チームとチームメンバーシップを管理します。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なるユーザーおよびグループのメンバーシップモデルを使用します。  | 
|   [token](https://docs.npmjs.com/cli/token) (トークン)   |  認証トークンを管理します。  |  CodeCatalyst は、認証トークンを取得するために別のモデルを使用します。詳細については、「[CodeCatalyst で npm を設定する](#npm-configure)」を参照してください。  | 
|   [unpublished](https://docs.npmjs.com/cli/unpublish)   |  レジストリからパッケージを削除します。  |  CodeCatalyst では、npm クライアントをリポジトリからパッケージのバージョンを削除できません。パッケージはコンソールで削除できます。  | 
|   [whoami](https://docs.npmjs.com/cli/whoami) (私は誰)   |  npm ユーザー名を表示します。  |  CodeCatalyst は、パブリック npmjs リポジトリとは異なるユーザーモデルを使用します。  | 

# npm タグ処理
<a name="packages-npm-tags"></a>

npm レジストリは *タグ* をサポートしており、これはパッケージバージョンの文字列エイリアスです。バージョン番号の代わりにタグを使用して、エイリアスを指定できます。例えば、複数の開発ストリームを持つプロジェクトがあり、ストリームごとに異なるタグ (`stable`、`beta`、`dev`、`canary` など) を使用する場合があります。詳細については、*npm Docs* 上の「[dist-tag](https://docs.npmjs.com/cli/dist-tag)」を参照してください。

デフォルトでは、npm は `latest` タグを使用して、パッケージの現在のバージョンを識別します。`npm install pkg` (`@version` または `@tag` 指定子なし) は latest タグをインストールします。プロジェクトでは通常、安定版リリースバージョンに対してのみ、latest タグが使用されます。他のタグは、不安定版またはプレリリースバージョンに使用されます。

## npm クライアントでタグを編集する
<a name="editing-tags-with-the-npm-client"></a>

 3 つの `npm dist-tag` コマンド (`add`、`rm`、`ls`) は、CodeCatalyst パッケージリポジトリで[デフォルトの npm レジストリ](https://registry.npmjs.com/)内と同様に機能します。

## npm タグと上流リポジトリ
<a name="packages-tags-and-upstreams"></a>

`npm` がパッケージのタグを要求し、そのパッケージのバージョンがアップストリームリポジトリにも存在する場合、CodeCatalyst はタグをマージしてからクライアントに返します。例えば、`R` という名前のリポジトリには、`U` という名前のアップストリームリポジトリがあります。次の表は、両方のリポジトリに存在する `web-helper` という名前のパッケージのタグを示しています。


****  

| Repository | パッケージ名 | パッケージタグ | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *latest* (バージョン 1.0.0 のエイリアス)  | 
|  U  |  `web-helper`  |   *alpha* (バージョン 1.0.1 のエイリアス)  | 

この場合、npm クライアントがリポジトリ `R` の `web-helper` パッケージのタグを取得すると、*latest* と *alpha* 両方のタグが返されます。タグが指すバージョンは変更されません。

アップストリームリポジトリとローカルリポジトリの両方で同じタグが同じパッケージに存在する場合、*最後に更新された*タグが使用されます。例えば、*ウェブヘルパー* 上のタグが次のように変更したとします。


****  

| Repository | パッケージ名 | パッケージタグ | 最終更新日 | 
| --- | --- | --- | --- | 
|  R  |  `web-helper`  |   *latest* (バージョン 1.0.0 のエイリアス)  |  2023 年 1 月 1 日  | 
|  U  |  `web-helper`  |   *latest* (バージョン 1.0.1 のエイリアス)  |  2023 年 6 月 1 日  | 

この場合、npm クライアントがリポジトリ `R` からパッケージ *web-helper* のタグを取得すると、*latest* タグによってバージョン *1.0.1* に別名が付けられます。これが最後に更新されているためです。これにより、アップストリームリポジトリにあり、ローカルリポジトリにまだ存在していない新しいパッケージバージョンを、`npm update` を実行して簡単に使用できるようになります。

# Mavenを使う
<a name="packages-maven"></a>

Mavenリポジトリ形式は Java、Kotlin、Scala、Clojureなど、さまざまな言語で使用されています。Maven、Gradle、Scala SBT、Apache Ivy、Leiningenなど、さまざまなビルドツールでサポートされています。

以下のバージョンについて、CodeCatalyst との互換性をテストし、確認済みです。
+ 最新の **Maven** バージョン: 3.6.3。
+ **Gradle** の最新バージョン: 6.4.1。バージョン 5.5.1 もテスト済みです。

**Topics**
+ [Gradle Groovy を設定して使用する](packages-maven-gradle.md)
+ [mvn を設定して使用する](packages-maven-mvn.md)
+ [curl を使用してパッケージを公開する](packages-maven-curl.md)
+ [Maven チェックサムとスナップショットを使用する](packages-maven-checksums-snapshots.md)

# Gradle Groovy を設定して使用する
<a name="packages-maven-gradle"></a>

CodeCatalyst で Gradle Groovy を使用するには、Gradle Groovy をパッケージリポジトリに接続し、認証用の個人用アクセストークン (PAT) を提供する必要があります。Gradle Groovy をパッケージリポジトリに接続する手順については、CodeCatalyst コンソールで確認できます。

**Contents**
+ [CodeCatalyst から依存関係を取得する](#gradle-fetch-dependencies)
+ [CodeCatalyst からプラグインを取得する](#gradle-fetch-plugins)
+ [CodeCatalyst を使用して外部パッケージリポジトリからパッケージを取得する](#gradle-install-public)
+ [CodeCatalyst にパッケージを公開する](#gradle-publish-packages)
+ [IntelliJ IDEA で Gradle ビルドを実行する](#gradle-intellij)
  + [方法 1: PAT を `gradle.properties` に入れる](#gradle-intellij-gradle-properties)
  + [方法 2: PAT を別のファイルに入れる](#gradle-intellij-file)

## CodeCatalyst から依存関係を取得する
<a name="gradle-fetch-dependencies"></a>

次の手順では、CodeCatalyst パッケージリポジトリの依存関係を取得するように Gradle Groovy を設定する方法を説明します。

**Gradle Groovy を使用して CodeCatalyst パッケージリポジトリから依存関係を取得するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトに移動します。

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[Gradle Groovy]** を選択します。

1. CodeCatalyst で Gradle Groovy を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. アクセス認証情報を使用して、gradle プロパティファイルを更新します。*username* を CodeCatalyst のユーザー名に置き換え、*PAT* を CodeCatalyst の個人用アクセストークンに置き換えます。*spaceUsername* と *spacePassword* には任意の値を使用できます。ただし、以下のステップで同じ値を使用してください。

   ```
   spaceUsername=username
   spacePassword=PAT
   ```

1. Gradle ビルドで CodeCatalyst から依存関係を取得するには、`maven` コードスニペットをコピーしてプロジェクトの `build.gradle` ファイル内の `repositories` セクションに追加します。次の値を置き換えます。*spaceName* には任意の値を使用できます。ただし、以下のステップで同じ値を使用してください。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   maven {
     name = 'spaceName'
     url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
     credentials(PasswordCredentials)
   }
   ```

1. (オプション) CodeCatalyst パッケージリポジトリをプロジェクトの依存関係の唯一のソースとして使用するには、リポジトリの他のセクションを `build.gradle` ファイルから削除します。複数のリポジトリがある場合、Gradle はリストされている順序で各リポジトリの依存関係を検索します。

## CodeCatalyst からプラグインを取得する
<a name="gradle-fetch-plugins"></a>

デフォルトでは、Gradle はパブリック [Gradle Plugin Portal](https://plugins.gradle.org/) からプラグインを解決します。次のステップでは、CodeCatalyst パッケージリポジトリからプラグインを解決するように Gradle プロジェクトを設定します。

**Gradle を使用して CodeCatalyst パッケージリポジトリからプラグインを取得するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトに移動します。

1. ナビゲーションペインで、[**Packages (パッケージ)**] を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[Gradle]** を選択します。

1. CodeCatalyst で Gradle を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. アクセス認証情報を使用して、gradle プロパティファイルを更新します。*username* を CodeCatalyst のユーザー名に置き換え、*PAT* を CodeCatalyst の個人用アクセストークンに置き換えます。*spaceUsername* と *spacePassword* には任意の値を使用できます。ただし、以下のステップで同じ値を使用してください。

   ```
   spaceUsername=username
   spacePassword=PAT
   ```

1. `pluginManagement` ブロックを `settings.gradle` ファイルに追加します。`pluginManagement` ブロックは、`settings.gradle` の他のステートメントの前に置く必要があります。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *spaceName* を前のステップで使用した名前値に置き換えます。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   pluginManagement {
       repositories {
           maven {
               name = 'spaceName'
               url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
               credentials(PasswordCredentials)
           }
       }
   }
   ```

   これにより、Gradle は指定したリポジトリからプラグインを解決します。一般的に必要な Gradle プラグインをビルドで使用できるように、リポジトリには Gradle Plugin Portal(`gradle-plugins-store`) への接続が設定されたアップストリームリポジトリが必要です。詳細については、[Gradle ドキュメント](https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories) を参照してください。

## CodeCatalyst を使用して外部パッケージリポジトリからパッケージを取得する
<a name="gradle-install-public"></a>

Maven パッケージは、CodeCatalyst リポジトリを介してパブリックリポジトリからインストールできます。これを行うには、ゲートウェイリポジトリを表すゲートウェイへのアップストリーム接続を使用してリポジトリを設定します。ゲートウェイリポジトリからインストールされたパッケージは、CodeCatalyst リポジトリに取り込まれて保存されます。

CodeCatalyst は、以下の Maven パッケージリポジトリをサポートしています。
+ maven-central-gateway
+ google-android-gateway
+ gradle-plugins-gateway
+ commonsware-gateway

**パブリック Maven パッケージリポジトリからパッケージをインストールするには**

1. まだ設定していない場合は、「[CodeCatalyst から依存関係を取得する](#gradle-fetch-dependencies)」または「[CodeCatalyst からプラグインを取得する](#gradle-fetch-plugins)」の手順に従って CodeCatalyst パッケージリポジトリで Gradle を設定します。

1. リポジトリに、インストール元のゲートウェイリポジトリがアップストリーム接続として追加されていることを確認します。これを行うには、「[アップストリームリポジトリを追加する](packages-upstream-repositories-add.md)」の手順に従い、アップストリームとして追加するパブリックパッケージリポジトリを選択します。

アップストリームリポジトリからのパッケージのリクエストの詳細については、「[アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)」を参照してください。

## CodeCatalyst にパッケージを公開する
<a name="gradle-publish-packages"></a>

このセクションでは、Gradle でビルドされた Java ライブラリを CodeCatalyst リポジトリに公開する方法を説明します。

**Gradle Groovy を使用して CodeCatalyst パッケージリポジトリにパッケージを公開するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトの概要ページで、**[パッケージ]** を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[Gradle Groovy]** を選択します。

1. CodeCatalyst で Gradle を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. アクセス認証情報を使用して、gradle プロパティファイルを更新します。*username* を CodeCatalyst のユーザー名に置き換え、*PAT* を CodeCatalyst の個人用アクセストークンに置き換えます。*spaceUsername* と *spacePassword* には任意の値を使用できます。ただし、以下のステップで同じ値を使用してください。

   ```
   spaceUsername=username
   spacePassword=PAT
   ```

1. `maven-publish` プラグインをプロジェクトの `build.gradle` ファイルの `plugins` セクションに追加します。

   ```
   plugins {
       id 'java-library'
       id 'maven-publish'
   }
   ```

1. 次に、`publishing` セクションをプロジェクト `build.gradle` ファイルに追加します。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   publishing {
       publications {
           mavenJava(MavenPublication) {
               groupId = 'group-id'
               artifactId = 'artifact-id'
               version = 'version'
               from components.java
           }
       }
       repositories {
           maven {
               name = 'spaceName'
               url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
               credentials(PasswordCredentials)
           }
       }
   }
   ```

   `maven-publish` プラグインは、`publishing` セクションで指定された `groupId`、`artifactId` および `version` に基づいて POM ファイルを生成します。

1. これらの `build.gradle` への変更が完了したら、次のコマンドを実行してプロジェクトをビルドし、それをリポジトリにアップロードします。

   ```
   ./gradlew publish
   ```

1. CodeCatalyst コンソールでパッケージリポジトリに移動し、パッケージが正常に公開されたことを確認します。パッケージは、パッケージリポジトリの **[パッケージ]** リストに表示されます。

詳細については、Gradle ウェブサイトで以下のトピックを参照してください。
+  [Java ライブラリの構築](https://guides.gradle.org/building-java-libraries/) 
+  [プロジェクトをモジュールとして公開する](https://docs.gradle.org/current/userguide/publishing_setup.html) 

## IntelliJ IDEA で Gradle ビルドを実行する
<a name="gradle-intellij"></a>

IntelliJ IDEAで、CodeCatalyst から依存関係をプルする Gradle ビルドを実行できます。CodeCatalyst で Gradle を認証するには、個人用アクセストークン (PAT) を使用する必要があります。CodeCatalyst PAT は、`gradle.properties` または別の任意のファイルに保存できます。

### 方法 1: PAT を `gradle.properties` に入れる
<a name="gradle-intellij-gradle-properties"></a>

`gradle.properties` ファイルを使用しておらず、その内容を PAT で上書きできる場合は、この方法を使用します。`gradle.properties` を使用している場合は、この方法を変更して、ファイルの内容を上書きするのではなく、PAT を追加します。

**注記**  
この例は `GRADLE_USER_HOME` にある `gradle.properties` ファイルを示します。

まず、PAT がない場合は作成します。

**個人アクセストークン (PAT) を作成するには**

1. 上部のメニューバーでプロファイルバッジを選択し、**[My 設定]** を選択します。
**ヒント**  
ユーザープロファイルは、プロジェクトまたはスペースのメンバーページに移動し、メンバーリストから名前を選択することで見つけることができます。

1. **[PAT 名]** に、チームのわかりやすい名前を入力します。

1. **[有効期限]** では、デフォルトの日付のままにしておくか、カレンダーアイコンを選択して、カスタムの日付を選択します。有効期限のデフォルトは、現在の日付から 1 年です。

1. **[作成]** を選択します。

   このトークンは、ソースリポジトリの **[クローンリポジトリC]** を選択したときにも作成できます。

1. PAT シークレットを安全な場所に保存します。
**重要**  
PAT シークレットは 1 回だけ表示されます。ウィンドウを閉じると、再表示できなくなります。

続いて、次のスニペットを使用して `build.gradle` ファイルを更新します。

```
repositories {
    maven {
        name = 'spaceName'
        url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
        credentials(PasswordCredentials)
    }
}
```

### 方法 2: PAT を別のファイルに入れる
<a name="gradle-intellij-file"></a>

この方法は、`gradle.properties` ファイルを修正したくない場合に使用します。

まず、PAT がない場合は作成します。

**個人アクセストークン (PAT) を作成するには**

1. 上部のメニューバーでプロファイルバッジを選択し、**[My 設定]** を選択します。
**ヒント**  
ユーザープロファイルは、プロジェクトまたはスペースのメンバーページに移動し、メンバーリストから名前を選択することで見つけることができます。

1. **[PAT 名]** に、チームのわかりやすい名前を入力します。

1. **[有効期限]** では、デフォルトの日付のままにしておくか、カレンダーアイコンを選択して、カスタムの日付を選択します。有効期限のデフォルトは、現在の日付から 1 年です。

1. **[作成]** を選択します。

   このトークンは、ソースリポジトリの **[クローンリポジトリC]** を選択したときにも作成できます。

1. PAT シークレットを安全な場所に保存します。
**重要**  
PAT シークレットは 1 回だけ表示されます。ウィンドウを閉じると、再表示できなくなります。

**PAT を別のファイルに入れるには**

1. 次のスニペットを使用して `build.gradle` ファイルを更新します。*space\$1name*、*proj\$1name*、*repo\$1name* を CodeCatalyst のユーザー名、スペース名、プロジェクト名、パッケージリポジトリ名に置き換えます。

   ```
   def props = new Properties()
   file("fileName").withInputStream { props.load(it) }
                     
   repositories {
           maven {
               name = 'spaceName'
               url = uri('https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/')
               credentials(PasswordCredentials)
           }
       }
   }
   ```

1. `build.gradle` ファイルで指定したファイルに PAT を書き込みます。

   ```
   echo "codecatalystArtifactsToken=PAT" > fileName
   ```

# mvn を設定して使用する
<a name="packages-maven-mvn"></a>

Maven ビルドを実行するには、`mvn` コマンドを使用します。パッケージリポジトリを使用し、認証用の個人用アクセストークン (PAT) を提供するように `mvn` を設定する必要があります。

**Contents**
+ [CodeCatalyst から依存関係を取得する](#mvn-fetch-dependencies)
+ [CodeCatalyst を使用して外部パッケージリポジトリからパッケージを取得する](#mvn-install-public)
+ [CodeCatalyst にパッケージを公開する](#mvn-publish-packages)
+ [サードパーティーパッケージを公開する](#publishing-third-party-packages)

## CodeCatalyst から依存関係を取得する
<a name="mvn-fetch-dependencies"></a>

`mvn` を設定して CodeCatalyst リポジトリから依存関係を取得するには、Maven 設定ファイル `settings.xml` と、オプションでプロジェクトの Project Model Object (POM) を編集する必要があります。POM ファイルには、依存関係、ビルドディレクトリ、ソースディレクトリ、テストソースディレクトリ、プラグイン、目標など、Maven がプロジェクトを構築するためのプロジェクトに関する情報と設定情報が含まれています。

**`mvn` を使用して CodeCatalyst パッケージリポジトリから依存関係を取得するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトの概要ページで、**[パッケージ]** を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[mvn]** を選択します。

1. CodeCatalyst で `mvn` を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. リポジトリを含むプロファイルを `settings.xml` ファイルに追加します。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   <profiles>
     <profile>
       <id>repo_name</id>
       <activation>
           <activeByDefault>true</activeByDefault>
       </activation>
       <repositories>
           <repository>
             <id>repo_name</id>
             <url>https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/</url>
           </repository>
       </repositories>
     </profile>
   </profiles>
   ```

1. `settings.xml` ファイル内のサーバーのリストにサーバーを追加します。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。
   + *username* を CodeCatalyst のユーザー名に置き換えます。
   + *PAT* を CodeCatalyst の PAT に置き換えます。

   ```
   <servers>
     <server>
       <id>repo_name</id>
       <username>username</username>
       <password>PAT</password>
     </server>
   </servers>
   ```

1. (オプション) すべての接続をキャプチャし、ゲートウェイリポジトリではなくリポジトリにルーティングするミラーを `settings.xml` ファイルに設定します。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   <mirrors>
     <mirror>
       <id>repo_name</id>
       <name>repo_name</name>
       <url>https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/</url>
       <mirrorOf>*</mirrorOf>
     </mirror>
   </mirrors>
   ```

**重要**  
`<id>` 要素にある任意の値を使用できますが、`<server>` および `<repository>` 要素の両方で同じでなければなりません。これにより、指定された認証情報を CodeCatalyst へのリクエストに含めることができます。

これらの設定変更を行った後、プロジェクトを構築できます。

```
mvn compile
```

## CodeCatalyst を使用して外部パッケージリポジトリからパッケージを取得する
<a name="mvn-install-public"></a>

Maven パッケージは、CodeCatalyst リポジトリを介してパブリックリポジトリからインストールできます。これを行うには、ゲートウェイリポジトリを表すゲートウェイへのアップストリーム接続を使用してリポジトリを設定します。ゲートウェイリポジトリからインストールされたパッケージは、CodeCatalyst リポジトリに取り込まれて保存されます。

現在、CodeCatalyst は、次のパブリック Maven パッケージリポジトリをサポートしています。
+ maven-central-gateway
+ google-android-gateway
+ gradle-plugins-gateway
+ commonsware-gateway

**パブリック Maven パッケージリポジトリからパッケージをインストールするには**

1. まだ設定していない場合は、「[CodeCatalyst から依存関係を取得する](#mvn-fetch-dependencies)」の手順に従って CodeCatalyst パッケージリポジトリで `mvn` を設定します。

1. リポジトリに、インストール元のゲートウェイリポジトリがアップストリーム接続として追加されていることを確認します。どのアップストリームソースが追加されているかをチェックする、またはゲートウェイリポジトリをアップストリームソースとして追加するには、「[アップストリームリポジトリを追加する](packages-upstream-repositories-add.md)」の手順に従います。

アップストリームリポジトリからのパッケージのリクエストの詳細については、「[アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)」を参照してください。

## CodeCatalyst にパッケージを公開する
<a name="mvn-publish-packages"></a>

`mvn` で Maven パッケージを CodeCatalyst リポジトリに公開するには、`~/.m2/settings.xml` およびプロジェクト POM も編集する必要があります。

**`mvn` を使用して CodeCatalyst パッケージリポジトリにパッケージを公開するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトの概要ページで、**[パッケージ]** を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[mvn]** を選択します。

1. CodeCatalyst で `mvn` を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. PAT を使用してローカルマシンの環境変数を設定します。`setting.xml` ファイルでこの環境変数を使用します。

   ```
   export CODECATALYST_ARTIFACTS_TOKEN=your_PAT
   ```

1. `CodeCatalyst_ARTIFACTS_TOKEN` 環境変数を参照して `<servers>` セクションを `settings.xml` に追加し、Maven が HTTP リクエストで トークンを渡すようにします。

   ```
   <settings>
   ...
       <servers>
           <server>
               <id>repo-name</id>
               <username>username</username>
               <password>${env.CodeCatalyst_ARTIFACTS_TOKEN}</password>
           </server>
       </servers>
   ...
   </settings>
   ```

1. `<distributionManagement>` セクションをプロジェクトの `pom.xml` に追加します。

   ```
   <project>
   ...
        <distributionManagement>
            <repository>
                <id>repo_name</id>
                <name>repo_name</name>
                <url>https://packages.region.codecatalyst.aws/maven/space_name/proj_name/repo_name/</url>
            </repository>
        </distributionManagement>
   ...
   </project>
   ```

これらの設定変更を行った後、プロジェクトを構築して指定したリポジトリに公開できます。

```
mvn deploy
```

CodeCatalyst コンソールでパッケージリポジトリに移動して、パッケージが正常に公開されたことを確認できます。

## サードパーティーパッケージを公開する
<a name="publishing-third-party-packages"></a>

`mvn deploy:deploy-file` を使用して、サードパーティー Maven パッケージを CodeCatalyst リポジトリに公開できます。これは、パッケージを公開したいが、JAR ファイルしかなく、パッケージソースコードや POM ファイルにアクセスできない場合に役に立ちます。

`mvn deploy:deploy-file` コマンド は、コマンドラインで渡された情報に基づいて POM ファイルを生成します。

まず、PAT がない場合は作成します。

**個人アクセストークン (PAT) を作成するには**

1. 上部のメニューバーでプロファイルバッジを選択し、**[My 設定]** を選択します。
**ヒント**  
ユーザープロファイルは、プロジェクトまたはスペースのメンバーページに移動し、メンバーリストから名前を選択することで見つけることができます。

1. **[PAT 名]** に、チームのわかりやすい名前を入力します。

1. **[有効期限]** では、デフォルトの日付のままにしておくか、カレンダーアイコンを選択して、カスタムの日付を選択します。有効期限のデフォルトは、現在の日付から 1 年です。

1. **[作成]** を選択します。

   このトークンは、ソースリポジトリの **[クローンリポジトリC]** を選択したときにも作成できます。

1. PAT シークレットを安全な場所に保存します。
**重要**  
PAT シークレットは 1 回だけ表示されます。ウィンドウを閉じると、再表示できなくなります。

**サードパーティーの Maven パッケージを公開するには**

1. 次のコンテンツを含む `~/.m2/settings.xml` ファイルを作成します。

   ```
   <settings>
       <servers>
           <server>
               <id>repo_name</id>
               <username>username</username>
               <password>PAT}</password>
           </server>
       </servers>
   </settings>
   ```

1. `mvn deploy:deploy-file` コマンドを実行します。

   ```
   mvn deploy:deploy-file -DgroupId=commons-cli          \
   -DartifactId=commons-cli       \
   -Dversion=1.4                  \
   -Dfile=./commons-cli-1.4.jar   \
   -Dpackaging=jar                \
   -DrepositoryId=repo-name      \
   -Durl=https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/
   ```
**注記**  
上記の例では、`commons-cli 1.4` を公開しています。groupId、artifactID、version、およびファイルの引数を変更して、別の JAR を公開します。

この手順は、*Apache Maven ドキュメント* の [サードパーティの JAR をリモートリポジトリにデプロイするためのガイド](https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html) の例に基づいています。

 詳細については、Apache Maven プロジェクトウェブサイトの以下のトピックを参照してください。
+  [複数のリポジトリの設定](https://maven.apache.org/guides/mini/guide-multiple-repositories.html) 
+  [設定リファレンス](https://maven.apache.org/settings.html) 
+  [ディストリビューション管理](https://maven.apache.org/pom.html#Distribution_Management) 
+  [プロファイル](https://maven.apache.org/pom.html#Profiles) 

# curl を使用してパッケージを公開する
<a name="packages-maven-curl"></a>

このセクションでは、HTTP クライアント `curl` を使用して、Maven パッケージを CodeCatalyst パッケージリポジトリに公開する方法を説明します。`curl` を使用したパッケージの公開は、Maven クライアントを環境にインストールしていない、またはインストールしたくない場合に便利です。

**`curl` を使用して Maven パッケージを公開するには**

1. CodeCatalyst で `curl` を認証するには、個人用アクセストークン (PAT) を環境変数に保存する必要があります。トークンが既にある場合はそれを使用できます。そうでない場合は、作成して環境変数を設定できます。

   1. 「[個人用アクセストークンを使用してリポジトリアクセスをユーザーに付与する](ipa-tokens-keys.md)」の手順に従って、PAT を作成します。PAT をコピーして環境変数に保存します。

   1. ローカルマシンのコマンドラインで、PAT を使用して環境変数を設定します。

      ```
      export CodeCatalyst_ARTIFACTS_TOKEN=your_PAT
      ```

1. 次の `curl` コマンドを使用して、JAR を CodeCatalyst リポジトリに公開します。*username*、*space\$1name*、*proj\$1name*、*repo\$1name* を CodeCatalyst のユーザー名、スペース名、プロジェクト名、パッケージリポジトリ名に置き換えます。

   ```
   curl --request PUT https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/com/mycompany/app/my-app/1.0/my-app-1.0.jar \
        --user "username:CodeCatalyst_ARTIFACTS_TOKEN" --header "Content-Type: application/octet-stream" \
        --data-binary @target/path/to/my-app-1.0.jar
   ```

1. 次の `curl` コマンドを使用して、POM を CodeCatalyst リポジトリに公開します。*username*、*space\$1name*、*proj\$1name*、*repo\$1name* を CodeCatalyst のユーザー名、スペース名、プロジェクト名、パッケージリポジトリ名に置き換えます。

   ```
   curl --request PUT https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/com/mycompany/app/my-app/1.0/my-app-1.0.pom \
        --user "username:CodeCatalyst_ARTIFACTS_TOKEN" --header "Content-Type: application/octet-stream" \
        --data-binary @target/my-app-1.0.pom
   ```

1. この時点で、Maven パッケージは `Unfinished` のステータスで CodeCatalyst リポジトリにあります。パッケージを消費できるようにするには、パッケージが `Published` のステータスである必要があります。パッケージを `Unfinished` から `Published` に切り替えるには、`maven-metadata.xml` ファイルをパッケージにアップロードするか、CodeCatalyst コンソールでステータスを変更します。

   1.  オプション 1: 次の `curl` コマンドを使用して、`maven-metadata.xml` ファイルをパッケージに追加します。*username*、*space\$1name*、*proj\$1name*、*repo\$1name* を CodeCatalyst のユーザー名、スペース名、プロジェクト名、パッケージリポジトリ名に置き換えます。

      ```
      curl --request PUT https://packages.region.codecatalyst.aws/maven/space-name/proj-name/repo-name/com/mycompany/app/my-app/maven-metadata.xml \
           --user "username:CodeCatalyst_ARTIFACTS_TOKEN" --header "Content-Type: application/octet-stream" \
           --data-binary @target/maven-metadata.xml
      ```

      次に示すのは、`maven-metadata.xml` ファイルの内容の例です。

      ```
      <metadata modelVersion="1.1.0">
          <groupId>com.mycompany.app</groupId>
          <artifactId>my-app</artifactId>
          <versioning>
              <latest>1.0</latest>
              <release>1.0</release>
              <versions>
                  <version>1.0</version>
              </versions>
              <lastUpdated>20200731090423</lastUpdated>
          </versioning>
      </metadata>
      ```

   1.  オプション 2: CodeCatalyst コンソールでパッケージステータスを `Published` に更新します。パッケージバージョンのステータスを更新する方法については、「[パッケージバージョンのステータスの更新](working-with-packages-update-version-status.md)」を参照してください。

パッケージの JAR ファイルしかない場合は、`mvn` を使用して使用可能なパッケージ版を CodeCatalyst リポジトリに公開できます。これは、パッケージのソースコードまたは POM にアクセスできない場合に便利です。詳細については、「[サードパーティーパッケージを公開する](packages-maven-mvn.md#publishing-third-party-packages)」を参照してください。

# Maven チェックサムとスナップショットを使用する
<a name="packages-maven-checksums-snapshots"></a>

以下のセクションでは、CodeCatalyst で Maven チェックサムと Maven スナップショットを使用する方法を説明します。

## Maven チェックサムの使用
<a name="maven-checksums"></a>

 Maven パッケージを CodeCatalyst パッケージリポジトリに公開すると、それぞれの*アセット*に関連付けられたチェックサムまたはパッケージ内のファイルを使用して、アップロードの検証が行われます。アセットの例は、*[jar]*、*[pom]* および *[war]* ファイルです。各アセットに対して、Maven パッケージには、アセット名に `md5` や `sha1` など追加の拡張子をつけた複数のチェックサムファイルが含まれています。例えば、`my-maven-package.jar` という名前のファイルのチェックサムファイルは `my-maven-package.jar.md5` および `my-maven-package.jar.sha1` である可能性があります。

 すべての Maven パッケージには `maven-metadata.xml` ファイルも含まれています。公開を成功させるには、このファイルをアップロードする必要があります。パッケージファイルのアップロード中にチェックサムの不一致が検出されると、公開は停止します。これにより、`maven-metadata.xml` のアップロードが妨げられる可能性があります。このような場合、Maven パッケージのステータスは `Unfinished` に設定されます。このステータスのパッケージの一部であるアセットはダウンロードできません。

Maven パッケージを公開するときにチェックサムの不一致が発生した場合は、次の点に注意してください。
+  `maven-metadata.xml` がアップロードされる前にチェックサムのミスマッチが発生した場合は、パッケージのステータスは `Unfinished` に設定されません。パッケージは表示されず、アセットは消費できません。このような場合は、次のいずれかを試してから、もう一度アセットをダウンロードしてみてください。
  + Maven パッケージを公開するコマンドを再度実行します。これは、ダウンロード中にネットワークの問題によってチェックサムファイルが破損した場合に、役立つ可能性があります。再試行でネットワークの問題が解決された場合は、チェックサムが一致し、ダウンロードが成功します。
  +  Maven パッケージの再公開がうまくいかない場合は、パッケージを削除してから再公開します。
+  チェックサムの不一致が、`maven-metadata.xml` のアップロードされた後に起こった場合は、パッケージのステータスが `Published` に設定されます。チェックサムの不一致を含むすべてのアセットをパッケージから消費できます。アセットをダウンロードすると、CodeCatalyst によって生成されたチェックサムがそのアセットとともにダウンロードされます。ダウンロードしたファイルがチェックサムの不一致に関連付けられている場合、ダウンロードされたチェックサムファイルは、パッケージの公開時にアップロードされたチェックサムと一致しない可能性があります。

## Maven スナップショットを使用する
<a name="maven-snapshots"></a>

 Maven *スナップショット* は、最新のプロダクションブランチコードを参照する Maven パッケージの特別なバージョンです。これは最終リリース版に先行する開発版です。Maven パッケージのスナップショットバージョンは、パッケージバージョンに追加されているサフィックス `SNAPSHOT` で識別できます。例えば、バージョン `1.1` のスナップショットは `1.1-SNAPSHOT` です。詳細については、Apache Maven プロジェクトウェブサイト上の [スナップショットバージョンとは何ですか？](https://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_version) を参照してください。

 CodeCatalyst では、Maven スナップショットの公開と使用をサポートしています。Maven スナップショットは、CodeCatalyst リポジトリに公開できます。または、直接接続している場合は、アップストリームリポジトリに公開できます。ただし、パッケージリポジトリとそのアップストリームリポジトリの両方に 1 つのスナップショットバージョンを公開することはできません。例えば、バージョン `1.2-SNAPSHOT` を持つ Maven パッケージをパッケージリポジトリにアップロードした場合、CodeCatalyst では、同じスナップショットバージョンを持つ Maven パッケージを、アップストリームリポジトリの１つにアップロードすることはできません。この場合、予測不可能な結果が返される可能性があります。

 Maven スナップショットが公開されると、その前のバージョンは、*ビルド* という新しいバージョンに保存されます。Maven スナップショットが公開されるたびに、新しいビルドバージョンが作成されます。スナップショットの以前のバージョンはすべて、ビルドバージョンで保持されます。Maven スナップショットが公開されると、そのステータスは `Published` に設定され、前のバージョンを含むビルドのステータスは `Unlisted` に設定されます。

 スナップショットをリクエストすると、ステータス `Published` を持つバージョンが返されます。これは常に Maven スナップショットの最新バージョンです。スナップショットの特定のビルドをリクエストすることもできます。

Maven スナップショットのすべてのビルドバージョンを削除するには、CodeCatalyst コンソールを使用します。

# NuGetを使う
<a name="packages-nuget"></a>

以下のトピックでは、CodeCatalyst を使用して `NuGet` パッケージを使用、公開する方法を説明します。

**注記**  
CodeCatalyst は [NuGet バージョン 4.8](https://docs.microsoft.com/en-us/nuget/release-notes/nuget-4.8-rtm) 以降をサポートしています。

**Topics**
+ [Visual Studio で CodeCatalyst を使用する](packages-nuget-visual-studio.md)
+ [nuget CLI または dotnet CLI を設定して使用する](packages-nuget-cli.md)
+ [NuGet パッケージ名、バージョン、アセット名の正規化](nuget-name-normalization.md)
+ [NuGet の互換性](packages-nuget-compatibility.md)

# Visual Studio で CodeCatalyst を使用する
<a name="packages-nuget-visual-studio"></a>

 Visual Studio で CodeCatalyst からパッケージを直接使用できます。

`dotnet` や `nuget` などの CLI ツールで NuGet を設定して使用するには、「[nuget CLI または dotnet CLI を設定して使用する](packages-nuget-cli.md)」を参照してください。

**Contents**
+ [CodeCatalyst で Visual Studio を設定する](#packages-nuget-vs-configure)
  + [Server](#packages-nuget-vs-configure-windows)
  + [macOS](#packages-nuget-vs-configure-mac)

## CodeCatalyst で Visual Studio を設定する
<a name="packages-nuget-vs-configure"></a>

### Server
<a name="packages-nuget-vs-configure-windows"></a>

**CodeCatalyst で Visual Studio を設定するには**

1. CodeCatalyst で認証を行うには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。ない場合は、「[個人用アクセストークンを使用してリポジトリアクセスをユーザーに付与する](ipa-tokens-keys.md)」の手順に従って作成します。

1. `nuget` または `dotnet` を使用して、パッケージリポジトリと認証情報を設定します。

------
#### [ dotnet ]

   **Linux および MacOS のユーザー:** 暗号化は Windows 以外のプラットフォームではサポートされていないため、次のコマンドに `--store-password-in-clear-text` フラグを追加する必要があります。これにより、パスワードがプレーンテキストとして設定ファイルに保存されるため注意してください。

   ```
   dotnet nuget add source https://packages.region.codecatalyst.aws/nuget/space-name/proj-name/repo-name/v3/index.json --name repo_name --password PAT --username user_name
   ```

------
#### [ nuget ]

   ```
   nuget sources add -name repo_name -Source https://packages.region.codecatalyst.aws/nuget/space-name/proj-name/repo-name/v3/index.json -password PAT --username user_name
   ```

------

   出力の例:

   ```
   Package source with Name: repo_name added successfully.
   ```

1. 新しいパッケージソースを使用するように Visual Studio を設定します。Visual Studio で、**[ツール]**、**[オプション]** の順に選択します。

1. **[オプション]** メニューで、**[NuGet パッケージマネージャー]** セクションを展開し、**[パッケージソース]** を選択します。

1. **[利用可能なパッケージソース]** リストで、*[repo\$1name]* ソースが有効になっていることを確認します。NuGet Gallery へのアップストリーム接続でパッケージリポジトリを設定した場合は、**[nuget.org]** ソースを無効にします。

### macOS
<a name="packages-nuget-vs-configure-mac"></a>

**CodeCatalyst で Visual Studio を設定するには**

1. CodeCatalyst で認証を行うには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。ない場合は、「[個人用アクセストークンを使用してリポジトリアクセスをユーザーに付与する](ipa-tokens-keys.md)」の手順に従って作成します。

1. メニューバーで、**[ユーザー設定]** を選択します。

1. **[NuGet]** セクションで **[ソース]** を選択します。

1. **[追加]** を選択してリポジトリ情報を追加します。

   1. **[名前]** には、CodeCatalyst パッケージリポジトリ名を入力します。

   1. **[場所]** には、CodeCatalyst パッケージリポジトリエンドポイントを入力します。次のスニペットはエンドポイントの例を示しています。*space-name*、*proj-name*、*repo-name* を CodeCatalyst のスペース名、プロジェクト名、リポジトリ名に置き換えます。

      ```
      https://packages.region.codecatalyst.aws/nuget/space-name/proj-name/repo-name/
      ```

   1. **[ユーザー名]** には、有効な任意の値を入力します。

   1. **[パスワード]** には、PAT を入力します。

1. **[Add VOD source]** (VOD ソースを追加) をクリックします。

1. NuGet Gallery へのアップストリーム接続でパッケージリポジトリを設定した場合は、**[nuget.org]** ソースを無効にします。

設定後、Visual Studio は CodeCatalyst リポジトリまたはそのアップストリームリポジトリから、あるいはアップストリームソースとして設定した場合は [Nuget.org](https://www.nuget.org/) からパッケージを使用できます。Visual Studio での NuGet パッケージの参照とインストールの詳細については、*NuGet ドキュメント* の [NuGet パッケージマネージャーを使用して Visual Studio でパッケージをインストールして管理する](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio) を参照してください。

# nuget CLI または dotnet CLI を設定して使用する
<a name="packages-nuget-cli"></a>

`NuGet` および `dotnet` のような CLI ツールを使用して、CodeCatalyst からパッケージを公開して使用できます。このドキュメントでは、CLI ツールの設定と、それらを使用してパッケージを公開または使用する方法について説明します。

**Contents**
+ [CodeCatalyst で NuGet を設定する](#nuget-configure-cli)
+ [CodeCatalyst リポジトリから NuGet パッケージを使用する](#nuget-consume-cli)
+ [CodeCatalyst を介して NuGet.org から NuGet パッケージを使用する](#nuget-consume-nuget-gallery)
+ [CodeCatalyst に NuGet パッケージを公開する](#nuget-publish-cli)

## CodeCatalyst で NuGet を設定する
<a name="nuget-configure-cli"></a>

CodeCatalyst で NuGet を設定するには、NuGet 設定ファイルにリポジトリエンドポイントと個人用アクセストークンを追加して、`nuget` または `dotnet` に CodeCatalyst パッケージリポジトリへの接続を許可します。

**CodeCatalyst パッケージリポジトリで NuGet を設定するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトの概要ページで、**[パッケージ]** を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[NuGet]** または **[dotnet]** を選択します。

1. CodeCatalyst で NuGet を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. リポジトリの NuGet エンドポイントと CodeCatalyst PAT を使用するように `nuget` または `dotnet` を設定します。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *username* を CodeCatalyst のユーザー名に置き換えます。
   + *PAT* を CodeCatalyst の PAT に置き換えます。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   1. `nuget` では、`nuget sources add` コマンドを使用します。

      ```
      nuget sources add -name "repo_name" -Source "https://packages.region.codecatalyst.aws/nuget/space_name/proj_name/repo_name/v3/index.json" -username "username" -password "PAT"
      ```

   1. `dotnet` では、`dotnet nuget add source` コマンドを使用します。

      **Linux および MacOS のユーザー:** 暗号化は Windows 以外のプラットフォームではサポートされていないため、次のコマンドに `--store-password-in-clear-text` フラグを追加する必要があります。これにより、パスワードがプレーンテキストとして設定ファイルに保存されるため注意してください。

      ```
      dotnet nuget add source "https://packages.region.codecatalyst.aws/nuget/space_name/proj_name/repo_name/v3/index.json" -n "proj_name/repo_name" -u "username" -p "PAT" --store-password-in-clear-text
      ```

CodeCatalyst で NuGet を設定すると、CodeCatalyst リポジトリまたはそのアップストリームリポジトリの 1 つに保存されている [NuGet パッケージを使用](#nuget-consume-cli)できます。また、CodeCatalyst リポジトリに [NuGet パッケージを公開する](#nuget-publish-cli)こともできます。

## CodeCatalyst リポジトリから NuGet パッケージを使用する
<a name="nuget-consume-cli"></a>

[CodeCatalyst で NuGet を設定する](#nuget-configure-cli)と、CodeCatalyst リポジトリまたはそのアップストリームリポジトリの 1 つに保存されている NuGet パッケージを使用できます。

CodeCatalyst リポジトリまたはそのアップストリームリポジトリのいずれかから nuget または dotnet を使用してパッケージバージョンを使用するには、次のコマンドを実行します。*packageName* を使用するパッケージの名前に置き換え、*packageSourceName* を NuGet 設定ファイルの CodeCatalyst パッケージリポジトリのソース名に置き換えます。ソース名はリポジトリ名であるはずです。

**`dotnet` でパッケージをインストールするには**

```
dotnet add packageName --source packageSourceName
```

**`nuget` でパッケージをインストールするには**

```
nuget install packageName --source packageSourceName
```

詳細については、*Microsoft ドキュメント*の「[NuGet.exe CLI を使用して NuGet パッケージを管理する](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-nuget-cli)」または「[dotnet CLI を使用して NuGet パッケージをインストールし、管理する](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-dotnet-cli)」を参照してください。

## CodeCatalyst を介して NuGet.org から NuGet パッケージを使用する
<a name="nuget-consume-nuget-gallery"></a>

CodeCatalyst リポジトリを介して **Nuget.org** から NuGet パッケージを使用するには、[Nuget.org](https://www.nuget.org/) へのアップストリーム接続を設定します。**Nuget.org** から使用されたパッケージは、CodeCatalyst リポジトリに取り込まれて保存されます。

**NuGet.org からパッケージを使用するには**

1. まだ設定していない場合は、「[CodeCatalyst で NuGet を設定する](#nuget-configure-cli)」の手順に従って CodeCatalyst パッケージリポジトリで NuGet パッケージマネージャーを設定します。

1. リポジトリにアップストリーム接続として **NuGet.org** が追加されていることを確認します。追加されているアップストリームソースを確認するか、「[アップストリームリポジトリを追加する](packages-upstream-repositories-add.md)」の手順で **NuGet ストア**リポジトリを選択して、アップストリームソースとして **Nuget.org** を追加します。

## CodeCatalyst に NuGet パッケージを公開する
<a name="nuget-publish-cli"></a>

[CodeCatalyst で NuGet を設定](#nuget-configure-cli)すると、`nuget` または `dotnet` を使用して CodeCatalyst リポジトリにパッケージバージョンを公開できます。

パッケージバージョンを CodeCatalyst リポジトリにプッシュするには、次のコマンドを、`.nupkg` ファイルへのフルパスと NuGet 設定ファイル内の CodeCatalyst リポジトリのソース名を使用して実行します。

**`dotnet` でパッケージを公開するには**

```
dotnet nuget push path/to/nupkg/SamplePackage.1.0.0.nupkg --source packageSourceName
```

**`nuget` でパッケージを公開するには**

```
nuget push path/to/nupkg/SamplePackage.1.0.0.nupkg --source packageSourceName
```

# NuGet パッケージ名、バージョン、アセット名の正規化
<a name="nuget-name-normalization"></a>

CodeCatalyst は、パッケージ名、アセット名、パッケージのバージョンを保存する前に正規化します。つまり、CodeCatalyst の名前またはバージョンは、パッケージまたはアセットが公開されたときに提供されたものとは異なる場合があります。

**パッケージ名の正規化:** CodeCatalyst は、すべての文字を小文字に変換することで NuGet パッケージ名を正規化します。

**パッケージバージョンの正規化:** CodeCatalyst は NuGet と同じパターンを使用して NuGet パッケージのバージョンを正規化します。以下の情報は、NuGet ドキュメントの「[Normalized version numbers](https://docs.microsoft.com/en-us/nuget/concepts/package-versioning#normalized-version-numbers)」に記載されているものです。
+ 先頭の 0 はバージョン番号から削除されます。
  + `1.00` は `1.0` として扱われます。
  + `1.01.1` は `1.1.1` として扱われます。
  + `1.00.0.1` は `1.0.0.1` として扱われます。
+ バージョン番号の 4 番目の部分の 0 は省略されます。
  + `1.0.0.0` は `1.0.0` として扱われます。
  + `1.0.01.0` は `1.0.1` として扱われます。
+ SemVer 2.0.0 ビルドメタデータは削除されます。
  + `1.0.7+r3456` は `1.0.7` として扱われます。

**パッケージアセット名の正規化:** CodeCatalyst は、正規化されたパッケージ名とパッケージバージョンから NuGet パッケージアセット名を作成します。

# NuGet の互換性
<a name="packages-nuget-compatibility"></a>

 このガイドには、さまざまな NuGet ツールやバージョンとの CodeCatalyst の互換性に関する情報が含まれています。

**Topics**
+ [NuGet の一般的な互換性](#nuget-version-support)
+ [NuGet コマンドラインサポート](#nuget-command-line-support)

## NuGet の一般的な互換性
<a name="nuget-version-support"></a>

CodeCatalyst は NuGet 4.8 以降をサポートしています。

CodeCatalyst は NuGet HTTP プロトコルの V3 のみをサポートしています。これは、プロトコルの V2 に依存する一部の CLI コマンドはサポートされていないことを意味します。詳細については、次の「[nuget コマンドのサポート](#nuget-command-support)」セクションを参照してください。

CodeCatalyst は PowerShellGet 2.x をサポートしていません。

## NuGet コマンドラインサポート
<a name="nuget-command-line-support"></a>

CodeCatalyst は、NuGet (`nuget`) および .NET Core (`dotnet`) の CLI ツールをサポートしています。

### nuget コマンドのサポート
<a name="nuget-command-support"></a>

CodeCatalyst は NuGet の HTTP プロトコルの V3 のみをサポートしているため、CodeCatalyst リソースに対して次のコマンドを使用しても機能しません。
+ `list`: `nuget list` コマンド は、指定したソースからパッケージのリストを表示します。CodeCatalyst パッケージリポジトリ内のパッケージのリストを取得するには、CodeCatalyst コンソールのリポジトリに移動します。

# Pythonの使用
<a name="packages-python"></a>

以下のトピックでは、`pip`、Python パッケージマネージャー、そして Python パッケージ公開ユーティリティである `twine` を CodeCatalyst で使用する方法を説明します。

**Topics**
+ [pip の設定と Python パッケージのインストール](packages-python-pip.md)
+ [Twine の設定と Python パッケージの公開](packages-python-twine.md)
+ [Python パッケージ名の正規化](python-name-normalization.md)
+ [Python の互換性](packages-python-compatibility.md)

# pip の設定と Python パッケージのインストール
<a name="packages-python-pip"></a>

CodeCatalyst で `pip` を使用するには、`pip` をパッケージリポジトリに接続し、認証用の個人用アクセストークンを提供する必要があります。CodeCatalyst コンソールで `pip` をパッケージリポジトリに接続する手順を紹介します。`pip` を認証して CodeCatalyst に接続したら、`pip` コマンドを実行します。

**Contents**
+ [pip を使用して CodeCatalyst から Python パッケージをインストールする](#pip-install)
+ [CodeCatalyst を介して PyPI から Python パッケージを使用する](#pip-install-pypi)
+ [pipコマンドサポート](#pip-command-support)
  + [リポジトリとインタラクトするサポートされたコマンド](#supported-pip-commands-that-interact-with-a-repository)
  + [サポートされているクライアント側コマンド](#supported-pip-client-side-commands)

## pip を使用して CodeCatalyst から Python パッケージをインストールする
<a name="pip-install"></a>

次の手順では、CodeCatalyst パッケージリポジトリまたはそのアップストリームリポジトリのいずれかから Python パッケージをインストールするための `pip` の設定方法を説明します。

**CodeCatalyst パッケージリポジトリから Python パッケージをインストールするために `pip` を設定して使用するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトの概要ページで、**[パッケージ]** を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **リポジトリに接続**ダイアログボックスで、パッケージマネージャークライアントのリストから **pip** を選択します。

1. CodeCatalyst で pip を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. `pip config` を使用して CodeCatalystレジストリ URL と認証情報を設定します。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
   + *username* を CodeCatalyst のユーザー名に置き換えます。
   + *PAT* を CodeCatalyst の PAT に置き換えます。
   + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
   + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
   + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

   ```
   pip config set global.index-url https://username:PAT@https://packages.region.codecatalyst.aws/pypi/space_name/proj_name/repo_name/simple/
   ```

1. パッケージが、リポジトリまたはそのアップストリームリポジトリの1つに存在する場合、`pip install` でインストールすることができます。例えば、`requests`パッケージをインストールするには、次のコマンドを使用します。

   ```
   pip install requests
   ```

   CodeCatalyst パッケージリポジトリではなく、[https://pypi.org](https://pypi.org) からのパッケージのインストールに一時的に戻すには、`-i` オプションを使用します。

   ```
   pip install -i https://pypi.org/simple requests
   ```

## CodeCatalyst を介して PyPI から Python パッケージを使用する
<a name="pip-install-pypi"></a>

CodeCatalyst を介して [Python Package Index (PyPI)](https://www.pypi.org/) から Python パッケージを使用するには、リポジトリに **PyPI** へのアップストリーム接続を設定します。**PyPI** から使用されたパッケージは、CodeCatalyst リポジトリに取り込まれて保存されます。

**PyPI からパッケージを使用するには**

1. まだ設定していない場合は、「[pip を使用して CodeCatalyst から Python パッケージをインストールする](#pip-install)」の手順に従って CodeCatalyst パッケージリポジトリで pip を設定します。

1. リポジトリに **PyPI** がアップストリームソースとして追加されていることを確認します。追加されているアップストリームソースを確認するか、「[アップストリームリポジトリを追加する](packages-upstream-repositories-add.md)」の手順で **PyPI ストア**リポジトリを選択して、アップストリームソースとして **PyPI** を追加します。

アップストリームリポジトリからのパッケージのリクエストの詳細については、「[アップストリームリポジトリを持つパッケージバージョンのリクエスト](packages-upstream-repositories-request.md)」を参照してください。

## pipコマンドサポート
<a name="pip-command-support"></a>

以下のセクションでは、CodeCatalyst リポジトリでサポートされている pip コマンドと、サポートされていない特定のコマンドについてまとめています。

**Topics**
+ [リポジトリとインタラクトするサポートされたコマンド](#supported-pip-commands-that-interact-with-a-repository)
+ [サポートされているクライアント側コマンド](#supported-pip-client-side-commands)

### リポジトリとインタラクトするサポートされたコマンド
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

このセクションでは、`pip`クライアントが設定されたレジストリに1つかそれ以上のリクエストを行う`pip`コマンドをリストアップします。以下のコマンドは、CodeCatalyst パッケージリポジトリに対して呼び出されたときに正しく機能することが確認されています。


****  

| コマンド | 説明 | 
| --- | --- | 
|   [install](https://pip.pypa.io/en/stable/reference/pip_install/) (インストール)   |  パッケージのインストール  | 
|   [download](https://pip.pypa.io/en/stable/reference/pip_download/)   |  パッケージのダウンロード  | 

CodeCatalyst は `pip search` を実装しません。`pip` を CodeCatalyst パッケージリポジトリで設定している場合、`pip search` を実行すると、[PyPI](https://pypi.org/) のパッケージが検索され、表示されます。

### サポートされているクライアント側コマンド
<a name="supported-pip-client-side-commands"></a>

以下のコマンドはリポジトリとの直接的なやりとりを必要としないため、CodeCatalyst がサポートのために何かを行う必要はありません。


****  

| コマンド | 説明 | 
| --- | --- | 
|   [uninstall](https://pip.pypa.io/en/stable/reference/pip_uninstall/) (アンインストール)   |  パッケージをアンインストールする  | 
|   [フリーズ](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  インストール済みパッケージを要件形式で出力します。  | 
|   [list](https://pip.pypa.io/en/stable/reference/pip_list/)   |  インストールされているパッケージを一覧表示します。  | 
|   [show](https://pip.pypa.io/en/stable/reference/pip_show/)   |  インストールされたパッケージに関する情報を表示します。  | 
|   [チェック](https://pip.pypa.io/en/stable/reference/pip_check/)   |  インストールされているパッケージに互換性のある依存関係があることを確認します。  | 
|   [config](https://pip.pypa.io/en/stable/reference/pip_config/)   |  ローカルおよびグローバル設定を管理します。  | 
|   [ホイール](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  要件からホイールを構築します。  | 
|   [ハッシュ](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  パッケージアーカイブのハッシュを計算します。  | 
|   [完了](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  コマンド補完に役立ちます。  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  デバッグ時に便利な情報を表示します。  | 
|  help  |  コマンドのヘルプを表示します。  | 

# Twine の設定と Python パッケージの公開
<a name="packages-python-twine"></a>

CodeCatalyst で `twine` を使用するには、`twine` をパッケージリポジトリに接続し、認証用の個人用アクセストークンを提供する必要があります。CodeCatalyst コンソールで `twine` をパッケージリポジトリに接続する手順を紹介します。`twine` を認証して CodeCatalyst に接続したら、`twine` コマンドを実行します。

## Twine で CodeCatalyst にパッケージを公開する
<a name="packages-twine-publish"></a>

次の手順では、`twine` を認証して CodeCatalyst パッケージリポジトリに接続する方法を説明します。

**CodeCatalyst パッケージリポジトリにパッケージを公開するために `twine` を設定して使用するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトの概要ページで、**[パッケージ]** を選択します。

1. パッケージリポジトリのリストからパッケージリポジトリを選択します。

1. **[リポジトリに接続]** を選択します。

1. **[リポジトリに接続]** ダイアログボックスで、パッケージマネージャークライアントのリストから **[Twine]** を選択します。

1. CodeCatalyst で twine を認証するには、個人用アクセストークン (PAT) が必要です。トークンが既にある場合はそれを使用できます。そうでない場合は、ここで作成できます。

   1. **[トークンを作成]** をクリックします。

   1. **[コピー]** をクリックして PAT をコピーします。
**警告**  
ダイアログボックスを閉じると、PAT を再度表示またはコピーできなくなります。

1. twine を設定するには、`.pypirc` ファイルまたは環境変数を使用します。

   1. **`.pypirc` ファイルを使用して設定するには**

      適切なエディタで、`~/.pypirc` ファイルを開きます。

      リポジトリ、ユーザー名、前のステップで作成およびコピーした PAT を含む CodeCatalyst のインデックスサーバーを追加します。次の値を置き換えます。
**注記**  
コンソールの手順からコピーする場合は、以下の値は自動的に更新されるため、変更する必要はありません。
      + *username* を CodeCatalyst のユーザー名に置き換えます。
      + *PAT* を CodeCatalyst の PAT に置き換えます。
      + *space\$1name* を CodeCatalyst のスペース名に置き換えます。
      + *proj\$1name* を CodeCatalyst のプロジェクト名に置き換えます。
      + *repo\$1name* を CodeCatalyst のパッケージリポジトリ名に置き換えます。

      ```
      [distutils]
      index-servers = proj-name/repo-name
      
      [proj-name/repo-name]
      repository = https://packages.region.codecatalyst.aws/pypi/space_name/proj_name/repo_name/
      password = PAT
      username = username
      ```

   1. **環境変数を使用して設定するには**

      次の環境変数を設定します。`TWINE_REPOSITORY_URL` 値で、*space\$1name*、*proj\$1name*、*repo\$1name* を CodeCatalyst のスペース、プロジェクト、パッケージリポジトリ名で更新します。

      ```
      export TWINE_USERNAME=username
      ```

      ```
      export TWINE_PASSWORD=PAT
      ```

      ```
      export TWINE_REPOSITORY_URL="https://packages.region.codecatalyst.aws/pypi/space_name/proj_name/repo_name/"
      ```

1. `twine upload` コマンドを使用して Python ディストリビューションを公開します。

# Python パッケージ名の正規化
<a name="python-name-normalization"></a>

CodeCatalyst は、パッケージ名を正規化してから保存します。つまり、CodeCatalyst のパッケージ名は、パッケージの発行時に指定された名前とは異なる場合があります。

Python パッケージの場合、パッケージ名を正規化すると、パッケージ名は小文字になり、すべての `.`、`-`、`_` は 1 つの `-` に置き換えられます。そのため、`pigeon_cli` と `pigeon.cli` のパッケージ名は正規化され、`pigeon-cli` として保存されます。正規化されていない名前は、pip と twine で使用できます。Python パッケージ名の正規化の詳細については、Python のドキュメントの「[PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names)」を参照してください。

# Python の互換性
<a name="packages-python-compatibility"></a>

 CodeCatalyst は `/simple/` API をサポートしていませんが、`Legacy` API オペレーションをサポートしています。CodeCatalyst は PyPI の `XML-RPC` または `JSON` API オペレーションをサポートしていません。

詳細については、PythonパッケージングオーソリティのGitHubリポジトリの以下を参照してください。
+ [Legacy API](https://warehouse.pypa.io/api-reference/legacy.html)
+ [XML-RPC API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/xml-rpc.rst)
+ [JSON API](https://docs.pypi.org/api/json/)

# パッケージのクォータ
<a name="packages-quotas"></a>

次の表は、Amazon CodeCatalyst のパッケージのクォータと制限について説明しています。Amazon CodeCatalyst でのクォータの詳細については、「[CodeCatalyst のクォータ](quotas.md)」を参照してください。


| [リソース]  | デフォルトのクォータ | 
| --- | --- | 
| パッケージリポジトリ | スペースあたり最大 1,000 個。 | 
| 直接アップストリームリポジトリ |  パッケージリポジトリあたり最大 10 個。  | 
| 検索されるアップストリームパッケージリポジトリ数 |  リクエストされたパッケージバージョンごとに検索されるアップストリームリポジトリ最大 25 個。  | 
| パッケージアセットファイルサイズ |  パッケージアセットあたり最大 5GB。  | 
|  パッケージアセット  |  パッケージバージョンあたり最大 150 個。  | 