npmのorganizationアカウントを作成するタイミングがあったので、調べた内容をメモとして残します。
0. organizationアカウントとは
企業やプロジェクトなどの組織として、npmのパッケージ管理を行うための仕組み。
組織名をスコープ(namespace)としたパッケージの作成や、有料プランを使用する場合の支払いの一元管理が可能となる。
Googleのorganizationページ
https://www.npmjs.com/org/google@googleをスコープにしたmapsパッケージ
https://www.npmjs.com/package/@google/maps
1. organizationアカウント作成方法
1.1 個人アカウントの用意
organizationアカウントは個人アカウントをベースに作成する。
ということで、まず個人アカウントが必要となる。
個人アカウント登録ページ
https://www.npmjs.com/signup
ベースとした個人アカウントが、organizationアカウントの最初のOwnerとなる。
Owner権限は後から別のアカウントに変更可能(それほど慎重に考えなくて良い)
1.2 organizationアカウント作成
組織名と料金プランを登録するだけでOK。
登録は個人アカウントページの右下、 [ create an organization ] から行う。
個人アカウントページ
https://www.npmjs.com/~create an organization 直リンク
https://www.npmjs.com/org/create
1.2.1 組織名について
登録済みのorganizationアカウント、個人アカウントと重複しない名前のみ使用可能。
ベースの個人アカウント名を組織アカウント名としてコンバートすることも可能。(その場合、ベースの個人アカウント名を新たに付け直すフローになる)
組織名はorganizationページのURLとして使われる。
組織ページURLの例
https://www.npmjs.com/org/組織名
1.2.2 料金プランについて
publicなパッケージの管理なら無料プランでOK。
有料プランでは、privateなパッケージの管理が出来るようになる。
有料プランの月額 : 所属メンバー数 × $7
2. メンバーについて
組織メンバーとして個人アカウントを登録することができる。
組織パッケージの管理者は組織メンバーである必要がある。
メンバーの追加はOwner権限のあるアカウントで行う。
ベースとした個人アカウントがOwner権限のメンバーとしてあらかじめ登録されている。
2.1 メンバー追加方法
Owner権限のあるアカウントを使用し、organizationページのmembersタブから追加する。
各メンバーの権限もこの画面で設定できる。
2.2 権限について
メンバーの権限は3種類
- Owner
- Admin
- Member
出来ること | Owner | Admin | Member |
---|---|---|---|
パッケージ管理 | ○ | ○ | ○ |
チーム管理 | ○ | ○ | |
メンバー管理 | ○ | ||
料金プラン管理 | ○ |
3. チームについて
チームという単位で組織メンバーをグループ分けすることが出来る。
組織のパッケージは1つ以上のチームに割り当てられ、そのチームに所属するメンバーに管理権限が与えられる。
チーム作成やメンバー追加は、OwnerかAdmin権限のあるアカウントで行う。
3.1 チーム作成方法
OwnerかAdmin権限のあるアカウントで、organizationページのteamsタブから作成する。
チームへのメンバー追加やパッケージ追加もこの画面で行える。
4. 組織パッケージについて
組織スコープだけでなく、スコープなしや個人スコープのパッケージも組織管理にすることができる。
それぞれのパターンで手順が若干異なるので簡単にまとめる。
npmの公開手順自体がわからない方はこちらの記事が参考になります。
3分でできるnpmモジュール
組織スコープのパッケージ登録
- package.jsonのnameを
"@組織名/パッケージ名"
にする - 組織メンバーのアカウントで
npm publish
する- 有料プランならprivateパッケージとして登録される
- 無料プランはprivateが使えないので
npm publish --access public
とする - 初期チームはpublishしたメンバーの最初のチームになる(publish時に指定する方法が見当たらない・・・)
- OwnerかAdmin権限のあるアカウントで、organizationページのteamsタブから任意のチームに管理を移す
スコープ無しのパッケージ登録
- package.jsonのnameを
"パッケージ名"
にする -
npm publish
する - publishしたアカウントにAdmin権限を与える
- publishしたアカウントで任意のチームにパッケージを登録する(パッケージ公開したアカウントでしか行えない)
個人スコープのパッケージ登録
- package.jsonのnameを
"@個人アカウント名/パッケージ名"
にする -
npm publish
する- 個人アカウントが有料プランならprivateパッケージとして登録される
- 無料プランはprivateが使えないので
npm publish --access public
とする
- publishしたアカウントにAdmin権限を与える
- publishしたアカウントで任意のチームにパッケージを登録する(パッケージ公開したアカウントでしか行えない)
5. 特殊な運用メモ
Ownerアカウント変更
- Owner権限を与えるアカウントを、Owner権限でメンバーに追加する
- 追加したアカウントで、元のOwnerを別の権限に変更する
メンバーの削除
- Owner権限を与えるアカウントでチーム管理画面から削除できる
- メンバーが作成したスコープ無しパッケージや個人スコープパッケージは組織に残る
組織パッケージの削除
- スコープ無しパッケージや個人スコープパッケージはチーム管理から外すと作成した個人アカウントの管理に戻る(作成アカウントがメンバーにいないとパッケージが消失したが、バグかもしれない。)
- 組織スコープのパッケージも個人パッケージと同様、公開から24時間以内は
npm unpublish --force パッケージ名
で物理削除することは可能(それ以降は問い合わせで対応)