正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Yarnでパッケージを公開する

Yarn 1 (Classic)Yarn 2+を使用して、パッケージを公開およびインストールできます。

デプロイコンテナで使用されているYarnのバージョンを調べるには、yarn --versionを、yarn publishを呼び出すジョブがあるCI/CDスクリプトジョブのscriptブロックで実行します。Yarnのバージョンはパイプラインの出力に表示されます。

パッケージレジストリに対する認証

パッケージレジストリとやり取りするには、トークンが必要です。実現しようとしていることに応じて、さまざまなトークンを利用できます。詳細については、トークンに関するガイダンス参照してください。

公開用にYarnを設定する

パッケージレジストリに公開するようにYarnを設定するには、.yarnrc.ymlファイルを編集します。このファイルは、package.jsonファイルと同じ、プロジェクトのルートディレクトリにあります。

  • .yarnrc.ymlを編集し、次の設定を追加します:

    npmScopes:
      <my-org>:
        npmPublishRegistry: 'https://<domain>/api/v4/projects/<project_id>/packages/npm/'
        npmAlwaysAuth: true
        npmAuthToken: '<token>'

    この設定では、次のようになります:

    • <my-org>を組織スコープに置き換えます。@記号は含めないでください。
    • <domain>をドメイン名に置き換えます。
    • <project_id>をプロジェクトのIDに置き換えます。これはプロジェクトの概要ページにあります。
    • <token>をデプロイトークン、グループアクセストークン、プロジェクトアクセストークン、またはパーソナルアクセストークンに置き換えます。

Yarn Classicでは、publishConfig["@scope:registry"]を使用したスコープレジストリはサポートされていません。詳細については、Yarnプルリクエスト7829を参照してください。代わりに、publishConfigregistryに設定します。package.jsonファイル。

パッケージを公開する

コマンドラインから、またはGitLab CI/CDでパッケージを公開できます。

コマンドラインを使用する

パッケージを手動で公開するには:

  • 次のコマンドを実行します:

    # Yarn 1 (Classic)
    yarn publish
    
    # Yarn 2+
    yarn npm publish

CI/CDを使用する

インスタンスRunner(デフォルト)またはプライベートRunner(高度)を使用して、パッケージを自動的に公開できます。CI/CDで公開するときにパイプライン変数を使用できます。

  1. プロジェクトまたはグループの認証トークンを作成します:

    1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトまたはグループを見つけます。
    2. 左側のサイドバーで、設定 > リポジトリ > Deploy Tokens(デプロイトークン)を選択します。
    3. read_package_registryおよびwrite_package_registryスコープを持つデプロイトークンを作成し、生成されたトークンをコピーします。
    4. 左側のサイドバーで、設定 > CI/CD > 変数を選択します。
    5. Add variableを選択し、次の設定を使用します:
    フィールド
    キー:NPM_AUTH_TOKEN
    <DEPLOY-TOKEN>
    タイプ:変数
    保護された変数CHECKED
    マスクされた変数CHECKED
    変数を展開します。CHECKED
  2. オプション。保護された変数を使用するには:

    1. Yarnパッケージのコードソースを含むリポジトリに移動します。
    2. 左側のサイドバーで、設定 > リポジトリを選択します。
      • タグ付けのあるブランチからビルドする場合は、保護されたタグを選択し、セマンティックバージョニングのためにv*(ワイルドカード)を追加します。
      • タグ付けのないブランチからビルドする場合は、ブランチルールを選択します。
  3. 作成したNPM_AUTH_TOKENを、パッケージプロジェクトのルートディレクトリにある、package.jsonが見つかる.yarnrc.yml設定に追加します:

    npmScopes:
      <my-org>:
        npmPublishRegistry: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/'
        npmAlwaysAuth: true
        npmAuthToken: '${NPM_AUTH_TOKEN}'

    この設定で、@記号を除外して、<my-org>を組織スコープに置き換えます。

  1. package.jsonが配置されているパッケージプロジェクトのルートディレクトリにある.yarnrc.yml設定に、CI_JOB_TOKENを追加します:

    npmScopes:
      <my-org>:
        npmPublishRegistry: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/'
        npmAlwaysAuth: true
        npmAuthToken: '${CI_JOB_TOKEN}'

    この設定で、@記号を除外して、<my-org>を組織スコープに置き換えます。

  2. .yarnrc.ymlを含むGitLabプロジェクトで、.gitlab-ci.ymlファイルを編集または作成します。たとえば、任意のタグプッシュでのみトリガーするには:

    Yarn 1の場合:

    image: node:lts
    
    stages:
      - deploy
    
    rules:
    - if: $CI_COMMIT_TAG
    
    deploy:
      stage: deploy
      script:
        - yarn publish

    Yarn 2以降:

    image: node:lts
    
    stages:
      - deploy
    
    rules:
      - if: $CI_COMMIT_TAG
    
    deploy:
      stage: deploy
      before_script:
        - corepack enable
        - yarn set version stable
      script:
        - yarn npm publish

