mixiアプリ第3弾「コレオススメ!」リリースするまで

やっとリリースできました。

今回はmixiアプリ第3弾ですが、なかなか難産でした。

本当は先にRPGリリースする予定でしたが、急遽それを変更しました。先に規模の小さいこちらをリリースするべきだなと。まず先に検証しておきたいことがあったのです。

長文です。

mixi touch(スマホ版 & ipod touch)の作成

今回はPC版とスマホ版同時リリース(実際は時差はありましたが)を目標に作られていました。RPGスマホ版をメインで作られていたので先に検証するべきだなと。

スマホといっても大きく分けてAndroidiOSがあります。これらは同じwebkitベースとは思えないほど動作が違います。iOSはDOM操作のあとにリフレッシュされないこともあったりバグくさい動作もありますが、レンダリング結果の反映がJSの動作をブロックしてくれるおかげでアニメーションが綺麗に回ります。

実は一番厄介なのが同じAndroid同士の動作の不安定さでした。OSのバージョンによって違うのはもちろんのこと、機種によっても違うようです。初代Xperiaはかなり手を入れているようで、スクロールバーの出方がおかしいとかCanvasレンダリングが崩れるとかあります。GalaxyS2ではCanvas使うとフリーズするのがどうしても回避できません。

サーバーでのデータの保持

ColorBlockとPONPONではデータの保持はありますが、これはmixiのサーバーにあるキーバリューストアを利用しています。

ただし、スマートフォン版では利用できないので(個人では利用できないガラケー版に対応する必要があります)自分で保持する必要があります。

当初はAmazonWebServicesのSimpleDBを利用しようと思いましたが、データが仮に膨れ上がった場合、属性の制限に引っかかる可能性があり、メンテナンスが厄介なので単独では却下でした。おそらく利用する場合はS3との併用が必須でしょう。そしてその併用する場合はデータ本体はS3に保持するためデータの読み書きが面倒になります。

というわけでサーバーにEC2を利用してPostgreSQLを利用することにしました。

PostgreSQLを利用する決心がついたのはVPCが東京リージョンでも開始されたことでした。この機能は非常に大きいです。プライベートな固定IPをふることができる重要さは実際にEC2を利用したことがある人ならわかるはずです。

VPCというとVPNでつなぐことが出来るというイメージが強いかもしれませんが、IPを自由にふれることと、グループ単位でファイアウォール立てれることだけ知っていてもいいかもしれません。

今回もGWT

mixiアプリ第1弾ColorBlock、第2弾PONPONに引き続き今回もGWT利用しています。前2作と違うのはSwingベースでプロトタイプを作っていないことです。今回は完全にイベントベースなのでそのままGWTで開発をしました。

ただし、GWTの通信は利用しません。普通にサーバーと通信します。

開発にはNetBeansを利用しています。GWT4NBプラグインの最新版ではNetBeans7.0.1で動かない、GWT SDK2.3以上で動かないといったクリティカルな問題が解決されています。

アプリの方向とUIと機能のシンプル化

このアプリはオススメアイテムを友達に紹介するというアプリです。

なぜオススメという名前がついているかというと、こう説明することによりネガティブ化がある程度避けられるのではないか、ということです。結局は評価システム、データベースななわけですから、よい方向にも悪い方向にも行くことは目に見えています。Amazonの評価とか見ていれば明らかでしょう。

そこでオススメという名前を使いました。そして当初あった星5段階も辞めることになります。これはオススメという名前がついていても星3つついていた場合、評価が悪いように見えてしまうのを防ぐためです。おすすめといいつつ星1つだったらどうでしょうか。そこで星を3段階にしてみましたが、結局1つと2つはネガティブに見えやすかったです。そこで思い切って星を廃止しました。さらに星の代わりとして1つのアイテムに自分が何度もお勧めできるようにしました。そのかわり説明文に利用できる文字数を大幅に減らして、何度も1つのアイテムに書き込んだものほどよく見えるようにしたわけです。

オススメアイテムはカテゴリとヨミガナでグループ化されますが、これらには数字が表示されます。1つのアイテムに何度もオススメしすればその分数字は増えますので、数字が多いところは友達に手にとってもらいやすいということです。

何度も1つのアイテムに投票できる代わりに1日に投票できる数を制限しました。ログインするたびに投票可能数は2つずつストックされていきます。

こうしてUIもシステムもシンプルになりわかりやすくなりました。細かい検索条件等もはずしました。せいぜい新着として友達の情報をTOP20表示するようにしただけです。

グループ化される単位としてヨミガナと書きましたが、表示される単位もヨミガナで1つの塊として表示されます。これはたとえばヨミを「エムエスエックス」とした倍、「MSX」でも「MSX」でも「エムエスエックス」でも引っかかるようにしたかったためです。完全に自動の名寄せは現実的に無理なのでユーザーのほうで寄せてもらいました。カテゴリでも分けられるため、同じ名前でぶつかるといったことも少ないと思います。

