npmレジストリの利用

GitHub Packages にパッケージを公開するよう npm を設定し、GitHub Packages に保存されたパッケージを依存関係として npm プロジェクトで利用できます。

GitHub PackagesはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server、GitHub AEで利用できます。

デフォルトでは、GitHubはパッケージはそのままの名前で既存のリポジトリに公開されます。 たとえば、GitHubはOWNER/testというリポジトリ内のcom.example:testという名前のパッケージを公開します。

公開したnpmバージョンに対する制限

GitHub Packagesに公開したnpmパッケージのバージョンが1000を超える場合、使用中にパフォーマンスの問題やタイムアウトが発生することがあります。

サービスのパフォーマンスを向上させるため、将来的には1,000を超えるパッケージのバージョンをGitHubに公開できなくなります。 この制限に達しないバージョンであれば、今後も読み取り可能です。

この制限に達した場合は、パッケージのバージョンを削除するよう検討するか、サポートにお問い合わせください。 この制限が施行されるようになると、ドキュメントが更新され、この制限を回避する方法が記載されることになります。 詳しい情報については、 「パッケージを削除および復元する」または「サポートへの連絡」を参照してください。

GitHub Packages への認証を行う

GitHub Packagesでパッケージを公開、インストール、削除するにはアクセストークンが必要です。

GitHub Packages、あるいはGitHub APIで認証を受けるのに、個人のアクセストークン(PAT)が利用できます。 個人トークンを作成する際には、必要に応じて様々なスコープをトークンに割り当てできます。 PATに関するパッケージ関連のスコープについての詳しい情報は、「GitHub Packagesの権限について」を参照してください。

GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。

  • GITHUB_TOKENを使って、ワークフローリポジトリに関連づけられたパッケージを公開。
  • PATで他のプライベートリポジトリ(これにはGITHUB_TOKENがアクセスできない)に関連づけられたパッケージをインストール。

GitHub Actionsワークフローで使われるGITHUB_TOKENに関する詳しい情報については「ワークフローでの認証」を参照してください。

個人アクセストークンでの認証

GitHub Packages内でパッケージを公開及びインストールするためには、適切なスコープで個人アクセストークンを使わなければなりません。 詳しい情報については「GitHub Packagesについて」を参照してください。

ユーザごとの~/.npmrcファイルを編集して個人アクセストークンを含めるか、コマンドラインからユーザ名と個人アクセストークンを使ってnpmにログインすることによって、npmでGitHub Packagesの認証を受けられます。

~/.npmrcファイルに個人アクセストークンを追加して認証を受けるには、プロジェクトの~/.npmrcファイルを編集して、以下の行を含めてください。HOSTNAME は GitHub Enterprise Serverのインスタンスのホスト名で、TOKENは個人アクセストークンで置き換えてください。 ~/.npmrcファイルが存在しない場合は、新しく作成してください。

パッケージの作成に関する詳しい情報についてはmaven.apache.orgのドキュメンテーションを参照してください。

//npm.HOSTNAME//:_authToken=TOKEN

たとえば、以下のOctodogAppOctocatAppは同じリポジトリに公開されます。

$ npm login --registry=https://npm.pkg.github.com
> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS

npmにログインすることで認証を受けるには、npm loginコマンドを使ってください。USERNAMEはGitHubのユーザ名で、TOKENは個人アクセストークンで、PUBLIC-EMAIL-ADDRESSはメールアドレスで置き換えてください。

GitHub Packagesがnpmを使用するデフォルトのパッケージレジストリではなく、npm audit コマンドを使用する場合、GitHub Packagesへの認証時には、パッケージの所有者権限と共に--scopeフラグを使用することをおすすめします。

パッケージの作成に関する詳しい情報についてはmaven.apache.orgのドキュメンテーションを参照してください。

$ npm login --scope=@OWNER --registry=https://npm.HOSTNAME/

> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS

たとえば、以下のOctodogAppOctocatAppは同じリポジトリに公開されます。

$ npm login --scope=@OWNER --registry=https://HOSTNAME/_registry/npm/
> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS

パッケージを公開する

注釈: パッケージ名およびスコープには小文字のみを使用する必要があります。

