SandBoxテスターの作成数の上限について

## 背景

iOSの課金環境のテストをする上でSandboxテスターが必要となりますが、Sandboxテスターを自動作成したほうが効率が良いケースがあります。
自動作成するにあたりむやみに作り続けるのは良くない+ドキュメントに記載がなかったこともあり、Sandboxテスターの上限数を調べるために以下の確認をしました。

## サンプルコード
手始めに2500件のSandboxテスターを作成します。
fastlaneのSpaceshipを使うことでSandboxテスターの作成が簡単に行えるので、以下のようなコードで確認しました。

```rb
# Fastfile

default_platform(:ios)
require 'spaceship'

platform :ios do
  lane :create_sandbox_users do
      Spaceship::Tunes.login(ENV["SPACESHIP_USERNAME"], ENV["SPACESHIP_PASSWORD"])

      for i in 1..2500
        email = "#{format('%05d', i)}@test.com"
        puts email
        Spaceship::Tunes::SandboxTester.create!(email: email, password: ENV["SANDBOX_PASSWORD"])
      end
  end
end
```

### 実行例

```console
fastlane create_sandbox_users
```

### 出力例

```
00001@test.com
00002@test.com
00003@test.com
00004@test.com
.
.
.
```

## 2500件のSandboxテスターを作成
### Sandboxテスター一覧
AppStoreConnect上では、以下のように表示されます。
<img width="1756" alt="Screen Shot 2019-12-31 at 17.26.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/fbeab6cb-6b4c-80e4-ac39-4bf1c500c8e2.png">

### 疑問点
ここで疑問に思ったのが作成した2500件のアカウント全ては表示されず、**`02277@test.com`までしか表示されていません。**
(ところどころ表示されていないアカウントがあったのでトータル2000件ほどが表示されています)

### 検索結果
また、AppStoreConnect上の検索は表示しているものに対してフィルターしているため、検索結果にも表示されません。
<img width="1744" alt="Screen Shot 2019-12-31 at 17.26.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/ee7d72a4-14ca-57b9-2b29-733241fba48b.png">


### Sandboxテスター一覧の確認
そもそも本当に作成がされていないのか以下の手順でSandboxテスター一覧を確認しました。
1. AppStoreConnectにログイン
2. https://appstoreconnect.apple.com/WebObjects/iTunesConnect.woa/ra/users/iap にアクセス

すると、次のようなJSON形式のレスポンスが返却されます。
<img width="253" alt="Screen Shot 2019-12-31 at 17.45.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/71a98ee7-c6ca-7ced-d8b8-96c12e8fa35f.png">


`02500@test.com`が含まれていることから、AppStoreConnect上には表示されていないだけで作成されていることが確認できます。

### iPhoneでログイン
試しに表示されていない`02500@test.com`にiPhone上でログインをしようとすると、問題なくログインできます。
<img width="30%" alt="IMG_4647.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/021c9d4c-ea51-204f-52e7-eaa3cf39ffaa.png">


### わかったこと
この時点でわかったことをまとめると
1. AppStoreConnect上ではSandboxテスターの表示上限数がある(約2000件)
2. 1.で表示されていなくても、Sandboxテスターの作成が成功していればiPhone上でログイン可能

さらにSandboxテスターを増やしたらどうなるかを確認するために、トータル数10000(2500+7500)のSandboxテスターを作成してみます。

## 10000件のSandboxテスターを作成
### Sandboxテスター一覧
新規で作成したユーザーが表示されていますが、`04085@test.com`で止まっています。
<img width="1682" alt="Screen Shot 2019-12-31 at 20.16.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/9042cc48-bcc1-e17a-e333-0e3ed3d17bf7.png">

### iPhoneでログイン
前回同様に作成が成功したアカウントにはログイン可能です

<img width="30%" alt="IMG_4649.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/2f8ff69a-77ff-949b-8475-30e7b254867b.png">

### Sandboxテスター一覧が取得できない
しかし、https://appstoreconnect.apple.com/WebObjects/iTunesConnect.woa/ra/users/iap にアクセスするとユーザー数が多いのが原因か`504 Gateway Timeout`によって、Sandboxテスター一覧のレスポンスが取得できませんでした。
<img width="1682" alt="Screen Shot 2019-12-31 at 20.16.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116582/a7497843-849e-8a97-3ad7-cff701aaa1d8.png">


## まとめ
上記で確認してきたことをまとめると

- AppStoreConnect上のSandboxテスターには**表示上限数がある**(自分の試した環境では約2000件だった)
- 作成が成功したアカウントは、**AppStoreConnect上の表示有無によらず**iPhone上でログイン可能
- 一定の作成数を超えると、ユーザー一覧情報が取得できなくなる

作成したアカウントがAppStoreConnect上に表示されていないと混乱を招きやすいので、以下のように運用することをおすすめします。

- Sandboxテスター数を表示上限数(約2000件)以内に収める
- 表示上限数を超える場合は、古いSandboxテスターを削除する

## 関連URL
- https://help.apple.com/app-store-connect/?lang=ja-jp#/dev8b997bee1
- https://github.com/fastlane/fastlane/blob/master/spaceship/docs/AppStoreConnect.md