GitHubのプランをProからTeamに変更しようとして調べたこと

# はじめに

GitHubのプランを変更するにあたり、イメージが付きやすいように、GitHubの構成について定義します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/95b0d700-9c9d-723d-3a46-d89ed1b6ccb0.png)

- プライベートなOrganization（Org01）のリポジトリ（Repo01）とコラボレートしている。
- Proプランの代表者（User01）は対象リポジトリをフォークし、Freeプランの開発者をコラボレーターとして招待し、開発を行っている。
- それ以外にも代表者のリポジトリではいくつかの開発者をコラボレーダーとして招待し、開発を行っている。

# 課題

- メンバーが増えた場合に、必要なリポジトリ単位にメンバへ招待が必要
- Org01には必要なリポジトリ全てで、コラボレーターとして招待依頼
- メンバーが減る場合に、招待していたメンバをリポジトリ単位で削除が必要
- Org01にはリポジトリ全てで、コラボレータ―の削除依頼
- リポジトリが増える場合、メンバへ必要なコラボレータの招待が必要

### メンバーが増えた場合

メンバーが増えた場合には以下の作業が発生します。

- 開発対象となる全てのリポジトリからコラボレーターとして招待
- Org01からも必要であれば、開発対象となる全てのリポジトリからコラボレーターとして招待

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/083e6d69-150b-461e-730a-b576a6d87fd6.png)

### リポジトリが増えた場合

リポジトリが増えた場合には以下の作業が発生します。

- Org01の対象リポジトリから、User01をコラボレーターとして招待
- User01は対象リポジトリをフォーク
- フォークしたリポジトリから、開発者（全員）にコラボレーターとして招待

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/385621c0-4bed-0471-ff6f-134077f7251b.png)

### メンバーが減った場合

メンバーが減った場合には以下の作業が発生します。

- コラボレーターとして招待していた全てのリポジトリからメンバーを削除
- Org01のコラボレーターとして招待していた全てリポジトリからメンバーを削除

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/65e64701-99be-bd8a-60d3-e544580e692a.png)

# プランをProからTeamに変更し実現したいこと

- ユーザが増減するたびに、リポジトリ単位でのコラボレート招待・削除の手間の軽減
- リポジトリが増えるたびに、対象メンバ全てに招待を出す手間の軽減
- ユーザが増減するたびに、リポジトリ単位でOrg01に対してコラボレート招待・削除の軽減

### メンバーが増えた場合

作業が以下のように変わります。

- アカウントへのメンバーの追加
- Org01からも必要であれば、開発対象となる全てのリポジトリからコラボレーターとして招待

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/0612944e-4456-2a6f-3da5-44b84d951a70.png)

### リポジトリが増えた場合

作業が以下のように変わります。

- リポジトリにコラボレータ―を追加
- チームの管理者（または権限を有したユーザー）は、リポジトリをフォーク
- フォークしたリポジトリをチームに設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/bec03bd4-c9da-4431-45ba-b2f6c6ec6ef5.png)

#### メンバーが減った場合

作業が以下のように変わります。

- アカウントからメンバーの削除
- Org01のコラボレーターとして招待していた全てリポジトリからメンバーを削除

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/c4d18d13-0fdd-ceb6-8030-8b06d0d15e0d.png)

# プランをProからTeamに変更し実現できないこと

- ~~ユーザが増減するたびに、リポジトリ単位でのコラボレート招待・削除の手間の軽減~~
- ~~リポジトリが増えるたびに、対象メンバ全てに招待を出す手間の軽減~~
- ユーザが増減するたびに、リポジトリ単位でOrg01に対してコラボレート招待・削除のの軽減

### Organization単位にコラボレート

- リポジトリからOrganizationに対して許可を貰えると、リポジトリ側へのユーザの管理が不要になるので、いいかなと思いまいしたが、これは出来なそうです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/c97c1025-8a4e-195a-a8fb-a6a91f333374.png)

### Organizationのチーム単位にコラボレート

