見出し画像

JBSL-Webでリーグを開催しよう!

 この記事は Beat Saber Advent Calendar 2022 の 11 日目の記事なります。

第4回JBSLが終わりました

 先日、Japan Beat Saber League、略して JBSL の第 4 回大会、JBSL4 が無事に終了しました。

 結果はこんな感じ。最上位区分である J1 では Marsh_era さんが見事優勝しました。おめでとうございます!

 さて、JBSL では、本戦トーナメントに進出する選手を決めるために予選を行いました。

 上が実際の予選の様子。課題譜面を決めて、その中で順位を競って、上位を決めています。

 これは JBSL-Web というWeb サービス上で動いています。

 本日のメインテーマは、日本の Beat Saber プレイヤーなら誰もが、上のページのような形式で自主大会を開くことができますよ! という内容になります。

 なお、この記事は、ある程度 BeatSaber の文化に慣れている方を想定読者として書かれています。BeatSaber がどんなゲームかの説明まですると、ただでさえ長いこの記事が 1 万文字ぐらいになってしまうので、説明を省略します。

リーグって何ができるの?

 JBSL-Web 上で開く自主大会は「リーグ」と呼ばれます。イベント名自体が JBSL だったり、そもそも League が含まれているのでちょっとややこしいですが、そこら辺の細かい経緯は後半で改めて説明します。

 とりあえず、JBSL はイベント名で、JBSL-Web はWebサービスの名前です。

 さて、リーグシステムのおおまかな概要(課題譜面を決めて、その中で順位を争う)はすでに述べましたが、より詳しい内容を説明します。

 リーグが開催されると、参加条件を満たしているプレイヤーはそれに自由に「参加」をすることができます。

「参加」状態になったプレイヤーは、スコアが定期的に自動取得されるようになり、スコアに更新があった場合はリーグのリーダーボード(順位表)にそれが載ります。

 計上されたスコアから参加者の(譜面内)順位が決まり、それをもとに各譜面の「順位点」が割り振られます。

 なぜわざわざ順位点を計算し直すかというと、単純な合計では 1 %の重みが違いすぎるため、その格差をなくすためです。精度譜面の 1 % 差と、物量譜面の 1 %差では、必要とされる技術や重みが全く違います!

 さて、これら課題譜面の順位点の合計がその人のリーグ全体での順位点……ではなく、課題譜面すべての中の上位数譜面の合計がその人のリーグ全体での成績になります。これを「有効譜面」と言いますが、これはすべての譜面を詰めるのではなく、自分の得意な譜面だけを(有効譜面数を満たす範囲で)最低限詰めればいいという考えによるものです。

 順位的と有効譜面を組み合わせた「有効順位点」方式により、どのような課題譜面を選んだとしてもある程度の競争の公正さが保たれます。このあたりは、過去の大会の運営の反省から得られた知見ですね。

登録してみよう(手順)

 プレイヤーの登録には以下のものが必要になります。

  • Discord アカウント

  • 日本の ScoreSaber アカウント

 右上の「ログイン(Discord)認証」ボタンを押して認証を進めてください。(仮登録)

  • Discord 初回認証時、最初の 1 回は「Connection Refused Error」というエラーが出るようです。(原因不明です。すいません)

  • その場合、ブラウザの「戻る」ボタンを使って戻った後、もう一度トライすると通ります。

  • その後、ScoreSaber の ID を入力して本登録を済ませると、プレイヤーとしての登録が完了します。

ユーザーページの様子

プレイリストを作ってみよう

 まず、課題譜面を決めます。これはプレイリストの形で管理しますが、JBSL-Web には、プレイリストを管理する仕組みがあります。

ここで作成して
ここで追加をしていく

 譜面と難易度を選択してどんどん追加していきます。わざわざゲームを起動してゲーム内で操作しなくていいので便利です。プレイリストは、ダウンロードリンクを押せばいつでも最新のものがダウンロードされます。

 また、リーグのために作らなくても、一種のプレイリスト共有ライブラリとして使っても大丈夫です。

リーグを開催しよう

 プレイリストが完成したら、それをもとにリーグを開催することができます。リーグを開催する時には以下の事柄を決めます。

  • 採用プレイリスト

  • リーグ名

  • 終了日時

  • 公開リーグかそうでないか

  • 有効譜面数

  • 有効 pp の上限

  • etc

 リーグを作成すると、「Live Leagues(公開中のリーグ)」に追加され、条件を満たすプレイヤーは自由に参加できるようになります。終了日時まで集計が続き、終了日時が終わった時点で順位が確定します。

