Site cover image
📦GitHub Packagesを使ってプライベートパッケージをnpmインストールできるようにする

JavaScript/TypeScriptでアプリケーションなどを開発していると、使い回しできるコードを別パッケージとして分離したくなるときがあります。

単にリポジトリを分けてGitクローンするだけでも良いですが、場合によってはパッケージを利用する側で依存関係を含めて管理したいということがあるでしょう。

そこでこの記事では、プライベートnpmパッケージをGitHub Packagesを用いて配信し、トークン認証を利用してnpmインストールする方法を説明します。

2023年5月27日現在、GitHubパッケージの費用は下記です。

製品 Storage データ転送 (月あたり)
GitHub Free 500 MB 1GB
GitHub Pro 2GB 10 GB
組織の GitHub Free 500 MB 1GB
GitHub Team 2GB 10 GB
GitHub Enterprise Cloud 50GB 100GB

料金プランは都度変わる可能性があるため、下記公式ページを参照してください。

GitHub Packagesを用いてプライベートnpmパッケージを配信するにはまず package.json に下記の情報を追加します。

  • name@NAMESPACE/PACKAGE_NAME の形式にする
  • publishConfigregistry: "https://npm.pkg.github.com/" を追加する

ここで @NAMESPACE とは、個人アカウントで配信する場合はアカウント名、組織で配信する場合は組織名になります。

例えば私 @otoyo が個人アカウントで my-private-package を配信する場合は @otoyo/my-private-package となります。

また、 package.jsonprivate: true の設定がある場合は削除してください。

{
  "name": "@NAMESPACE/my-private-package",
  "type": "module",
  "version": "0.1.0",
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  }
}
package.jsonにネームスペースとpublishConfigを追加する

次に、npmパッケージを配信するためのGitHub Actionsワークフローを追加するため、 .github/workflows/ ディレクトリを作成し下記の内容で .github/workflows/publish.yml を作成します。

name: Publish package to GitHub Packages

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to GitHub Packages
      - uses: actions/setup-node@v3
        with:
          node-version: '18.x'
          registry-url: 'https://npm.pkg.github.com'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
.github/workflows/publish.yml を作成する

上記の例では main ブランチへのpushをトリガーに配信しています。

例えばリリースをトリガーに配信するには on: 部分を下記のようにします。

on:
  release:
    types: [published]
リリースをトリガーにする

これで配信の準備は完了です。

トリガーによってGitHub Actionsのビルドが完了して配信に成功すると、リポジトリのトップにnpmパッケージが表示されます。

Image in a image block
publishが成功するとリポジトリにnpmパッケージが表示される

次に、配信したパッケージを利用する方法について見ていきましょう。

パッケージをnpmを介してインストールするためには、GitHub Personal Access Tokens(PAT)と ~/.npmrc ファイルへの設定の追記が必要になります。

GitHub PATを発行するには、GitHubのプロフィールアイコンのSettingsからDeveloper settingsを開き、Generate new token (classic) を選択します。

Image in a image block
Personal Access Tokens(PAT)はDeveloper settingsから追加する

PATの説明、期限、スコープを設定して発行します。スコープは read:packages のみでOKです。

期限は必要に応じて変更してください。

Image in a image block
スコープは read:packages のみで良い

発行されたPATをメモしておきます。

Image in a image block
PATをコピーしよう

次に ~/.npmrc を開き、先ほど発行したPATと package.json に設定した @NAMESPACE を下記のように設定します。

青字部分をご自身の設定に変更してください。

@NAMESPACE:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=ghp_xxxxx
~/.npmrcに2行追加する

以上で準備は整いました。下記のようにしてインストールすることができます。

npm install @NAMESPACE/my-private-package

以上です。この記事ではプライベートnpmパッケージをGitHub Packagesを用いて配信し、トークン認証を利用してnpmインストールする方法を説明しました。

公式の説明をご覧になりたい方は下記を参照してください。

Thank you!
Thank you!
URLをコピーしました

コメントを送る

コメントはブログオーナーのみ閲覧できます