GitHub Package Registry を使って npm を公開する

申し込んでいた GitHub のベータ機能、GitHub Package Registry が利用できるようになっていたので試してみました。これは、 npmjs.com 以外の npm レジストリとして GitHub が用意しているものを利用できる機能です。オープンソースプロジェクトについては無料で利用できます。npm 以外にも Docker などのレジストリが利用できるそうです。

リポジトリのページに packages のタブが増えていて、これを利用できるようになっています。

GitHub のリポジトリページのタブナビゲーション

クリックすると、GitHub Package Registry でこの npm を公開する手順が解説されています。なお、package.json などのファイルを検出して Node.js のパッケージであることを判別しているようです。

GitHub Package Registry の初期画面

npm publish する手順

まず npm レジストリを設定します。レジストリの URL はみなさんのものに置き換えてください。

重要: この設定を行うと、デフォルトの npmjs.com のレジストリが使えなくなります。元に戻す場合はこのポストの最後の方にあるクリーンアップの手順を参照してください。

$ npm get registry
https://registry.npmjs.com/

$ npm set registry https://npm.pkg.github.com/@kamataryo

次にログインを行います。Username と Email はみなさんのものに置き換えてください。また、Email は公開されます。

$ npm login --registry=https://npm.pkg.github.com/
Username: kamataryo
Password:
Email: (this IS public) user@example.com
Logged in as kamataryo on https://npm.pkg.github.com/.

なお、GitHub の2段階認証を有効化している場合は、 Password としてGitHub の Personal Access Token を利用します。Personal Access Token は https://github.com/settings/tokens というページから作成することができます。`write:packages` `read:packages` という権限(新しく追加されたものと思われます)を指定してトークンを作成します。

Personal access token を作成する

以上で GitHub Package Registry で npm を公開する手順が整いました。早速パッケージを作成して公開してみましょう。

Hello, GitHub Package Registry! と出力する以下の最小限の npm を作成します。Author やパッケージの名前はみなさんの環境に合わせて変更してください。

index.js
#!/usr/bin/env node
process.stdout.write('Hello, GitHub Package Registry!')
package.json
{
  "name": "sandbox-hello-github-npm-package-registry",
  "version": "1.0.0",
  "bin": "index.js",
  "license": "MIT",
  "description": "My first GitHub Package Registry sample.",
  "author": "kamataryo <mugil.cephalus+github.com@gmail.com>",
  "private": false
}

index.js には実行権限を与えておきましょう。

$ chmod +x index.js

GitHub にリポジトリを作成して以上の2つのファイルをプッシュします。

$ git init
$ git add .
$ git commit -m"Init"

$ git remote add orogin <GitHub のURL>
$ git push origin master

公開コマンドを実行します。

$ npm publish
(省略)
+ sandbox-hello-github-npm-package-registry@1.0.0

これで、GitHub のレジストリにパッケージが公開されました。なお、ベータ版のためか、作業の途中で npm.pkg.github.com のサーバーがしばらく応答せず publish などができないことがありました。

最初の npm package

早速インストールして使ってみます。

$ npm install -g sandbox-hello-github-npm-package-registry
$ sandbox-hello-github-npm-package-registry
Hello, GitHub Package Registry!

できました。

クリーンアップ

インストールしたパッケージを削除します。

$ npm uninstall -g sandbox-hello-github-npm-package-registry

レジストリ情報を元に戻しておきます。これを行わない場合、みなさんの端末で半永久的に npmjs.com からパッケージがインストールできなくなりますので重要です。

$ npm config set registry https://registry.npmjs.com/

レジストリを変更せずに作成したパッケージをインストールする

registry オプションを使うことで、グローバルな config.registry の設定を書き換えずに GitHub Package Registry からパッケージをインストールできます。

$ npm install -g sandbox-hello-github-npm-package-registry --registry=https://npm.pkg.github.com/@kamataryo

まとめ

npmjs.com が提供するデフォルトのレジストリに変わって、別の npm レジストリとして GitHub のベータ機能である GitHub Package Registroy を利用する方法について紹介しました。npmjs.com を使う場合と比較して、コードとパッケージを同所的に管理できるなどメリットがありそうです。