Node.js + Github Private Registry
概要
Github Private Registryにより、プライベートなモジュールを簡単に作成することができるようになりました。 今回はGithub Actionsを用いてNPMモジュールをGithub Private registryに登録・利用する方法を紹介します。
モジュール化したいリポジトリの設定
Github Actionの設定
まず、ドキュメントに沿って以下のようなYamlファイルを作成します。
# .github/workflows/release.yml name: Release on: release: types: [created] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # Setup .npmrc file to publish to npm - uses: actions/setup-node@v1 with: node-version: '14.x' registry-url: 'https://npm.pkg.github.com' - run: yarn - run: yarn publish env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Github Actionsではリポジトリに紐付いたGITHUB_TOKEN
が自動的に挿入されます。このトークンはこのGithub Private Registryに対する書き込み権限を持っているので、そのまま使用することができます。
package.jsonの設定
Github Registryを使用する際に、パッケージ名に組織名を入れる必要があります。
{ "name": "@<org name>/<package name>" }
後はNPMのお作法に従って、
npm version patch
でタグを作成し、Github上でリリースを作成すると自動的にPrivate RegistryにPublishしてくれます。リリースはこちらからです。
モジュールを使用したいリポジトリの設定
次にモジュールを使用したいリポジトリ側でインストールできるように設定する必要があります。
.yarnrcの作成
使用したいリポジトリのルート配下に以下のような.yarnrc
を作成します。以下の設定で特定のモジュールのみをGithub Registryから取得することができます。
registry "https://registry.npmjs.org" "@<org name>:registry" "https://npm.pkg.github.com"
ローカルの設定
ローカル開発で使用する場合、Github Registryにアクセスできるようにする必要があります。
Personal access tokensのページからアクセストークンを作成します。権限は read:packages
だけで十分です。
作成したトークンを利用してnpm login
します。
npm login --registry=https://npm.pkg.github.com Username: suguru03 Password: <access token>
ログインが完了すると~/.npmrc
が更新されており、先程のトークンがあることが確認できます。(確認できてしまっていいのかどうか…)
//registry.npmjs.org/:_authToken=<access token>
ここのトークンを書き換える必要があるだけで、npm login
は必須ではないです。
以上の設定で、リポジトリ配下でyarn install
することができるようになります。
CIの設定
Github ActionsでもCirlceCIでも、ローカル開発と同様にアクセストークンを作成する必要があります。
Github Actionsの場合
Github Actionsで自動的に挿入されるGITHUB_TOKEN
は他のGithub Private Registryにアクセスする権限がないため、別途作成する必要があります。
またGTIHUB_TOKEN
は上書きできないため、作成したトークンはNPM_TOKEN
としました。NPM_TOKEN
はOrganization配下のsecretsに入れると、再利用ができて便利かと思います。
以下はstepsの一部抜粋です。
steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: '14.x' registry-url: 'https://npm.pkg.github.com' - name: yarn install run: yarn env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
CircleCIの場合
CircleCIでは以下のように書きました。
steps: - run: name: npm login command: echo "//npm.pkg.github.com/:_authToken=$NPM_TOKEN" > ~/repo/.npmrc - run: name: yarn install command: yarn workflows: deploy-workflow: jobs: - build: context: node
こちらもGithub Actionsと同様にcontextを使用して他のリポジトリでも使用できるようにしておくと便利かと思います。
また、公式はnpm login
を叩いていますが、実際は叩かずともインストールが可能です。
dependencies: pre: - echo -e "$NPM_USER\n$NPM_PASS\n$NPM_EMAIL" | npm login
まとめ
Node.jsでのGithub Private Registryの使い方について紹介しました。 NPM Private Registryは少しハードルがありましたが、Github Private Registryは無料枠もあり気軽に試せるのでとてもオススメです、是非試してみてください。