こんな感じ

 https://jbsl-web.herokuapp.com/info/6  も併せてご覧ください。

みんな使おう

 とりあえず、本記事で伝えたい内容は以上の通りになります。

 みんな JBSL-Web に登録してリーグを開催しよう! どんなリーグを開催しても自由だよ!

 え、何?

 結局これって大会の一部なの? 勝手に使っていいの? どんな大会を企画すればいいの?

 そんな声が聞こえてきたので、そのあたりの理念を伝えるために、もう少し細かい話をします。

JBSL-Web が生まれた経緯

 JBSL は元々、私とかなへびさんという方が共同で主催していました。大会を初めて企画したのは 2020 年の 11 月になります。まる二年前ですね。その頃はかなへび杯という名前でした……時間の流れは早い。

 それが好評だったので(だったはず)、半年後に、規模を拡大してやろうということで、日本人プレイヤー全員を対象にした大会にしました。すでに BSL(Beat Saber League)という海外の大会があったので、それの日本バージョンということで JBSL。プレイヤーのレベルを J1、J2、J3 のレベルに分ける仕組みはこの時から採用しました。なぜそのような仕組みにしたかは後述します。

 かなへび杯と第一回 JBSL では、予選は Discord サーバー内で臨時のリーダーボードを作って、逐一集計プログラムを回すという形式を取っていました。集計自体は Python のスクリプトで自動化していましたが、集計を走らせること自体は手動で(!)やっていたので、今考えるとけっこう原始的ですね。

 当然、今後も大会を続けていくにあたって、毎回こんな調子ではやっていけるはずがないので、対策を考えます。それが、Web サービス化を立ち上げて参加・集計も全自動化することです。

 これは一年前、第二回の JBSL を作る前に書いた設計図です。今はいろいろあってこれの十倍ぐらい複雑なモデルになってますが、根本的な仕組みは変わっていません。

 この時点で、Web サービス化する試みは概ねうまくいって、予選システムをいい感じに大規模化&自動化することができました。ただ、ここでも大変だったことはあって、認証(今から考えると、とても認証とはいえない代物でしたが)システムを手動でやっていたために、100 人近くの参加者に DM でパスワードを送るハメになりました。二度とやらねえ。

 当然、今後も大会を続けていくにあたって毎回こんな調子ではやっていけるはずないので(半年ぶり二回目)、予選を効率的に行ったり、認証を自動的に行う仕組みを考えました。この過程で、フレームワークとかデータベースとかクラウドサービスとかセキュリティとか認証とか認可とか他サービスとのAPI連携とかの諸々が""理解""ってきたのですが、そういった技術的な話をすると、ただでさえ長いこの記事が 5 万文字とかになってしまうので割愛します。

 つまり、これらの改良の結果が今のJBSL-Web になります。

自由に使えるプラットフォームに

 この時点で、有効順位点方式の予選(的なもの)を「リーグ」として手軽に立てられるシステムが完成しました。

 こうなると、10 回リーグを開くのも 100 回開くのも大した手間ではなくなります。

 ならば、大会の予選のためだけではなく、誰もが自由にリーグを開催できた方が良いのではないか。ということで、管理者だけがリーグを開催できる専用システムではなく、誰もが大会を企画できるプラットフォームにしました。

 今回や前回から参加した人は、JBSL-Web というプラットフォームがあって、JBSL というイベントが予選のためにそれを使っている、という認識になると思いますが(表面的にはその通りです)、本当は経緯が逆で、大会のために作られたシステムが、色々な改良を重ねていく多機能化したものが JBSL-Web になります。名前がややこしい根本的な要因はここにあります。

 冒頭で述べた、JBSL ってイベント名なの? Web サービス名なの? という問いに対しては、改めて言うとJBSL(Japan Beat Saber League)がイベント名で、JBSL-Web が Web サービス名です。後者に今さら「ビーセイなんとかシステム」とか「hibit システム」とかつけるのもなんか違うと思うので、名前を変えるつもりはないです。ややこしいですが、歴史的な経緯によりそのような固有名詞となったということでご了承ください。

 大事な点なので、改めて強調しておきますが、JBSL(イベント)に関係なく、JBSL-Web ではどんなリーグを開いても大丈夫です

