みんな大好き?予約システム
実際の評判はめっちゃ悪いし、俺もクソだなとは思う
万博のチケット予約サイトはNext.jsで作られている
ただし、HTMLだけ読んでもbodyタグ内に何も埋め込まれていないことやAWSのS3+CloudFrontから配信されていることを踏まえると完全なるSPAとして構築されているように見える
余談だが、万博の公式サイト自体はNuxt+WordPressの構成っぽい
ということは、バックエンド側のAPIをクライアント側がコールしているということになる
実際にサイトを確認すると、ticket.expo2025.or.jp/api以下を何度も叩いていることが分かる

APIのエンドポイントの位置をユーザー側が把握できるので、理論上正しいセッションを渡すことができればブラウザを開かずともパビリオンを確保することは可能?
なおBANされる模様
賢い大人は分かっててもやらないよね
API側の負荷軽減やデータベースのトランザクション確保のため、チケット予約サイトにはqueue-itによる仮想待合室が利用されている
最初の頃は1段階だけだったが、これでは予約部分の過多がちゃんと守られないことが発覚したため(要出典)、「サイトのログイン時」と「予約検索用のAPIを呼び出すとき」の2段階で待合を作っているっぽい
いくらなんでもゴリ押しすぎでは・・・?UX死んでますよ
9/16追記: 待合室は「サイト予約時」「予約検索API呼び出し時」「来場予約時」で確定。それぞれの待機列は同時に並ぶことが可能。
予約待ち中でもタイムアウトするのでこまめなリロード必須。最悪の場合、予約待合室通過したのにログイン待ちに引っかかって時間を無駄にする。
この仮想待合室、どうやらURLだけで判定しているらしく(万博のシステム設計者がそうしたのか、それともqueue-it側の制限なのかは知らない)、実際にはそのURLの中身にアクセスできない状態であったとしてもURLを叩いて待合に並ぶことは可能らしい
詳細は以下参照
CSSとJSはクライアント側の描画の問題でしかないので、当然スキップする便利ツールみたいなのが出回っている
詳細
まぁこうなるよね
パビリオンの✕は強制スキップとか、流石にやってる人とやってない人の差が大き過ぎる・・・
クライアント側の描画のどうこうなんかは対策のしようがない気がするけど・・・もう少しなんとかならないのか
まぁSPAにしてユーザーが大量にAPI叩けるようにしたのはまずそう。自分だったらAPIのエンドポイントは露出させないように色々組むかなぁ。
とはいえ毎時MAX20万のユーザーが常時アクセスして予約を奪い合うサービスなんか人類史上あまり類がないと思うし、大変そうだなぁって。自分はやりたくない。