「このキャラ@QMA5」技術的な話

その0

実は技術的総括、というよりも運営してみての率直な感想として書きたかったことのほとんどは一般的総括を書いたあとに「そんなWeb屋はさておいて」(リンクは過去ログ、重いので注意)にぶちまけてしまったでござる
というわけでその当時思ってたことについてはそちらを参照してください。今回はほんとに「技術的な話」だけ書きます。別の形で思想的な話が出てきそうな気もしますが今はこのへんで。そっちの話は今書いてもいいことは全くないので。

ソース公開

http://q.s01.info/q5chara.zip
こちらに投稿用フォーム、DB登録、「この武器」の日付分け表示のソースが入っています。92要素をハードコーディングしているためだいぶ大変。コード生成するのにRubyでバッチ走らせたりしたけどそれはもう消したかコマンドライン直打ちしたかなので省略。
当然のごとくフリーです。ということは、当然のごとく無保証。別のところに使うなら、正直このレベルのコードならもっといいサンプルコード探してください。相当ハードコーディングなので。
あと、これを6でそのまま使うなんてのはもってのほかです。今年の初めに自分が流した以上の血を流すことになります。もっと調整したバージョンをリリースしたいなぁ。それよりももっと作りたいものがあるので「このキャラ」の季節が近づいたら考えることにします。頼むからちゃんとその季節が来てほしいものです(続編的な意味で)。
ユーザーアンフレンドリーなリリースです。「readme.txtがねぇぞふざけんな」とか言われても困ります。「汚ねぇコード晒すな」とか「実装がしょぼい」とかそういう技術的な指摘は大歓迎です。それ以外は無視でいいかなもう。構ってらんない。むしろもっといいもん作れるなら作ってください。

どんなことやってるの

本体は入力を受け取って確認ページに投げて(これを途中で挟むことになったけれど見ればわかる通りコードの繰り返し量が膨大)アクションへ投げる。アクション部ではデータベースに書き込みを行う。
# DB関連の情報もハードコーディングしてたのでそれの除去が面倒で遅くなったというのも一因
ちなみに「MVPのコメントが切れてしまった!」というのは厳密にはPHPのコーディングエラーではなく、データベースの設計の際にVARCHARの長さを間違ってカードネームと同じく32にしていたから。92個もCN打たせる欄があるなら黙ってバッチ組みましょう(確かここはコピペでやって失敗したはず)。Rails先生は黙ってstringってすると255にしてくれることを考えると近代的にはbooleanでもない限りは長さは255決め打ちでいい気がしてきた。
そしてこのソース全体で一番うまくしてやったと思うのが「この武器」。とはいえ、もっと上手い方法があるっていえばそうなんですが。Excelでデータを一通り調整したあと(重複&表記揺れのマージ/削除)、Excelの表をコピペするとタブ区切りになります。確か賢竜の抽選のときはそれをRubyのバッチに投げて重みをかけてランダムソートしてなんてことをやってたんですが、今回はそれをthiswp以下もう1個filesっていうディレクトリの下に置きます。実はここに直接アクセスすれば見れた(笑)。ちゃんとパーミッションは設定しましょう。そうすれば、後はある時刻になると勝手に切り替えてくれます。このロジックを組むことで4日は楽できました。や、実装方式を考えあぐねていたら実装が前日になってしまったわけですが。

作業フロー

まずはphpMyAdmin先生でIPの順にソート。重複しているもので明らかに多重投稿なものを削除(具体的に気になったのは2件:コメントが似通っていました)。そしてマスターページ(今回は同梱していません:こちらで全投票を集計します)からExcelに一旦コピペ、Excelでソートして重複を取り除く。地域はこのときに必要な範囲で調べる。地域は明らかに違うのを除き調べた日付依存*1なのでだいぶツッコミが入りました。このときに自分の5倍以上のプレイ回数を誇った大宮のあの方に手伝ってもらってます。無理いってスマンカッタ。ここでデータが出そろったら出先で文章を執筆。あとはHTMLに流し込む。ここで期間中に購入した中古のThinkPadに大活躍してもらってます。…今やサーバーと化しているのは秘密。この時期は演奏会もあり試験もあり外出が長かったのでe-mobileb-mobileがあればもっといい時間に更新できたと思います。ないものねだりしても仕方がない。


ここで問題になるのがExcelでやってる作業がもう少し自動化できるってことですね。半角・全角の統一をプログラムに行わせればだいぶ加速できます。現にそれによるランキング修正がけっこう骨でした。それでもどうしようもないのが「カタカナのヴェルサスがいる!」*2とか「めるランOとメルランOとめるらんO、果てにはメルらん0がいるんですけど!」*3っていうのはどうしようもない。今作だったらデフォネームじゃないのに地域書いてもらわないといけないクララがいますけどどうしましょう。


あとコメントをHTMLに流し込むときにバッチ処理できないと相当骨ですね。">"を行頭につけたうえで返すスクリプトを書いて処理しました。こーいうときにirb先生が便利すぎるので部分Rubyなんてことやるんです。全部Rubyで書けばいいのにね…っていってもRuby+MySQLの連携が実はネック。組み込みで用意されてないんです。


技術的な話はこのへんまでかな。

追記

今作の「このキャラ」について。
現状では自分がやることによってクオリティが全く保証できないので、今作はやりません。改良したソースだけ置いて逃げます。
今の時点でまだ大賢者3段な時点で察してください。上位プレイヤーのCN変更事情もそんなに追えてないのに地域の変更が追えるわけがありません。
一方で技術面のバックアップはできる限りしようと思います。プレイ人口、その企画への期待値、そして企画自体もふくれあがった現在、それを支えるバックグラウンドは初代のものとは大きく変化しています。ノーヒントでは手に負えない規模になってしまっているのは間違いないことでしょう。こんな状況で何もしなかったら誰も手は挙げません。
「このキャラ」に限らずですが、自分が楽しいと思うものをより楽しくするために有志として手を挙げることが困難な状況ならば先は真っ暗です。有志スタッフやる人が少しでも多く出てくるように自分もいろんな手をつくして支援しています(大会後に集計用紙のサンプル配ってるのもそのためです)。


というわけで、やりたいという方はぜひsylph01までご連絡ください。こちらでプログラムのバックアップはいたします。

*1:自分の記憶の補正で間違ってたのも数件ありましたが…

*2:5ではアルファベットです

*3:めるぽさんごめんなさい