適正な規模の競争環境

 さて、BeatSaber には明確なスコアがあります。ならば当然、それで競うという発想が出てきます。しかし、同時に、プレイヤーには実力の差があります。そして、BeatSaber を競技としてみた場合、不確定要素がほとんどないため、実力の差がかなり明確に現れます。このゲームが一人用のそれであり、チーム間の連携や、対戦相手とのインタラクションといった要素がないことから、これは必然的なものです。

 例えば、サッカーの試合であれば、素人のチームがプロチームを倒すことは確率的に十分ありえます。一方で、陸上競技、例えば 100 m走において、素人がウサイン・ボルト選手に勝つ確率はほぼ 0 %と言っていいでしょう。BeatSaber、というか音ゲー全般は明らかに後者に近い側にいます。

 これは競技の性格の違いであり、どちらが良いとか悪いとかはないのですが、そういった競技の場合、真剣勝負できるのはどうしても一握りのトップ層で固定化されます。

 BeatSaber の実力の指標は 2022 年 12 月現在 ScoreSaber の GlobalRanking が最も参加人数が多く信頼性が高いものになりますが、このトップページに入っているのは日本人でわずか 2 名(2022 年 12 月現在)。海外の大会で戦えるのは、現実的に考えてこのレベルからです。とはいっても、これははっきり言って大半のプレイヤーにとっては雲の上で、ここを目指すには尋常じゃない才能か努力を要求されます。既存の音ゲーで全国 2 位以上を目指せますか、という話。

 BeatSaber の大会はオンラインが基本になるため、既存の大会は最初から海外つまり世界大会です。国内大会はおろか、県大会や地方大会はありません。一方で、ほとんどのプレイヤーは地方大会レベルでないと適正な戦いをできません。だから、実質的な地方大会にあたるものを仕組みとして作り出す必要があります。

 私が JBSL を企画した際、恣意的な区分になりかねないにも関わらず、J2、J3 という区分を設けたのはそのためです。

 多くのプレイヤーが(競技面での)モチベーションを保つためには、適正な規模の競争環境を維持することが大事です。悪く言えばお山の大将ですが、誰もが自分が全力で戦える山を見つけられる裾野の広さがあってこそ、懐の広い競技環境といえるのではないでしょうか。

色々な大会があっていい

 ここで JBSL-Web の話に戻ります。

 JBSL-Web 上をプラットフォームにしたのは、誰もが自分なりのレベルで戦える機会をなるべく多く提供するためです。リーグは、参加できる有効 pp の上限(≒実力の上限)を設定できるので、雲の上の人達に(表現はあれですが)蹂躙されず適切なレベルで戦うことができます。他にも、譜面をおすすめしたりとか、自分の譜面をやってもらったりとか、ネタ譜面大会を開いたりとか色々あると思いますけど、一番の根本はそこになります。

 JBSL(イベントの方)も、究極的にはその一種に過ぎないと考えています。スタッフが忙しくて中止するかもしれないし。JBSL の他にも色々な自主企画の大会があっていい訳です。大会を企画するためにあたって大変な要素は色々ありますが、少なくとも集計という面ではほとんど手間なくできるようになっているはずです。

 私がわざわざ Web サービスを構築し、サーバー代を払い続けて、誰もがアクセスできるようにしているのは、イベントの予選を円滑に進めるためだけではなく(もちろんそれも重要です)、それがプレイヤーにとってよりよい環境を作れるかもしれないからです。

 イベントの予選が開催されてない時でも、常時ひとつやふたつはリーグが開催されていたり、別のイベントの予選に使われていたりする、という状況が理想かなあ。

サポーター

 最後に少しだけ、一応触れずにはいられない話。Web サービスを公開・維持すると、当然ながらサーバー代がかかります。

 あまり生々しい話をするのもあれですが、月 16 $かかっています(2022 年 12 月現在)。

 さすがにこれを赤字で維持し続けるのは財布も心もつらいので、サービスの長期維持の観点からも、JBSL-Web の存続を願う方であったり、当サービスに †価値† を見出していただける方は、有料のサポーター登録をお願いしています。

 なお、非常にありがたいことに、現在はサーバー代をペイできる程度のご支援をいただいておりますが、現在サポート中の方が途切れてしまったり、そもそも Web サーバーの値上げが入る可能性とかは十分考えられますので。

 サポーター特典としては、現状、JBSL-Web 上で名前の色を変えられるのがメインなのでマジでお布施代わりですが、個別に相談事項があれば極力承ります。

プレイヤー名に色がつきます。嬉しすぎる(?)

 サポーターになっていただける方は、こちらからよろしくお願いします!  一ヶ月 190 円のプランからお気軽にどうぞ!


この記事が気に入ったらサポートをしてみませんか?