

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

# CodeArtifact で npm を設定して使用する
<a name="npm-auth"></a>

CodeArtifact でリポジトリを作成したら、npm クライアントを使用してパッケージをインストールして公開できます。リポジトリエンドポイントと認可トークンで npm を設定するための推奨される方法は、`aws codeartifact login` コマンドの使用です。npm を手動で設定することもできます。

**Contents**
+ [login コマンドを使用した npm の設定](#configure-npm-login-command)
+ [login コマンドを使用せずに npm を設定する](#configuring-npm-without-using-the-login-command)
+ [npm コマンドを実行する](#running-npm-commands)
+ [npm の認証と認可の検証](#verifying-npm-authentication-and-authorization)
+ [デフォルトの npm レジストリに戻す](#revert-default-npm-registry)
+ [npm 8.x 以降でのインストールが遅い場合のトラブルシューティング](#troubleshooting-slow-npm-install)

## login コマンドを使用した npm の設定
<a name="configure-npm-login-command"></a>

`aws codeartifact login` コマンドを使用して、npm で使用する認証情報を取得します。

**注記**  
所有しているドメインのリポジトリにアクセスする場合は、`--domain-owner` を含める必要はありません。詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。

**重要**  
npm 10.x 以降を使用している場合は、 AWS CLI バージョン 2.9.5 以降を使用して`aws codeartifact login`コマンドを正常に実行する必要があります。

```
aws codeartifact login --tool npm --domain my_domain --domain-owner 111122223333 --repository my_repo
```

このコマンドは、 \$1/.npmrc ファイルに次の変更を加えます:
+  AWS 認証情報を使用して CodeArtifact から認可トークンを取得し、追加します。
+ npm レジストリを、`--repository` オプションで指定されたリポジトリに設定します。
+ **npm 6 以下の場合:** `"always-auth=true"` を追加すると、認可トークンがすべての npm コマンドに対して送信されます。

`login` を呼び出した後のデフォルトの認可時間は 12 時間であり、トークンを定期的に更新するには、`login` を呼び出す必要があります。`login` コマンドで作成される認可トークンの詳細については、「[`login`コマンドで作成されたトークン](tokens-authentication.md#auth-token-login)」を参照してください。

## login コマンドを使用せずに npm を設定する
<a name="configuring-npm-without-using-the-login-command"></a>

`aws codeartifact login` コマンドを使用せずに CodeArtifact リポジトリで npm を設定するには、npm 設定を手動で更新します。

**login コマンドを使用せずに npm を設定するには**

1. コマンドラインで、CodeArtifact 認可トークンを取得し、環境変数に保存します。npm はこのトークンを使用して CodeArtifact リポジトリで認証します。
**注記**  
次のコマンドは、macOS または Linux 用です。Windows での環境変数の設定については、「[環境変数を使用して認証トークンを渡す](tokens-authentication.md#env-var)」を参照してください。

   ```
   CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
   ```

1. 次のコマンドを実行して、CodeArtifact リポジトリのエンドポイントを取得します。リポジトリエンドポイントは、パッケージをインストールまたは公開するために npm をリポジトリに指すために使用されます。
   + *my\$1domain* を CodeArtifact ドメイン名で置き換えます。
   + *111122223333* をドメイン所有者の AWS アカウント ID に置き換えます。所有しているドメインのリポジトリにアクセスする場合、`--domain-owner`を含める必要はありません。詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。
   + *my\$1repo* を CodeArtifact リポジトリ名で置き換えます。

   ```
   aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm
   ```

   次の URL は、リポジトリエンドポイントの例です。

   ```
   https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/
   ```
**重要**  
レジストリ URL はスラッシュ (/) で終わる必要があります。そうしないと、リポジトリに接続することはできません。

1. `npm config set`コマンドを使用して、CodeArtifact リポジトリにレジストリを設定します。URL を、前のステップのリポジトリエンドポイントの URL に置き換えます。

   ```
   npm config set registry=https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/
   ```
**注記**  
デュアルスタックエンドポイントを使用するには、`codeartifact.region.on.aws` エンドポイントを使用してください。

1. `npm config set` コマンドを使用して、npm 設定に認可トークンを追加します。

   ```
   npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:_authToken=$CODEARTIFACT_AUTH_TOKEN
   ```

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

   ```
   npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:always-auth=true
   ```

**構成ファイルの例 (`.npmrc`)**

 次に `.npmrc` ファイルの例を示します。CodeArtifact レジストリエンドポイントを設定するための先の指示に従った後、認証トークンを追加し、`always-auth` を設定します。

```
registry=https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-cli-repo/
//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:_authToken=eyJ2ZX...
//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:always-auth=true
```

## npm コマンドを実行する
<a name="running-npm-commands"></a>

npm クライアントを設定したら、npm コマンドを実行できます。パッケージがリポジトリまたはその上流のリポジトリの1つに存在すると仮定すると、パッケージを `npm install` でインストールできます。例えば、以下を使用して `lodash` パッケージをインストールします。

```
npm install lodash
```

次のコマンドを使用して、新しい npm パッケージを CodeArtifact リポジトリに公開します。

```
npm publish
```

npm パッケージを作成する方法については、npm ドキュメントウェブサイト[ 上の Node.js モジュールの作成](https://docs.npmjs.com/getting-started/creating-node-modules) を参照してください。CodeArtifact でサポートされる npm コマンドのリストについては、[npm コマンドのサポート](npm-commands.md) を参照してください。

## npm の認証と認可の検証
<a name="verifying-npm-authentication-and-authorization"></a>

`npm ping` コマンドの呼び出しは、次のことを検証する方法です。
+ CodeArtifact リポジトリに対して認証できるように、認証情報が正しく設定されました。
+ 認可設定により、`ReadFromRepository` アクセス許可が与えられます。

`npm ping` の正常な呼び出しからの出力は次のようになります。

```
$ npm -d ping
npm info it worked if it ends with ok
npm info using npm@6.4.1
npm info using node@v9.5.0
npm info attempt registry request try #1 at 4:30:59 PM
npm http request GET https://<domain>.d.codeartifact.us-west-2.amazonaws.com/npm/shared/-/ping?write=true
npm http 200 https:///npm/shared/-/ping?write=true
Ping success: {}
npm timing npm Completed in 716ms
npm info ok
```

`-d` オプションを指定すると、npm はリポジトリ URL を含む追加のデバッグ情報を出力します。この情報により、npm が期待するリポジトリを使用するように設定されていることを簡単に確認できます。

## デフォルトの npm レジストリに戻す
<a name="revert-default-npm-registry"></a>

npm を CodeArtifact で設定すると、npm レジストリが指定された CodeArtifact リポジトリに設定されます。次のコマンドを実行すると、CodeArtifact への接続が完了したら、npm レジストリをデフォルトのレジストリに戻すことができます。

```
npm config set registry https://registry.npmjs.com/
```

## npm 8.x 以降でのインストールが遅い場合のトラブルシューティング
<a name="troubleshooting-slow-npm-install"></a>

npm バージョン8.x 以降には既知の問題があります。パッケージリポジトリに対してリクエストが行われ、リポジトリがアセットを直接ストリーミングする代わりにクライアントを Amazon S3 にリダイレクトすると、npm クライアントが依存関係ごとに数分間ハングアップする可能性があります。

CodeArtifact リポジトリはリクエストを常に Amazon S3 にリダイレクトするように設計されているため、この問題が発生することがあり、npm のインストール時間が長くなるため、ビルド時間が長くなります。この動作が発生すると、進行状況バーが数分間表示されます。

この問題を回避するには、次の例のように `npm` CLI コマンドで `--no-progress` または `progress=false` フラグを使用します。

```
npm install lodash --no-progress
```