パイプラインが実行されると、パッケージがパッケージレジストリに追加されます。

パッケージをインストールする

インスタンスまたはプロジェクトからインストールできます。複数のパッケージの名前とバージョンが同じ場合、パッケージをインストールすると、最後に公開されたパッケージのみが取得されます。

スコープパッケージ名

インスタンスからインストールするには、パッケージにスコープを指定して名前を付ける必要があります。.yarnrc.ymlファイルで、package.jsonpublishConfigオプションを使用して、パッケージのスコープを設定できます。プロジェクトまたはグループからインストールする場合は、パッケージの命名規則に従う必要はありません。

パッケージスコープは@で始まり、形式@owner/package-nameに従います:

  • @ownerは、パッケージソースコードを含むプロジェクトのルートではなく、パッケージをホストするトップレベルグループです。
  • パッケージ名は任意に設定できます。

例:

プロジェクトURLパッケージレジストリ組織スコープパッケージのフルネーム
https://gitlab.com/<my-org>/<group-name>/<package-name-example>パッケージ名の例@my-org@my-org/package-name
https://gitlab.com/<example-org>/<group-name>/<project-name>プロジェクト名:@example-org@example-org/project-name

インスタンスからインストール

同じ組織スコープで多数のパッケージを操作する場合は、インスタンスからのインストールを検討してください。

  1. 組織スコープを設定します。.yarnrc.ymlファイルで、以下を追加します:

    npmScopes:
     <my-org>:
       npmRegistryServer: 'https://<domain_name>/api/v4/packages/npm'
    • @記号を除外して、<my-org>をパッケージのインストール元のプロジェクトのルートレベルグループに置き換えます。
    • <domain_name>をドメイン名に置き換えます(例: gitlab.com)。
  2. オプション。パッケージがプライベートの場合は、パッケージレジストリへのアクセスを設定する必要があります:

    npmRegistries:
      //<domain_name>/api/v4/packages/npm:
        npmAlwaysAuth: true
        npmAuthToken: '<token>'
    • <domain_name>をドメイン名に置き換えます(例: gitlab.com)。
    • <token>を、デプロイトークン(推奨)、グループアクセス、プロジェクトアクセス、またはパーソナルアクセスに置き換えます。
  3. Yarnでパッケージをインストール

グループまたはプロジェクトからインストール

