運営の方針
部屋のサーバー(Cloudflare版かVercel版)を、身内の外にも開いて運営する人向けのページです。サーバーが何を預かり、いつ消えるのか、権利侵害の申し立てにどう応えるのかをまとめました。プライバシーポリシーや利用規約を書くときの材料にしてください。
法律の助言ではありません
このページは、部屋のサーバーのしくみを説明するものです。公開して運営するときの法的な判断は、ご自身で、必要なら専門家に確かめてください。
サーバーが預かるもの
| もの | 中身 | 置き場所(Cloudflare版) | 置き場所(Vercel版) | 消えるとき |
|---|---|---|---|---|
| アカウント | DiscordのユーザーID、表示名、アバターのURL、サーバーが決めたユーザーID | アカウントのDurable Object | Redis | 本人か運営する人がアカウントを消したとき |
| リフレッシュトークン | ハッシュだけ(そのものは置かない) | アカウントのDurable Object | Redis | 30日で使えなくなる。ログアウトやアカウントを消したとき |
| 卓の状態 | コマ、カード、チャットの発言、部屋の名前、パスワードのハッシュ、ユーザーIDごとの役割 | 部屋のDurable Object | Redis | 部屋が消えるとき(既定は最後の1人が抜けて24時間) |
| 部屋の一覧 | 部屋の名前、表示用のID、パスワードの有無、人数、部屋ごとのGMのユーザーID、部屋を作った人のDiscordのユーザーIDと送信元のIPアドレス | ロビーのDurable Object | Redis | 部屋が消えるとき |
| 部屋に入っている人 | 送信元のIPアドレス、DiscordのユーザーID | 部屋のDurable Object | Redis | 部屋を抜けたとき |
| 画像と音声 | 部屋に置かれたファイル(名前は部屋の鍵と中身のSHA-256)と、置いたときのファイル名 | R2のバケット | Vercel Blobのストア | 部屋が消えるとき。部屋のGMか運営する人が消したとき |
| 置かせない印 | 運営する人が二度と置かせないようにした画像と音声のSHA-256 | R2のバケット | Vercel Blobのストア | 運営する人が解除したとき |
| 画像と音声の写し | 一度配った画像と音声 | Cloudflareのデータセンターのキャッシュ | (無い) | 最長7日。部屋を消しても残るが、読めるのは消してから最長15分 |
| 部屋の記録 | 部屋の鍵、ホスト名、部屋で起きたこと(入った・出た・削除したなど)、役割や接続を閉じた理由 | Workers Analytics Engine | Functionのログ | 部屋を消しても残る。Cloudflare・Vercelが決めた期間 |
| ログ | 部屋のサーバーへのリクエストの記録(送信元のIPアドレスを含む) | Cloudflare(observability) | Vercel(Logs) | Cloudflare・Vercelが決めた期間 |
| 管理の記録 | ログイン、部屋を作った、画像や音声を置いた、回数の上限を超えたなどの時刻、送信元のIPアドレス、DiscordのユーザーIDと表示名 | 運営のDurable Object | Redis | 7日。2000件を超えたら古いものから(運営する人の操作は90日・1000件) |
| BAN | 運営する人が止めたIPアドレスの範囲かDiscordのユーザーIDと、理由 | 運営のDurable Object | Redis | 解いたとき。期間が過ぎたとき |
| 運営する人のパスキー | 管理画面に入る運営する人のパスキーの公開鍵、名前、使った時刻 | 運営のDurable Object | Redis | 消したとき |
| 通報 | 部屋にいる人からの通報の対象と理由、通報した人の送信元のIPアドレス・DiscordのユーザーID・部屋での役割 | 運営のDurable Object | Redis | 90日。1000件を超えたら、ログインの有無で多いほうの、いちばん多く残している人の古いものから |
部屋が消えるときは、部屋が消えるときにあります。ROOM_RETENTION_HOURSを変えたときは、それに合わせて読み替えてください。
- Discordのメールアドレスや、参加しているDiscordのサーバーは求めず、預かりません。
- Discordのアクセストークンは、その人の情報を1度読むのに使うだけで、置きません。
- 参加者には、cookieを使いません。トークンはAxeが手元(ブラウザ)に置きます。cookieは、管理画面の運営する人のログインにだけ使います。
- レート制限のために送信元のIPアドレスを数えますが、それを置いておくことはしません。上限を超えた送信元は、管理の記録に残ります。
- 管理の記録と部屋を作った人は、
ADMIN_DISCORD_IDSを入れていなくても置きます(→ 管理画面とBAN)。 - アカウントは、使われなくなっても自動では消えません。本人が消すか、運営する人が消します。
本人がアカウントを消すとき
DELETE /v1/accountで消せます(→ アカウントを消す)。Axeでは、ロビーの上のアカウント欄にある「アカウントを削除」から消せます。本人から頼まれたときは、運営する人が管理画面の「アカウント」から、DiscordのユーザーIDで消すこともできます(→ 管理画面とBAN)。どちらでも、アカウントの情報とすべてのトークンが消えます。部屋の席の表には、そのユーザーIDだけが残り、部屋が消えるときに一緒に消えます。その人が部屋で書いた発言には、書いたときの名前とアバターの画像のURLが載っていて、これも部屋が消えるまで残ります。
置かれた画像と音声を見るとき
部屋に置かれた画像と音声は、その部屋の参加者に配るために預かるものです。運営する人は、管理画面の「アップロード」で、置かれたものを1件ずつ開いて見られます(→ 管理画面とBAN)。見るのは、権利侵害の申し立てや不正な使われかたに応えるときだけにしてください。参加者からの通報も、そのきっかけになります。見たことは、だれが・いつ・どの部屋の何を見たかと一緒に、管理の記録に90日残ります。運営する人が何人かいれば、互いに確かめられます。参加者には、このことをプライバシーポリシーで知らせてください(ひな形には書いてあります)。
権利侵害の申し立てに応える
置かれた画像や音声について、権利者から申し立てを受けたときの手順です。
- 申し立てを受ける窓口(メールアドレスやフォーム)を決め、配信しているページに載せます。
- 対象の画像のSHA-256を確かめます。画像のURL(
/v1/rooms/<部屋の鍵>/assets/<SHA-256>)に載っています。 - 同じ画像を置いている部屋を探します。画像は部屋ごとに置くので、同じものがほかの部屋にもあることがあります。置き場所の
rooms/の下で、名前が/<SHA-256>で終わるものを探します。 - 見つかったものをすべて消し、同じものをまた置かせない印を置きます。印は、
blocked/<SHA-256>という名前の、中身が空のファイルです。 - Cloudflare版のWorkerは、一度配った画像を各地のキャッシュに置いて、最大7日そこから配ります。手で印を置いたときは、ダッシュボードの「キャッシュを削除」で、見つかった部屋ごとの画像のURLを消します。消さないと、そのあいだ、その部屋に入っている人には配り続けます。
すでに受け取ったブラウザの手元にあるものは、こちらからは消せません。
管理画面を使っていれば、手順3と4は、管理画面の「アップロード」でできます。SHA-256か名前で絞り込み、「消して二度と置かせない」を押すと、見つかったすべての部屋から消し、印を置きます(→ 管理画面とBAN)。管理画面から置かせないようにしたものは、消しそこねた部屋やキャッシュに残っていても、30秒ほどのうちにどこからも配らなくなるので、手順5も要りません。管理画面を使っていないときは、置き場所に対して手で行います。
Cloudflare版では、R2のバケットに対して、次のように消して印を置きます。wranglerにはバケットの中を一覧にするコマンドが無いので、手順3で探すときは、R2のS3互換API(ListObjectsV2)などを使います。
cd apps/cloudflare
# 消す(見つかった部屋の鍵ごとに)
npx wrangler r2 object delete <Workerの名前>-assets/rooms/<部屋の鍵>/<SHA-256> --remote
# また置かせない印(中身は空)
: > empty
npx wrangler r2 object put <Workerの名前>-assets/blocked/<SHA-256> --file empty --remoteVercel版では、同じことをVercel Blobのストアに対して行います。プロジェクトのStorageでストアを開くと、置いてあるファイルを名前で探して消せます。印のファイルは、@vercel/blobのputで、blocked/<SHA-256>という名前を付けて置きます(addRandomSuffixは使わない)。
印を置いたものを誰かがまた上げようとすると、どの部屋でも451 blockedで断ります。印は、部屋が消えても、取りこぼしの掃除でも消えません。印が断るのは新しく置くことだけで、すでに置かれているものは消しません。手順3で同じ画像を探すのは、そのためです。同じ画像でも、1バイトでも違えば名前(SHA-256)が変わるので、別のものとして置けてしまいます。
部屋の中身
部屋に置かれたチャットの発言などを、運営する人が個別に消す手段は、いまはありません。最後の1人が抜けてからROOM_RETENTION_HOURSが過ぎると、部屋ごと消えます。
情報流通プラットフォーム対処法
2025年4月に、プロバイダ責任制限法が改められ、情報流通プラットフォーム対処法になりました。削除の申し出への対応期間(原則7日)や、削除の基準の公表などの義務がかかるのは、総務大臣が指定した大規模な事業者(平均の月間の発信者数が1000万人以上など)です(→ 総務省の指定の発表)。Axeのサーバーがこの規模になることは考えにくいですが、損害賠償の責任の制限や発信者情報の開示の決まりは、規模にかかわらずかかります。申し立ての窓口は用意しておいてください。
プライバシーポリシーに書くこと
次のことを書いておくと、利用する人が判断できます。下書きはプライバシーポリシーのひな形にあります。
- 預かるもの(上の表)と、使う目的(ログインして部屋に入る、役割を守る、卓を残す、画像と音声を配る)
- 運営する人が、置かれた画像と音声を見るのは、申し立てや不正な使われかたに応えるときだけであることと、見たことを記録に残すこと
- ログインに使う外部のサービス(Discord)と、そこから受け取るもの(ID、表示名、アバター)
- 預かったものが消えるとき(上の表)
- アカウントの消しかた
- 預け先(Cloudflare版はCloudflare。Vercel版はVercelと、Redisの提供元(Upstashなど)。卓の状態、画像と音声、部屋の記録、ログがそこに置かれる)
- Axeの画面が外のサービスにつながるところ(YouTubeの埋め込み、Discordのアバターの読み込み、URLで足した画像の読み込み、キャラクターシートの保管サイトからの取り込み)
- 問い合わせと申し立ての窓口
利用規約に書くこと
下書きは利用規約のひな形にあります。
- 置いてよいもの・いけないもの(他人の権利を侵すもの、法令に反するもの)
- 卓の保持期間と、それを過ぎると消えること。画像と音声は部屋と一緒に消えること(バックアップはしない)
- 申し立てを受けたときに、予告なく消すことがあること
- 運営の都合で止めることがあること