俺の屍を越えてゆけというゲームをご存知ですか…ひらたくいうと人間と神様で人間ダビスタを行って一族を強くしていってラスボスを倒すゲームです。
15年前に俺屍の1が出て、15年後に1のリメイク(R)、そして最近2が出ました。
1のころからファンだったので、リメイクが出たころに家系図ジェネレータのVer.1を作成。俺屍のプランナーである桝田さんにTwitterで紹介されたのをきっかけに、多くのユーザの方々にご利用いただけるようになりました。
俺屍2の発売にあたり、家系図ジェネレータをバージョンアップした裏話的なものをここに残しておきたいと思います。
なんで作ったのか?
そもそも、なんで家系図ジェネレータを作ったのかというと、自分がメモ魔だったので、どーしても俺屍で作成される家系図のデータをメモとして残しておきたかったのです。問題は家系図のツリーをどう表現するかだったので、いいライブラリがないか探していました。ちょうどGoogle Chart ToolsからツリーのAPIが出ていたので、それを使えばなんとかなると思って開発をはじめました。
自分が使いたかったものなので、他の俺屍ユーザの方々も使いたいかな?と思って、いろいろな人が使えるようなSNS形式を目標に開発を進めましたが、Ver.1はリメイク版が出てから開発を開始したため、ゲームやりたい!でも開発終わらないとゲームできない(データ入力できないから)というジレンマで、管理画面など全くナシ、ユーザ側の機能のみ最速で実装しました。
このため、アップロードディレクトリなどは、こんなにユーザが増えた今となっては恐ろしいような作りになっていました。
サーバ移転
Ver.1はさくらインターネットのレンタルサーバでした。共用だし、ちょっとしたものを作って置いておくのはよかったのですが、VPS全盛の今、ちょっとレンタルサーバだとめんどくさいなーと思っていたので、データをごっそりVPSに移動(このブログの置いてあるサーバに移動)しました。
Ver.1を作ったときは、自分が使いたい一心での開発だったため、実はアップロードした画像はアップロードディレクトリに全部突っ込まれていました。ディレクトリの中にはファイルファイルファイル…で、サーバ移転の直前くらいには、lsコマンドの結果が返ってこないくらいファイルがたくさんありました。
およそ3G…
こりゃイカン、lsできないってどうよ、と思い、Ver.2ではちゃんとディレクトリを切るように設計しました。見切り発車って怖いなあ。
Ver.1からVer.2へのデータコンバート
Macのアップデートを行ったらVirtual Boxが起動しなくなってしまったので、ローカルにPHPの開発環境を整えました。ある程度Ver.1からソースコードを引き継ぎつつ、Ver.2用にきれいに書き直し、ルーティングなども見直しました(なので、URLがきれいになったかと思います)
旧データを持ちつつ新データと融合しなくてはならないので、一旦アップロードディレクトリに保存された3Gのデータをtarでダウンロードし、データベースと照合して正しいディレクトリに振り分ける…というバッチを書きました。
俺屍2はシステムの体験版が出たので、それを参考に新しいシステムを想像で補い、Ver.2に実装していきました。もし想像と違ってたら発売後に直してからリリースしようと思っていました。(結果的に、新しいシステムを家系図ジェネレータで実現するときの方法に大きな間違いがなかったので、発売日にリリースすることができました)
ドメイン
このサイト、アドセンスなど貼っていますが全く儲けが出ない、本当にサービスでやってるようなサイトです。VPSとか私の人件費とかwかかってるんですが、更にドメインも借りました。oreshika.net
昔から.netのドメインはカッコイイよなーと思っていたので、格安で借りられてラッキー。ムームードメインは使いやすいなあ
データ移行
移行用メモを作ってデータ移行しました。
(1) 旧サイトのデータをダンプする
(2) 新サイトにデータベースを作成
(3) 新サイトにデータを読み込む
ここ、ちょっと失敗…ダンプしたときに文字コードの設定をきちんとしなかったので、〜が文字化けしちゃいました。後からユーザさんに指摘されて発覚。でも稼働後はどうしようもないっていう。
(4) 新サイトのテーブル名を修正
(5) 新サイトのデータを旧データにする
これは、バージョンなどで分けなければいけない項目があったので、これまでのデータを自動的に旧データ(Ver.1)の扱いにするというかんじですね。
(6) 新しいテーブルを作成する
結構新しいテーブルを作成しました。
(7) 神様データをインポートする
ここでまた失敗。孔雀院明美さんをなぜか女神に入れてしまってました。彼の(彼女の?)強い意思が働いたのかも
(8) 画像移動タスクの実行
バッチファイルを実行しました。symfonyタスクです。便利〜
新サイト運用
ようやく新サイト運用開始。しかし、VPSは出始めのHDD20Gのプランで契約していて、俺屍以外にもたくさんのサイトを運用していたので、今後の画像アップロードで容量が逼迫するなあと戦慄。
そこで、新しく100GのVPSを借りて、重そうなサイトから順次お引っ越し、20Gはそのうち解約することに。新サイト運用してしばらく経った頃、また!!!100GのVPSにお引っ越し・・・
再度引越し
今度は、新しいサーバへデータのみ移せばいい状態。まずはデータベースの移動かな。MySQLはMyISAMでデータベースを動かしていれば、実データファイルをそのままコピーすれば新しいサーバでも動くとのことだったので、実データファイル群を確認。しかし、*.MYDファイルがデータの実体、*.MYIファイルがインデックス、*.frmファイルがテーブル定義とのことだったけど、テーブルによってはインデックスしかないやつとかあるんですけど…。でもMySQL上ではちゃんとデータも入ってるんですけど…??
ということで、実データをそのままコピーするのはやめてやっぱりダンプしてデータ移動することにしました。
その後、20Gサーバにあった俺屍の全てのデータをscpコマンドでコピー。これこそrsync使えばよかったんだろうけど、一度だけだし、なんかもういいや!そのままコピーじゃ〜と思ってコピーしたところ、ユーザがアップロードしたデータ群は一晩たってもコピー終わらず。まじかい!
次の日の昼くらいかな?12時間以上かかってようやくすべて終わり、やっと再開。
そういうわけで、今動いている俺屍サイトは2度の引越に耐えたのです。オツカレサマ…
教訓
- たくさんファイルがアップされると予想されるなら、ひとつのディレクトリにつっこんじゃダメ!
当たり前だけど…ls返ってこないから…ね… - MySQLからダンプしてインポートするときは、文字コードをきちんとしないと化ける
- サーバ容量は余裕を持っておこうマジで