運用環境

今回もAWSを利用しています。いままではS3とCloudFrontのみを利用していました。S3は東京リージョンが来る前でしたので、US東海岸でしたが、今回は手間がかからないように東京リージョンです。

そしてEC2もスモールインスタンスで用意しました。DBはPostgreSQLです。サーバーサイドはJavaなのも確定で、JPA使うのも確定、WebインターフェースとしてはJAX-RSを利用するということで面倒なのでGlassfish 3.1.1を利用しました。オールインワンです。面倒なセットアップはありません。運用も楽チンです。GlassFishを利用しているということでEJB3.1liteも利用しています。

JAX-RS + JPA + EJB 3.1 とまさにJavaEE6です。お仕事用の知識がそのままつかえるわけですね。大事。
JavaEE上での開発といえば、NetBeansの独壇場です。さくさく作れます。


アプリの仕組み的には単純なので、もっとシンプルにJAX-RSをmainから起動で十分いいと思います。おそらくその場合はEJBのかわりにGuiceを利用するでしょう。JAX-RSのRIであるJerseyは好きなDIコンテナを利用できるため問題はありません。

少なくともTomcatだけは選択肢としてありえませんでした。メリットがないですから。

サーバーサイド、クライアントサイドともにJava言語を利用することにより高速に開発できたと思います。

EC2以外にもS3+CloudFrontを利用しています。静的ファイルは全部そっちに持っていってEC2に負担がかからないようにしています。

絵師召還

今回はかわいらしいイラストを「無料ゲーム製作雑誌 がまぐ!」の表紙で有名な名無子氏に書いていただきました。すべてケモノなのは氏の趣向によるものです。ドット絵はかけてもイラストはかけませんので、助かります。絵がないと無機質な感じになりやすいですからね、特にこういうツール系は。

次回作のRPGでは氏にモンスターを書いていただいております。かなりいい感じなのでもうすこしお待ちください。次はスマホに特化したデザインになっています。PC版もだす予定ですが、同時期ではないかもしれません。

サポートページ作成

mixiアプリではアプリのサポート専用にサポートコミュニティというものが用意可能です。そして最近mixiページを利用したサポートページも作成可能になりました。ただし、現時点ではやれないこともあって完全以降は無理だと思いました。mixiページの利点はトップページだけならmixiの会員になっていなくても見れるというところです。

会員になってない人でも以下のリンク先を見てください。詳細は会員にならないと読むことはできませんが、なんとなくどういった雰囲気があるか位はわかると思います。
http://page.mixi.jp/view_page.pl?page_id=139997


きたるべき対話に備えて

以上をみてみると、出来上がったものだけを見るとたいしたことないですが、ネガティブな方向に向かないように最大限の注意とか機能をがっつり削っていったりとか結構試行錯誤しました。そしてやったことのなかったスマホ版や鯖の調達などにも挑戦しました。

おそらく第4弾の開発が順調なのもこの第3弾の試行錯誤があってのことでしょう。アプリを量産するめどが立ちました。

現在mixiアプリはユーザー数的に、導線的にスマホ版を提供するメリットがさほどありません。それでもスマホ版をやるのは今後を見据えての勉強などの意味合いがものすごく強いです。現時点ではダメダメでも、来年、再来年にはどうなっているでしょうか。すでにすべてのキャリアのフラグシップスマホになっており、この秋冬モデルではお年より向け以外はほぼスマホになるというところまできました。2年縛りがあることを考えて2年後にはそれなりに増えているはずです。そのときに準備をしていては遅いのです。

PC版がJavaアプレット/Webstart使っていいのならすげーらくなんですけどね(禁止とはかかれてないはずだけど、まぁ無理でしょう)。開発スピードはあ投擲に速くなりますし、はるかに高度に綺麗なことが出来ますし。IE6とかで動作確認しているのできついんですね。IE6はサポートが消える2014年にきれいになくなるとは思えませんが、コレくらいをめどにIE9以上を考える予定です。IE10はVistaで動かないということでIE9もIE6ほどではないけどしばらく残るでしょうね。

Androidネイティブ版を作るというのもありです。が、iOSでは動きませんので、そちらも別途作るとなるとMacが必要ですし、大変です。Webブラウザ用アプリはやれることがあまりにも少ない&バグで動かないことだらけで悩まされますけど、どちらでも動くのは魅力です。指でのスライド操作がWeb版が絶望的なのに対してフルスクリーン使えるネイティブ版は問題なく使えるのも魅力です。Webではどうしても指をスライドさせて画面をスクロールさせなくてはいけませんから制限がつきまくります。

また、このソフトはじめてのゲーム以外のアプリ、ソーシャルアプリとなっています。ユーザー数だけを考えればゲーム系と占い系以外を作る意味はないのですが、これも将来アプリが流行ってきたときに備える意味合いも強いです。


というわけでmixiアプリ第4弾のRPG発表も期待して持っていてください。おっとその前にコレオススメ!もよろしくです。