デフォルトでは、GitHub Packagesはpackage.jsonファイルのnameフィールドで指定されたGitHubのリポジトリにパッケージを公開します。 たとえば@my-org/testという名前のパッケージをGitHubリポジトリのmy-org/testに公開します。 パッケージディレクトリにREADME.mdファイルを置くことで、パッケージリスティングページのためのまとめを追加できます。 詳しい情報については、npmのドキュメンテーション中の「Working with package.json」及び「How to create Node.js Modules」を参照してください。

URLフィールドをpackage.jsonファイルに含めることで、同じGitHubのリポジトリに複数のパッケージを公開できます。 詳しい情報については「同じリポジトリへの複数パッケージの公開」を参照してください。

プロジェクト内にあるローカルの .npmrc ファイルか、package.jsonpublishConfig オプションを使って、スコープのマッピングを設定できます。 GitHub Packagesはスコープ付きのnpmパッケージのみをサポートしています。 スコープ付きパッケージには、@owner/name というフォーマットの名前が付いています。 スコープ付きパッケージの先頭には常に @ 記号が付いています。 スコープ付きの名前を使うには、package.json の名前を更新する必要がある場合があります。 たとえば、"name": "@codertocat/hello-world-npm" のようになります。

パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しい情報については「パッケージの表示」を参照してください。

ローカルの.npmrcファイルを使ったパッケージの公開

.npmrcファイルを使って、プロジェクトのスコープのマッピングを設定できます。 .npmrcファイル中でGitHub Packages URLとアカウントオーナーを使い、GitHub Packagesがどこへパッケージリクエストをまわせばいいか把握できるようにしてください。 .npmrcを使う事で、他の開発者がGitHub Packagesの代わりにうっかりパッケージをnpmjs.orgに公開してしまうのを避けることができます。

  1. GitHub Packagesに認証を受けてください。 詳しい情報については「GitHub Packagesへの認証を行う」を参照してください。

  2. package.jsonファイルと同じディレクトリに、.npmrcを作成もしくは編集し、GitHub PackagesのURLとアカウントのオーナーを指定する行を含めてください。 OWNERを、プロジェクトを含むリポジトリを所有するユーザもしくはOrganizationアカウント名で置き換えてください。

    Subdomain Isolationが有効な場合:

    @OWNER:registry=https://npm.HOSTNAME

    Subdomain Isolationが無効な場合:

    @OWNER:registry=https://HOSTNAME/_registry/npm
  3. GitHub Packagesがプロジェクトを見つけられるリポジトリに.npmrcファイルを追加してください。 詳しい情報については「コマンドラインを使ったリポジトリへのファイルの追加」を参照してください。

  4. プロジェクトのpackage.json中のパッケージ名を確認してください。 nameフィールドは、スコープとパッケージの名前を含まなければなりません。 たとえば、パッケージの名前が "test" で、"My-org" GitHub Organizationに公開する場合、package.jsonnameフィールドは @my-org/testとする必要があります。

  5. プロジェクトのpackage.json中のrepositoryフィールドを検証してください。 repositoryフィールドは、GitHubリポジトリのURLと一致していなければなりません。 たとえば、あなたのリポジトリのURLがgithub.com/my-org/testなら、repositoryフィールドはgit://github.com/my-org/test.gitでなければなりません。

  6. パッケージを公開してください。

    $ npm publish

package.jsonファイル中のpublishConfigを利用したパッケージの公開

package.jsonファイル中のpublishConfig要素を使い、パッケージを公開したいレジストリを指定できます。 詳しい情報についてはnpmドキュメンテーションの「Configの公開」を参照してください。

  1. パッケージのpackage.jsonファイルを編集して、publishConfigエントリを含めてください。

    パッケージの作成に関する詳しい情報についてはmaven.apache.orgのドキュメンテーションを参照してください。

    "publishConfig": {
      "registry":"https://npm.HOSTNAME/"
    },

    たとえば、以下のOctodogAppOctocatAppは同じリポジトリに公開されます。

    "publishConfig": {
       "registry":"https://HOSTNAME/_registry/npm/"
     },
  2. プロジェクトのpackage.json中のrepositoryフィールドを検証してください。 repositoryフィールドは、GitHubリポジトリのURLと一致していなければなりません。 たとえば、あなたのリポジトリのURLがgithub.com/my-org/testなら、repositoryフィールドはgit://github.com/my-org/test.gitでなければなりません。

  3. パッケージを公開してください。

    $ npm publish

同じリポジトリへの複数パッケージの公開

