はじめに
初めてqiitaに投稿するゑふまいかというものです。
私は今、黄昏酒場スコアボードというものを作成しています。
今回は備忘録としてこのスコアボードを作成するにあたって使用した技術や学んだことを書いていきます。
背景、及び動機
黄昏酒場とは東方projectと同じエンジンが使われているゲームである。
昔は待宵という方がroyalflare netというドメインで東方projectシリーズのスコアボード(以降旧ロイヤルフレアと呼ぶ)を管理しており、その中に黄昏酒場のスコアボードもあった。
しかし突如待宵氏は運用を取りやめた。
東方界隈は大混乱に陥った。そこで正規東方シリーズに関しては海外ニキたちが新東方projectスコアボード、silentsalane netを立ち上げた。
だが黄昏酒場に関しては何故かスコアボードが作られなかった。
最近になって黄昏酒場のスコア狙いをする人が自分以外に現れたこと、及び自宅サーバPCを購入したこともあり、黄昏酒場スコアボードを立ち上げることにした。
特に今回の開発において気をつけるポイントとして、『旧ロイヤルフレアをモダンにしたものを作る』というのを意識した。
何故なら今更東方STGを触る人間は保守的な人間であることが予想され、あまりに違うものを作ると近寄らないと考えられるからである。
よって以降でも『旧ロイヤルフレアはどういう実装をしていたか』という点に言及しながら記述していく。
旧ロイヤルフレアの移植と失敗
実は待宵氏は旧ロイヤルフレアのコードを公開しており、サーバに置くだけの構成を作っていた。
いざ載せようとしたところ問題が起きた。
どうやらcgiという技術を使っていたようだ。
cgiとは動的にhtmlを生成する技術である。
旧ロイヤルフレアでは、①ユーザはalcostg.cgiに向かってHTTPリクエストを行い、②cgiサーバがPythonで書かれたalcostg.cgiを動かし、③alcostg.cgiはHTTPリクエストの種類によってランキング画面などのHTMLページを生成、という手順を踏んでいたようだ。
下記にざっくりとしたイメージを示す1
しかし自分の環境ではうまくcgiが動作しなかった。
cgiを勉強しろという話なのだが、正直この技術は枯れていて今更勉強しても役に立たないことが知られている。
(そもそも旧ロイヤルフレアは2006年頃に作成されたものなので当然古い)
そこで旧ロイヤルフレアをなぞりながらモダンにスコアボードを作成することにした
要件の整理
ざっくり旧ロイヤルフレアのユースケースについてまとめると以下のようになる
- ユーザはユーザ名、削除パスワード、リプレイファイルをサーバに投げる
- サーバはリプレイファイルを解析しスコアなどのメタデータを得る
- 削除したいときはリプレイidに紐付く削除パスワードを入力して削除する
- リプレイファイルのメタデータを元に記述された新着順一覧とスコア順一覧が見られる
- 新着順一覧やスコア順一覧のダウンロードボタンを押すとリプレイファイルがダウンロードされる
ここでリプレイファイルとは黄昏酒場が出力する、自機の動作やプレイ結果などが入ったバイナリファイルのことである。
最初は旧ロイヤルフレアに倣ってJavaScriptを使わずにHTMLのみで作成しようとしていたが、削除確認の具合が悪いということで以下のような3層構造にすることにした
また、本来ユーザ認証機能などを付けて、ユーザに紐付く削除パスワードを入力させるべきである。
しかし今回は旧ロイヤルフレアに倣い、リプレイidに紐付く削除パスワードで削除することにしている。
これはユーザ認証まで作ると開発規模が膨大になるという点、及びユーザ認証はなりすまし防止に効果があるがスコアボードは一人一つしか上げないことが予想できるためなりすましの識別が容易という点からである。
次回
いよいよバックエンドから開発を行っていく。
-
上述した通り詳しくは勉強できていないので図が間違っている可能性がある。また投稿したい人は投稿.html、削除したい人はスコア順一覧.htmlか新着順一覧.htmlを介してからalcoscore.cgiに向かってリクエストを投げるが、ここでは省略している。 ↩