1回限りのパッケージがある場合は、グループまたはプロジェクトからインストールできます。

  1. グループスコープを設定します。.yarnrc.ymlファイルで、以下を追加します:

    npmScopes:
      <my-org>:
        npmRegistryServer: 'https://<domain_name>/api/v4/groups/<group_id>/-/packages/npm'
    • インストール元のグループを含む、<my-org>をトップレベルグループに置き換えます。@記号を除外します。
    • <domain_name>をドメイン名に置き換えます(例: gitlab.com)。
    • <group_id>を、グループの概要ページにあるグループIDに置き換えます。
  2. オプション。パッケージがプライベートの場合は、レジストリを設定する必要があります:

    npmRegistries:
      //<domain_name>/api/v4/groups/<group_id>/-/packages/npm:
        npmAlwaysAuth: true
        npmAuthToken: "<token>"
    • <domain_name>をドメイン名に置き換えます(例: gitlab.com)。
    • <token>を、デプロイトークン(推奨)、グループアクセス、プロジェクトアクセス、またはパーソナルアクセスに置き換えます。
    • <group_id>を、グループの概要ページにあるグループIDに置き換えます。
  3. Yarnでパッケージをインストール

  1. プロジェクトスコープを設定します。.yarnrc.ymlファイルで、以下を追加します:

    npmScopes:
     <my-org>:
       npmRegistryServer: "https://<domain_name>/api/v4/projects/<project_id>/packages/npm"
    • インストール元のプロジェクトを含む、<my-org>をトップレベルグループに置き換えます。@記号を除外します。
    • <domain_name>をドメイン名に置き換えます(例: gitlab.com)。
    • <project_id>を、プロジェクトの概要ページのプロジェクトIDに置き換えます。
  2. オプション。パッケージがプライベートの場合は、レジストリを設定する必要があります:

    npmRegistries:
      //<domain_name>/api/v4/projects/<project_id>/packages/npm:
        npmAlwaysAuth: true
        npmAuthToken: "<token>"
    • <domain_name>をドメイン名に置き換えます(例: gitlab.com)。
    • <token>を、デプロイトークン(推奨)、グループアクセス、プロジェクトアクセス、またはパーソナルアクセスに置き換えます。
    • <project_id>を、プロジェクトの概要ページのプロジェクトIDに置き換えます。
  3. Yarnでパッケージをインストール

Yarnでインストール

  • コマンドラインから、またはCI/CDパイプラインからyarn addを実行します:
yarn add @scope/my-package

Yarn Classicには、.npmrcファイルと.yarnrcファイルの両方が必要です。詳細については、Yarn issue 4451を参照してください。

  1. .npmrcファイルに認証情報を配置し、.yarnrcファイルにスコープレジストリを配置します:

    # .npmrc
    ## For the instance
    //<domain_name>/api/v4/packages/npm/:_authToken='<token>'
    ## For the group
    //<domain_name>/api/v4/groups/<group_id>/-/packages/npm/:_authToken='<token>'
    ## For the project
    //<domain_name>/api/v4/projects/<project_id>/packages/npm/:_authToken='<token>'
    
    # .yarnrc
    ## For the instance
    '@scope:registry' 'https://<domain_name>/api/v4/packages/npm/'
    ## For the group
    '@scope:registry' 'https://<domain_name>/api/v4/groups/<group_id>/-/packages/npm/'
    ## For the project
    '@scope:registry' 'https://<domain_name>/api/v4/projects/<project_id>/packages/npm/'
  2. コマンドラインから、またはCI/CDパイプラインからyarn addを実行します:

    yarn add @scope/my-package

トラブルシューティング

npmレジストリのパッケージレジストリでYarnを実行中にエラーが発生しました

Yarnをnpmレジストリで使用している場合は、次のようなエラーメッセージが表示されることがあります:

yarn install v1.15.2
warning package.json: No license field
info No lockfile found.
warning XXX: No license field
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
error An unexpected error occurred: "https://gitlab.example.com/api/v4/projects/XXX/packages/npm/XXX/XXX/-/XXX/XXX-X.X.X.tgz: Request failed \"404 Not Found\"".
info If you think this is a bug, please open a bug report with the information provided in "/Users/XXX/gitlab-migration/module-util/yarn-error.log".
info Visit https://classic.yarnpkg.com/en/docs/cli/install for documentation about this command

この場合、次のコマンドを実行すると、現在のディレクトリに.yarnrcという名前のファイルが作成されます。グローバル設定の場合はユーザーのホームディレクトリに、プロジェクトごとの設定の場合はプロジェクトのルートにいることを確認してください:

yarn config set '//gitlab.example.com/api/v4/projects/<project_id>/packages/npm/:_authToken' '<token>'
yarn config set '//gitlab.example.com/api/v4/packages/npm/:_authToken' '<token>'

yarn installは、依存関係としてリポジトリのクローン作成に失敗します

Dockerfileからyarn installを使用する場合、Dockerfileをビルドすると、次のようなエラーが発生する可能性があります:

...
#6 8.621 fatal: unable to access 'https://gitlab.com/path/to/project/': Problem with the SSL CA cert (path? access rights?)
#6 8.621 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
#6 ...

このイシューを解決するには、感嘆符(!)を追加します。.dockerignoreファイルのYarn関連のすべてのパス。

**

!./package.json
!./yarn.lock
...