複数のパッケージを同じリポジトリに公開するには、GitHubリポジトリのURLを各パッケージのpackage.jsonファイル中のrepositoryフィールドに含めることができます。

リポジトリのURLが正しいことを確認するには、REPOSITORYを公開したいパッケージを含むリポジトリ名で、OWNERをリポジトリを所有しているGitHubのユーザもしくはOrganizationアカウント名で置き換えてください。

GitHub Packages は、パッケージ名の代わりに、このURLを元にしてリポジトリを照合します。

"repository":"https://HOSTNAME/OWNER/REPOSITORY",

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

プロジェクトのpackage.jsonファイルに依存関係としてパッケージを追加することで、GitHub Packagesからパッケージをインストールできます。 プロジェクトにおける package.json の利用に関する詳しい情報については、npm ドキュメンテーションの「package.json を使って作業する」を参照してください。

デフォルトでは、パッケージは1つのOrganizationから追加できます。 詳しい情報については「他のOrganizationからのパッケージのインストール」を参照してください。

また、.npmrcファイルをプロジェクトに追加して、パッケージのインストールのすべてのリクエストがGitHub Packagesを経由するようにしなければなりません。 すべてのパッケージリクエストをGitHub Packagesを経由させると、npmjs.comからスコープ付き及びスコープ付きではないパッケージの両方を利用できます。 詳しい情報については npm ドキュメンテーションの「npm-scope」を参照してください。

  1. GitHub Packagesに認証を受けてください。 詳しい情報については「GitHub Packagesへの認証を行う」を参照してください。

  2. package.jsonファイルと同じディレクトリに、.npmrcを作成もしくは編集し、GitHub PackagesのURLとアカウントのオーナーを指定する行を含めてください。 OWNERを、プロジェクトを含むリポジトリを所有するユーザもしくはOrganizationアカウント名で置き換えてください。

    Subdomain Isolationが有効な場合:

    @OWNER:registry=https://npm.HOSTNAME

    Subdomain Isolationが無効な場合:

    @OWNER:registry=https://HOSTNAME/_registry/npm
  3. GitHub Packagesがプロジェクトを見つけられるリポジトリに.npmrcファイルを追加してください。 詳しい情報については「コマンドラインを使ったリポジトリへのファイルの追加」を参照してください。

  4. インストールしているパッケージを使うには、プロジェクトのpackage.jsonを設定してください。 GitHub Packagesのためにパッケージの依存関係をpackage.jsonファイルに追加するには、@my-org/serverというように完全なスコープ付きのパッケージ名を指定してください。 npmjs.comからのパッケージについては、@babel/coreあるいは@lodashというような完全な名前を指定してください。 たとえば、以下のpackage.json@octo-org/octo-appパッケージを依存関係として使っています。

    {
      "name": "@my-org/server",
      "version": "1.0.0",
      "description": "Server app that uses the @octo-org/octo-app package",
      "main": "index.js",
      "author": "",
      "license": "MIT",
      "dependencies": {
        "@octo-org/octo-app": "1.0.0"
      }
    }
    
  5. パッケージをインストールします。

    $ npm install

他のOrganizationからのパッケージのインストール

デフォルトでは、1つのOrganizationからのみGitHub Packagesパッケージを利用できます。 パッケージリクエストを複数のOrganizationおよびユーザにルーティングしたい場合、.npmrcファイルに行を追加できます。 HOSTNAMEを、GitHub Enterprise Serverのインスタンスのホスト名で、OWNERを、プロジェクトを含むリポジトリを所有しているユーザもしくはOrganizationアカウント名で置き換えてください。

パッケージの作成に関する詳しい情報についてはmaven.apache.orgのドキュメンテーションを参照してください。

@OWNER:registry=https://npm.HOSTNAME
@OWNER:registry=https://npm.HOSTNAME

たとえば、以下のOctodogAppOctocatAppは同じリポジトリに公開されます。

@OWNER:registry=https://HOSTNAME/_registry/npm
@OWNER:registry=https://HOSTNAME/_registry/npm

公式NPMレジストリを使用する

GitHub Packagesでは、GitHub Enterprise Server管理者がこの機能を有効化している場合、registry.npmjs.comの公式NPMにアクセスできます。 詳しい情報については、公式NPMレジストリに接続する」を参照してください。

参考リンク

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問するサポートへの連絡