Github Actionsから、PrivateなGithub packagesのnpm repositoryにアクセスする方法

Github packageにpublishしてあるPrivateのライブラリを取得するには認証Tokenを設定してyarn install(またはnpm install)を行う必要があります。ただ、ググってもpublishする際の情報は出てくるのですが、取得する方は内容が薄い or 間違っているものが出てくるので、情報を正すために投稿しておきたいと思います。

# 正しい設定方法

* 1. 下記のyamlをレポジトリに追加
* 2. 権限のついた個人Tokenの発行
* 3. GithubのSettingからsecretを設定

の3手順が必要です。

## 1. Github actionsの設定

```yaml:.github/workflows/build.yaml
name: 'build-and-test'

on: # rebuild any PRs and main branch changes
  pull_request:
  push:
    branches:
      - master
      - develop
jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # yarn cache files are stored in `~/.cache/yarn` on Linux/macOS
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-${{ env.cache-name }}-
            ${{ runner.os }}-yarn-
            ${{ runner.os }}-
      # プロジェクトにすでに.npmrcを入れている場合は、このステップをコメントインして下さい。
      # - run: rm .npmrc

      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          always-auth: true
          node-version: 14.4.0
          # .npmrc内で
          # //npm.pkg.github.com/@please_replace_here/:_authToken=${secrets.AUTH_TOKEN_FOR_GITHUBPKG }
          # 相当の設定に展開されます
          registry-url: 'https://npm.pkg.github.com'
          scope: '@please_replace_here'

      # https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs#example-using-a-private-registry-and-creating-the-npmrc-file
      - run: yarn install
        env:
          NODE_AUTH_TOKEN: ${{ secrets.AUTH_TOKEN_FOR_GITHUBPKG }}
      - run: |
          yarn compile
      - run: |
          yarn test
```
このファイルをレポジトリに追加します。
**scope: '@please_replace_here'** の部分だけ、書き換えまたは、Scopeの制限をする必要が無い場合はこの行を削除して下さい。それ以外は変更不要です。
このファイルを追加した上でpushすると、github actionsが走るようになります。ただ、後述の2,3の設定をしていない場合は、pushはまだしないで下さい。

※ yarn installのキャッシュも設定しています
※ yarn compileやyarn testは各自のpackage.jsonの設定に合わせて下さい
※ npmの場合は[キャッシュの設定](https://github.com/actions/cache/blob/main/examples.md#node---npm)を変更し、コマンドをnpmに置き換えてください。

## 2. 権限のついた個人トークンの発行

上記のAUTH_TOKEN_FOR_GITHUBPKGに埋め込まれるTokenを作成する必要があります。
権限としては、yarn installで引っ張って来たいlibraryのprivate github packagesへのread権限が必要になります。
[公式の手順](https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token)を参考に、適切にPackagesへのRead権限が付いたトークンを生成して下さい。
(会社の場合、個人アカウントではなくCI用のアカウントを作ってそのアカウントでトークンを発行しておくのをおすすめします。)

## 3. GithubのSettingからsecretを設定

生成したトークンを設定ページに設定する必要があります。
github actionsを実行したいRepositoryのページのSettingsを開き、左側のメニューのsecretsから登録可能です。
登録の際に、KeyはAUTH_TOKEN_FOR_GITHUBPKGで登録して下さい。(上記のbuild.yamlで設定したKeyと一致させる必要があります)
[公式の手順](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets)

Tokenの登録はrepository単位で登録出来ますが、organizationを利用しているならorganizationレベルで設定しておくと他のレポジトリでトークンの登録作業が不要になるので楽です。

# よくある間違い

良く出てくる間違った情報としてinstallのときに

```
- run: yarn install
  env:
    NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

としているものがありますが、GITHUB_TOKENには、**そのレポジトリ** のGithub packagesのRead/Write権限しかついていないため、他のPrivate repositoryのpackagesの取得は出来ません。なので、上記で示したように、追加で権限が正しくついたtokenを設定しないとうまくライブラリを取ってこれません。

# 参考(公式)

* [NPM TOKENの設定方法](https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs#example-using-a-private-registry-and-creating-the-npmrc-file)
* [GITHUB_TOKENの解説](https://docs.github.com/en/free-pro-team@latest/actions/reference/authentication-in-a-workflow)
* [secretsの設定方法](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets)

# 参考(ですが、正しくない部分があるので注意)

https://qiita.com/InkoHX/items/a433e51794ce78cc9bec