とんかつ時々あんどーなつ

〜たとえ低空でも飛行していられるように〜

GitHub Packages を使って private な npm package を publish するまで

次のふたつを初めて試したので、その時の備忘録です。

  1. registry に GitHub Packages を使う
  2. private で publish する

公開するための Node.js モジュールを用意

まずはモジュールを用意する。ここはあまり重要ではないので、Creating Node.js modules | npm Docs を参考に用意した。スコープを設定したいので npm init 時にオプションで指定する。

npm init --scope=@kasaharu

GitHub Actions で GitHub Packages に publish する

「Publish Node.js Package to GitHub Packages」 という GitHub Packages に publish する workflow が用意されているのでこれを参考にする。

デフォルトでは以下の設定になっている。

# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages

name: Node.js Package

on:
  release:
    types: [created]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm ci
      - run: npm test

  publish-gpr:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
          registry-url: https://npm.pkg.github.com/
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}

workflow はほぼこのままで使用可能だった。 GITHUB_TOKEN も自分で secrets に登録する必要があるのかと思ったが、これはリポジトリの操作権限を持った token として GitHub Actions を使うときに有効化されるものらしい。 詳細については 自動トークン認証 - GitHub Docs で詳しく説明されている。

GitHub Actions が実行されると以下のようにパッケージが公開される。

公開した private package を使う

npmレジストリの利用 - GitHub Docs を参考に使う側の設定をする。

GitHub Packages を registry に使うことがわかるように .npmrc を用意して設定する。

@kasaharu:registry=https://npm.pkg.github.com

また private package をインストールするため認証が必要となる。今回は GitHub の personal access token を用意して指定している。 personal access token の作り方は 個人用アクセス トークンの作成 - GitHub Docs にある。

package のダウンロードができればよいので必要な権限は read:packages となる。 発行した token を環境変数に登録して .npmrc に以下の設定を追加する。

//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}

あとは作ったパッケージを npm install で指定することで使えるようになる。

まとめ

GitHub Docs のボリュームが多いので探すのは大変だが、ドキュメントを見つけることができれば問題なく設定できた。無料アカウントでも private で npm package を公開できるので、色々と使いみちがありそう。

参考リンク