LoginSignup
2

posted at

updated at

Organization

npmパッケージをGitHubで公開する

はじめに

なんと、2019年5月10日からGitHub上でパッケージの公開ができるようになっていたみたいです(2019/11/13より正式版に)。
そのプロダクト名は、 GitHub Packages です。
さらには、GitHub Actions を使い、GitHub上でパイプラインを構築でき、CI/CDを動かせるようになってきました。
これにより管理しなければならないTOKEN情報を減らすことができ、WebUIも共通のものを使うことができるようになるなどのメリットがあります。
そんなメリットを享受すべく、GitHubでnpmのパッケージを公開する方法を学びました。

事前準備

npmコマンドでGitHubにログインする

まず、以下のページからnpmレジストリ用のTOKENを発行してください。
https://github.com/settings/tokens/new

必要な権限は、 repo read:packages write:packages です。
この3つは最低限付けてください。
キャプチャ.jpg

この発行したTOKENを使って、npmコマンドでログインします。
そのコマンドは以下になります。

.sh
npm login --registry=https://npm.pkg.github.com/ --scope=(GitHubのユーザー名)
> Username: (GitHubのユーザー名)
> Password: (先ほど作成したTOKEN)
> Email: (レジストリの連絡先メールアドレス)

# 確認方法
npm whoami --registry=https://npm.pkg.github.com/ --scope=(GitHubのユーザー名)
# GitHubのユーザー名が出力されればOK

npm v9以降は、ログイン時に --auth-type=legacy を付ける必要があります。

npmコマンドにレジストリを登録する

npm config set @(GitHubのユーザー名):registry https://npm.pkg.github.com/

公開する

.sh
npm publish

他のリポジトリに追加する

.sh
yarn add @(GitHubのユーザー名)/(パッケージ名) --update-checksums

もし異なる環境でパッケージを追加する場合は、事前準備 を参考に、npmコマンドでのログインやレジストリ登録を行ってください。

追加時にエラーが発生する。

普通に yarn add しても追加することができません。
以下のようなエラー文が表示されます。

.txt
error https://npm.pkg.github.com/download/@(GitHubのユーザー名)/(パッケージ名)/(バージョン)/(ハッシュ値): Integrity checked failed for "@(GitHubのユーザー名)/(パッケージ名)" (none of the specified algorithms are supported)

そこで使用するのが、 --update-checksums というオプションです。
上記のエラーは、ローカルとリモートの間で、chucksum値が異なる場合に発生するようです。
そのため、 --update-checksums を使い、ローカルのchucksum値を更新することでこのエラーは解決します。

なお、このエラーはnpmコマンドでパッケージを追加する場合では、発生しないようです。
この記事では、yarnコマンドでパッケージ管理を行っている場合は気を付けてください。

おわりに

GitHubがMicrosoftに買収されたときは、あちこちであれこれ騒いでいましたが、実際にはアップデート速度が高まり、Microsoftの『OSS推進』と『開発者を支援する』という考えにより、より開発者に優しいプロダクトになったように感じます。
『GitHub Packages』と『GitHub Actions』の2つを使うことで、誰でも簡単にCI/CDを行えるようになりました。これは個人に対しても中小企業に対しても大きな影響を及ぼすでしょう。
モバイル側でもGitHubに動きがあるので、今後も「Microsoft」のGitHubが楽しみです。

参考資料

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2