suguru.dev

バンクーバーで働くエンジニアの備忘録

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してくれます。リリースはこちらからです。f:id:suguru03:20201017090921p:plain

モジュールを使用したいリポジトリの設定

次にモジュールを使用したいリポジトリ側でインストールできるように設定する必要があります。

.yarnrcの作成

使用したいリポジトリのルート配下に以下のような.yarnrcを作成します。以下の設定で特定のモジュールのみをGithub Registryから取得することができます。

registry "https://registry.npmjs.org"
"@<org name>:registry" "https://npm.pkg.github.com"

ローカルの設定

ローカル開発で使用する場合、Github Registryにアクセスできるようにする必要があります。

Personal access tokensのページからアクセストークンを作成します。権限は read:packagesだけで十分です。 f:id:suguru03:20201017092134p:plain

作成したトークンを利用して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は無料枠もあり気軽に試せるのでとてもオススメです、是非試してみてください。

リンク