やっとマモノバスターが公開されました。
マモノバスターの開発にまつわるお話をお聞かせしましょう。長文です。
開発の始まり
このプロダクト、もともとはmixiアプリ第2弾のPONPONが開発完了した後から取り掛かっています。
PONPON
つまり2月ぐらいから。それが11月末になってやっと出来上がったわけです。
間にはmixiアプリ第3弾のコレオススメ!を挟んでいますが、それは予定にありませんでした。
本来マモノバスターが第3弾になるはずだったのです。
震災・・・そして方向を見失う
開発中の3月に震災が起こりました。この後急激にやる気を喪失していましたが、開発はだらだら続けていました。
進みは遅いものの、モックはそれなりに完成していました。フォントを1から作成しておりかなり気合が入っていたのがわかります。
開発中のRPG
が、もともと完成していた内容をイメージし切れておらず、昔のRPGのようなもの、という漠然とした内容、なにがうりになるのかそういうものがすっぽりと抜け落ちていました。RPGを作る、以外は何も考えられていなかったのです。
そのくせスマホに初対応するということで、機種ごとのレンダリングや動作の差異に悩まされました。PCだけだったらすぐに完成していたのですが、それをPCとスマホに対応させてそれぞれ同じような動作となるとかなり難易度が高かったです。
スマホとPCと両対応するということはサーバーを自分で持つことも必要になります。サーバー側の実装コストも膨らむでしょう。
クラス数は膨大になり、何も考えずつくっていったのでどこを削るか、といったことも判断できず、まとめきれなくなっていきました。一番売り出したいものがしっかりあれば、それ以外を削るといったことも出来たでしょうが、そうではありませんでした。
これはいったん止めないと収拾がつかなくなる、と思いました。
開発をいったん停止、第3弾を差し替え
そこでいったんRPGの開発をストップさせることにしました。
一人で開発している場合、問題はないのですが、モンスターデザインはイラストレーターの名無子氏にお願いしている以上、一時停止でも勇気のいることでした。
そこでまず名無子氏のデザインをアピールできるシンプルなアプリを用意しようということにしました。それがコレオススメ!です。
コレオススメ!
このアプリはRPGで技術的にも一気に飛ぶのではなく、クッションをはさむという目的でもありました。
それはPONPONまでやっていなかったこと、つまりスマホとサーバーの処理の実装です。
クライアントサイドはGWTで問題がなく、ストレージもmixiのサーバーを利用することで自分のサーバーの負担をほぼなしで運用することが出来ますが、スマホを扱うとそういったことは不可能になります。
ここで利用した技術/製品は以下の通りです。
- GWT 2.4
- EJB 3.1 lite
- JAX-RS 1.1
- JPA 2.0
- JerseyClient
- Glassfish 3.1
- PostgreSQL 9
- AWS EC2
- AWS CloudFront
GWTもPONPONまではガジェットプラグインというGWTのプラグインを利用していましたが、これをやめました。不具合も多くGWTの細かいバージョンアップについていけなくなっていたためです。これも結構厄介でした。
EJB3.1やJPA、JAX-RSは問題ありませんでした。これらの製品が開発効率でもすぐれているのはわかっていたからです。OAuthはやっつけでサーブレットフィルターで実装しています。本当はJAX-RSつかっているならこれはだめな設計です。
JerseyClientはHTTPのクライアントです。非常にシンプルでこれ以外はもうありえないというレベル。Oauthプラグインを入れることによってmixi鯖への問い合わせも簡単に出来るようになります。
CloudFrontはPONPONで利用しており、ColorBlockも後に利用するように修正したので問題はありませんでした。
などなど、内容は比重にシンプルなアプリではありますが、技術一つ一つをクリアしていきました。
そして9月に公開されます。本当は8月の予定でしたが、体調不良の時期があり、その分伸びてしまいました。
RPG開発再開
そして次こそRPG!ということで開発をはじめます。
まず従来のソースや画像等をすべてないものとしてゼロから開発しました。
システムもすべて一新。スマホに特化したシステムにし、PC版はそのべた移植とすることに決めました。
やりたいことがしっかりと決まっていたので開発は楽でした。なにせ前回の開発時にほとんどの技術はすでにクリアされており、実装のみに集中できたからです。
その結果、マモノバスターは一ヶ月ちょっとでスマホの開発がほぼ終わります。震災がありながらも4ヶ月がたっても実装できていない前回とはあきらかにスピードが違いました。
その後バランス調整やアニメーション等の調整が続きました。3週間くらいでしょうか。結果、すべてこみこみで2ヶ月で開発が完了しました。PCへの移植は3日だけでした。
タイトルをマモノバスターに決めました。
これは前から決めていたのですが、id:Florian氏のRPGでケモノ学園というものがあります。これはグラフィックは同じ名無子氏が担当しており、それに対抗すべくこちらもRPGを持ち出したという経緯があります。なのでタイトルもそれっぽくということでケモノ=>マモノときまりました。
マモノという単語だけではどうしようもないので、適当につなげてそれっぽいものということでマモノバスターになりました。マモノとつく作品は割と多く、まものクエストというMSXでは有名なRPGがあったのでクエストはだめだな・・・とかまものスレイヤーはたしかあったな・・・とか考えてマモノバスターはたぶん大丈夫だな、という安易な考え方でした。ドラゴンバスターの影響を受けてるのは間違いないかもです。
ほかにも影響を受けている作品は多く、それはダンジョン名や武器名にでています。失われた宮殿はハイドライド3のですし、どくろのつえやこれから出るであろうドリームスタッフはハイドライド2の影響です。
技術的には今回はEJB3.1を利用するのをやめてCDIを利用しました。通常CDIと併用することが多いと思いますが、CDI+UserTransactionで実装しました。OAuthのフィルターはJAX-RSのFilter(正確にはJerseyか)を利用しました。
また、CanvasのAndroidの不具合のため、すべてHTML4ベースに修正しました。結果、IE6でも多少の手直しだけで動いたので結果オーライですが、座標系はそれなりに崩れます。
そして公開されました。ゲームとして面白いように調整した結果、サーバーの負荷は大幅に増えていますが、まぁ仕方がないでしょう。
そしてスマホ版は先月末、PC版は1日に公開されました。
すべてはGWT
いまのところすべてのmixiアプリはGWTを利用しています。今後も利用する予定で、ロジックをきっちり作る場合に威力を発揮します。
GWTというのはJavaのソースコードからJavaScriptを生成する仕組みです。出来上がるのはJavascriptなため、ApacheやAWSのS3など静的ファイルをおくことさえ出来ればどこでも利用できます。このJavaScriptや画像などをAWSの高速なCloudFrontで配信しています。S3と比べても高速なのでぜひ利用したほうがいいです。
「動的なページ」ではなく「Webアプリ」を作るうえでは最高の環境だと思います。ブラウザごとの差異や最適化を自動でしてくれるのも特徴です。ファイルそのものが分割されており、自分のブラウザにあったものが自動でロードされます。また、遅延ロード等もコードで簡単に作ることも出来ます。Java言語を使いこなせる人はぜひとも習得しておきたい技術です。
なんせ、ColorBlockやPONPONはJavaアプリ版(Swing)で作ったのをそのままもってきています。特にPONPONはSwing版と1文字もゲーム部分はコードが変わっていません。Javaでプロトタイプからコンバート後の製品出力まで出来るのは強みですね。
一方、コレオススメ!やマモノバスターではそういったことをしていません。ゲームにmixiのAPIに絡む部分が入りやすいってのもありますが、スマホ版をメインとしており、パフォーマンスや出来ないことも多いので単純に移植が出来ないため試行錯誤が多かったという理由もあります。
次回作がPC専用アプリの場合Swingで動くスタンドアロンなJavaアプリで作成しつつ、コンバートという方向になると思います。サーバーサイドはJAX-RSですので通信含めてJavaのみで開発を完了させておくといったこともありかもしれません。また、スマホもある程度はわかってきたのでそれを考慮してのコンバートも出来るかもしれません。
開発時間としては目安としてColorBlockが20時間、PONPONが40時間、コレオススメ!が40時間。
マモノバスターは60時間といったところです。未完成だったRPGは80時間は越えていたと思います。趣味プログラムとしては規模は80時間くらいが限界かなという感じです。