- リポジトリからOrganizationのTeamに対して許可がもらえると、これも同様にリポジトリ側へのユーザの管理が不要になるので、いいかなと思いまいしたが、これも出来なそうです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/f0c79de9-3606-753d-6827-0393706ad26e.png)

考えてみたら、コラボレート元が、いつの間にか見知らぬ人が、プライベートなリポジトリのコラボレータになっていたら問題ありますね。

# ProからTeamに変更する方法

ProからTeamに変更する方法は以下の方法が考えられます。

### 代表者（Proプラン）のアカウントをOrganizationに変更

ProプランのアカウントをOrganizationにしようとすると以下の警告が表示されます。

- Any private repositories owned by Your repository will be disabled
    - プライベートリポジトリは無効になります。これは移行後に有償の登録を済ませることで解除されます。
- You will no longer be able to sign in to Your repository (all administrative privileges will be bestowed upon the owners you choose)
    - その時に設定した管理者アカウントに管理が移行してしまうので、こちらのアカウントにログインすることは出来なくなります。
- Any user-specific information (OAuth tokens, SSH keys, Job Profile, etc) will be erased
    - 例えば、このアカウントでアクセストークンを発行し、利用している場合（AWSのCodeBuildでビルドするのに、GitHubのプライベートリポジトリに対して、このユーザのアクセストークンを使って接続するなど）、無効になるので移行後に、関連するサービスが動かなくなる可能性があります。
- Any commits credited to Your repository will no longer be linked to this GitHub account
    - 例えば、このユーザでPRとかコラボレート先でPRとかしている場合に、このアカウントへのリンクは無くなるよ。ってことかな？実際にアカウントのリンクは [ghost](https://github.com/ghost) になってた。
- If you are using Your repository as a personal account, you should create a new personal account before transforming Your repository into an organization.
    - このアカウントを開発メンバとして利用している場合は、他に開発用アカウントを作成するか、他のOrganization用のアカウント作成するかする必要があります。

この警告を許容できるのであれば、このアカウント自体をOganizationへ移行することができます。

- User01アカウントをそのままOrganizationアカウントへ変更

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/c953b915-0b1d-fff6-8c04-84eed4b23419.png)

- アカウントの移行を行ったら、メンバーを追加

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/2d308f5a-923d-b9cc-262e-dca1da61302f.png)

- チームの作成とメンバとリポジトリの割り当て

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/07a38f27-3591-761b-2c60-2d0caa4f9fee.png)

### Organizationのアカウントを作成し、リポジトリを移行

ProプランのアカウントをOrganizationへ移行する場合の警告にリスクを感じる場合、Organization用のアカウントを作成する方法もとれます。

例えば、Proプランのアカウントは、ユーザがすでに開発用として利用しているようであれば、この方法をとったほうがいいかもしれません。

- はじめにOrganization用のアカウントを作成します。
- この時アカウントとして、既存のProプランのアカウントを指定。
    - もちろん他を指定してもOKですが、次にリポジトリの移行を行います。その際に移行元・先の管理者である必要があるため、移行元の管理者がそのまま管理者にしたほうが無難です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/6432134f-7dd2-a56e-f0c6-de048ad8b1d1.png)

- メンバを追加

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/87d46991-2f67-0721-1154-c161705d9412.png)

- Proプランアカウントからリポジトリを移動させます。
- リポジトリの移行は、リポジトリ > Settings > Options > Danger Zone > Transfer ownership で。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/72634753-76ad-d332-9f7a-71e9005236d6.png)

- 最後にチームを作成し、それぞれのチームを作成しメンバを割り当てる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/297616/863fc633-dc9c-09f5-7da1-8afc0387fc37.png)

# 料金

料金は [このページ](https://github.co.jp/pricing.html) を参照してください。

# 最後に

- 解決出来ない課題が残ったのはもやっとしますが、これはしかたないのかと思います。
- ただ自社内（チーム内）であれば、ユーザ管理の負担は減りそうですが、料金とのトレードオフでしょうね。