パッケージの概念 - Amazon CodeCatalyst

パッケージの概念

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

パッケージ

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

パッケージの内容は以下のとおりです。

  • 名前 (例: webpack はよく利用されている npm パッケージの名前です)

  • オプションの名前空間 (@types/node@types など)

  • 一連のバージョン (1.0.01.0.11.0.2 など)

  • パッケージレベルのメタデータ (npm ディストリビューションタグなど)

パッケージの名前空間

一部のパッケージ形式では、階層的なパッケージ名をサポートしており、パッケージを論理グループに整理し、名前の衝突を回避できます。同じ名前のパッケージを異なる名前空間に保存できます。例えば、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 のような概念を持つ階層名をサポートしていません。パッケージ名をグループ化する方法がないと、名前の衝突を回避するのが難しくなる場合があり。

パッケージバージョン

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

アセット

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

パッケージリポジトリ

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

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

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

アップストリームリポジトリ

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

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

ゲートウェイリポジトリ

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

ゲートウェイリポジトリは事前に定義されていますが、使用するプロジェクトごとに作成する必要があります。次のリストには、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 パッケージを提供します。