Vercelでプロキシを動かしたらアカウントがブロックされた

# 原因

Vercel（ホスティングサービスの一つ。永続的に無料で使えるのが特徴）の、
[フェアユースポリシー（Fair Use Policy）](https://vercel.com/docs/concepts/limits/fair-use-policy)を理解せずに、
不正行為として禁止されているプロキシを使用したことが原因。

# 結論

ページ、内容が多いと、情報を調べたり理解するのに時間がかかる。
Webサービスを使用するときは、利用規約以外にもガイドラインなど目を通しておくこと。

Vercelはフロントエンド向けであり、
プロキシや、負荷の大きいバックエンドを使用する場合は、
Herokuといった他のホスティングサービスを使うこと。

# 経緯

- 目的: ブラウザ、Webサーバーで使えるMinecraftのクライアント、サーバーを作成したい。

調べてみると[prismarine-web-client](https://github.com/PrismarineJS/prismarine-web-client)というのがあるが、
- UIなどの機能が不完全であること
- 非常に動作が重いこと
- Modに対応したい

という理由から、
Javaで動作する既存のクライアント、サーバーを使いたい。
（この時点でprismarine-web-clientは無関係）
Vercelには既にOpenJDKが入っているため、標準でJavaを使用できる。

しかし、ゲームのクライアントであるため、画面がなければ起動できない。
そこで、**ブラウザで画面を使えるようにする [javascript-x-server](https://github.com/GothAck/javascript-x-server) をインストール、してしまった**。

### ブロックされてもメールは送られてこない
次の日（2022/1/16）、開発を続けて、 Vercel CLI からデプロイしたらエラーが発生した。
嫌な予感がしたが、原因がわからない。
調べてみると、`.vercel`フォルダを削除すると直るらしいのでやってみたら、
最初に戻ったかのようにログインが求められた。
CLIからはログインできなかったが、
原因が全くわからない。

嫌な予感がしたので、
**公式サイトでログインを試みると、
私のVercelアカウントがブロックされていることがわかった。**

### 意味不明なフェアユースポリシー
これは何らかのルールに違反してしまったと思い、
Vercel公式サイトの情報を漁り、
フェアユースポリシーを発見、
おそらくこの中にある項目に違反してるものと見た。
初めて見たし、しっかり読んでみたが、
はっきりとした原因は分からない。

アカウントがブロックされる条件である、
フェアユースポリシーは、
制限事項のページでは確認できず、
そもそも「フェアユースポリシー」という名前では、
私には重要な情報かどうかもわからない。

さらにフェアユースポリシーは、
サイトのヘッダーには直接書いておらず、
ドキュメントの中のページとして追加されている。

ちなみにフェアユースポリシーのリンクは、
[料金プラン](https://vercel.com/pricing)のページなんかにちっちゃく書いてある。
わかるかこんなもん。

### 曖昧すぎるプロキシ
Vercelでは負荷がかかることが「制限」されるような、
何らかの「使用量」などではなく、
今回のプロキシを動かすという「条件」で、
アカウントが「ブロック」されるということは、
フェアユースポリシーを知らなかった私は、
全く想定していなかった。

ちなみに、ブラウザで表示するサイトの画像を圧縮して通信量を削減するChrome、Firefoxアドオン「[Bandwidth Hero](https://bandwidth-hero.com/)」では、
アドオンを使用するために必要なプロキシを、Herokuにデプロイするボタンが用意されている。
このアドオンめちゃくちゃオススメ。（宣伝）

Bandwidth Heroは立派なプロキシである。
かれこれ半年以上使っているし、
もともとHerokuでデプロイするように想定され、
5年前からあるらしいから、
おそらく、Herokuではプロキシが許可されているのだろう。
ちなみに、私は普段Firefoxを使っている超少数派である。
少数派に人権はない。

アカウントは、おそらく自動的にブロックされたのだろう。
そもそもなぜプロキシを制限するのか、
何がプロキシにあたり、何がプロキシでないのか、
曖昧すぎる。
どういったケースを想定してフェアユースポリシーは作成されているのか？
**クライアントとデータベースを接続するバックエンドはプロキシではないのか？**
そんな事を考えているとホスティングサービス恐怖症になりそうだ。
いや、もう既になっている。

さらに厄介なことに、**一部のサイトではVercelでプロキシを使用するものが紹介されている。**
怖すぎる。

Vercelでは他にも、
- 直リンク（ホットリンク）のためのメディアホスティング
- （Web）スクレイパー
- （機械学習などの）CPUを集中的に使用するAPI

などが禁止されている。
どれも負荷のかかることだが、
もっともVercelは無料でWebサービスを開始できることを謳っており、
スケーラブルかつ従量制のようなもので、
負荷のかかる処理は自動的に制限されるものだと過信していたが、
それは大きな間違いだった。

私が危ない人なのか？
プロキシ以外の禁止事項も触れるかもしれないものが多く、
フェアユースポリシーを知ることができてよかったと思う。

### メールを送ったがすぐに解除してもらえず諦めた
言ってしまえばユーザーアカウントを作り直せばよいのだが、
メールアドレスを新しく作成して管理するのがめんどくさそうで抵抗がある。
先に言っておくと、**アカウントを作り直したほうが早い。**

ブロックを解除してもらうのと、原因を教えてもらうようメールを送った。
海外なので時差がある。一応当日中に返信が来たが、これだけで1日かかると思っておいたほうが良い。

返信の和訳:
```
こんにちは。

ご連絡をいただきありがとうございます。
あなたのプロジェクトの1つがプロキシを実行しようとして、私たちのフェアユースポリシーに違反したため、あなたのアカウントはブロックされました。これはデプロイメントのリンクです。
（アプリ1の公開リンク）

当社のフェアユースポリシーはこちらでご確認いただけます。
https://vercel.com/docs/concepts/limits/fair-use-policy
```

メールにあるアプリのリンクを開くと、
`This Deployment has been disabled.`
と表示されている。
この画面はプロジェクトの画面ではなく、
アプリのユーザーが閲覧する公開リンクである。
なぜデプロイが無効になっているかは、メールの返信でしか分からない。
フェアユースポリシーはさっき見たぞ。

再び、アカウントのブロックを解除してもらうようメールを送った。

返信の和訳:
```
こんにちは

問題のあるプロジェクトがいくつかありますね。

    （アプリ1の公開リンク）
    （アプリ2のプロジェクトのリンク）

これらのプロジェクトを確認し、Vercelプラットフォーム上でそのような行為に関与しないことをご確認ください。
```

**問題のあるプロジェクトが増えてる**。
ログインできないのにプロジェクトのリンク貼られても...
アプリ1はjavascript-x-serverのテストである。

アプリ2はMinecraftのランチャーが起動するかどうかのテストである。
アプリ2の中にjavascript-x-serverは含まれておらず、
結局何が原因なのかは曖昧だ。

アプリ2では、次のシェルスクリプトを`npm run build`経由で実行している。
シェルスクリプトを実行すること自体は、
他のプロジェクトでも行っているため問題はない。

```
npm i java

curl -O -s https://launcher.mojang.com/download/Minecraft.tar.gz
tar zxvf Minecraft.tar.gz
cd minecraft-launcher/
./minecraft-launcher
```

`npm i java`は、Node.jsとJavaを連携するテストのために書いており、
このモジュールは使っていない。
後のコードはMinecraftのランチャーをインストールして起動している。
負荷がかかるのでおそらくこの部分だとは思うが、
どれだけ負荷がかかるといけないのかは曖昧だ。

私はここで萎えた。
メールを2回送ってもブロックを解除してくれない。
やり取りが噛み合っていないと思っていたが、
今思うと「フェアユースポリシーを理解しました」ではなく、
「フェアユースポリシーを再確認します」と送ってしまったことが原因なのか？
今思えば、Google翻訳を使わないでDeepLで翻訳すればよかった。当時はDeepLを知らなかったが。
英語はできないし、なんて言えばいいんだ？
また「ブロックを解除してください」っていうのか？
そもそもこのようなケースで、ブロックは解除してもらえるのか？
私がVercelからのメールに基づいて推測した、
アカウントがブロックされた原因は合っているのか？

### おわりに
Vercelを使った理由
- Herokuに慣れておらず、Vercelに慣れている
- Herokuではアプリ数に制限がある
- 負荷のかかる処理は自動的に制限されるものだと過信していた
- Vercelがフロントエンド向けであり、負荷のかかることができないことを理解していなかった
- Vercelのフェアユースポリシーを知らなかった
- PCが低スペックなため、クラウド上でテストしたかった
- 無料でWebサービスをデプロイしたかった

といったアホみたいなことで結果、アカウントがブロックされてしまった。
ブロックを解除してもらえず数日かかってしまった。
何時間もかけて記事を書いて、
めんどいことを伝えるのがまためんどい。

気が向いたら、Vercelが改善すべき点についてメールを送ろうと思う。