GMOインターネットグループの技術情報は新しいサイトに移管しています。 新しいサイトはこちら

社内レポート

2013年7月10日(水)

携帯電話向けランタイムの開発で見えてきた、マルチプラットフォーム開発で成功するためのポイント

携帯電話向けランタイムの開発で見えてきた、マルチプラットフォーム開発で成功するためのポイント

スマートフォン市場で勝ち残るためのアプリ/サービス開発の要点を紹介するGMO最新ネット業界レポート「スマートフォン編」。今回からはGMOゲームセンター株式会社(以下GMOゲームセンター)でプラットフォーム開発部の部長を務める庄司拓郎氏が解説する。

GMOゲームセンターでは、独自のアプリプラットフォーム「Gゲーby GMO(以下Gゲー)」を運営するのと並び、マルチデバイス・マルチOS対応のアプリケーション実行環境「VIVID Runtime」の開発・提供を行っている。そのVIVID Runtimeの開発を初期の段階から牽引してきたのが庄司氏だ。そこで、経験の中で得られた知見から、マルチデバイスおよびマルチプラットフォーム対応のゲームを開発する上で押さえておくべきポイントを解説する。

記事INDEX

様々な携帯電話用ミドルウェアの開発を経験

私がモバイル関係の開発に携わるようになったのは、GMOゲームセンターの木村副社長が当時副社長を務めていたトラバントという会社に合流してからです。そこでは携帯電話向けのアプリケーションの開発や、モバイルアプリのサーバー連携機能の開発、それから端末メーカーと共同で携帯電話用のミドルウェアの開発などを担当しました。

代表的な成果物としては、携帯電話端末への加速度センサーの組み込みがあります。今のスマートフォンでは当たり前に搭載されている加速度センサーですが、当時としては非常に先進的な試みで、日本製の端末としては初めて実現しました。

カメラを利用した顔認識機能の開発にも携わりました。端末を開いたときに顔写真を撮影してそれを認証に利用するというものですが、その頃のハードウェアの性能ではではストレスを与えない反応速度で動作させるために非常にシビアなチューニングが必要でした。その他に、製品化には至りませんでしたが、6軸加速度センサーとGPSを利用したAR(拡張現実)機能の検証なども行っています。

フィーチャーフォン時代から手掛けてきたランタイム開発

その後、株式会社アクロディアがトラバントに合流し、同社が開発していたマルチメディア対応のユーザーインターフェースエンジン「VIVID UI」を用いたアプリケーションの開発や、マルチプラットフォーム対応のアプリケーションランタイム「VIVID Runtime」の開発などを担当しました。VIVID Runtimeは、ひとつのアプリケーションを異なる複数のプラットフォーム上で動作させることができるミドルウェアで、Windows MobileやBREW、Symbianなど、当時の主要なOSをサポートしていました。

ランタイムを開発する上で特に苦労したのは、プラットフォームごとに異なる仕様や動作を、どのようにひとつに取りまとめていくかという点です。搭載されている機能も端末ごとに異なる上、同じ機能でも微妙に挙動が違っていたりするため、共通化は容易ではありませんでした。

また、ランタイムを提供する場合には、アプリケーション用のAPIをどのような形で提供するかという点も問題になります。「VIVID Runtime」では、Khronos Groupが策定した組込機器向けのAPIセットOpenKODEを採用しました。OpenKODEではアプリケーション基盤となるOpenKODE coreに加え、3DグラフィックスAPIとしてOpenGL ESや、音声処理APIとしてOpenSL ESをサポートしています。世界的な標準化団体が規定するAPIが利用できる点が大きな強みになっているのですが、OpenSLなどはマイナーな仕様は実装例が少なく自分たちで一から実装しました。

その後VIVID RuntimeはAndroidにも対応し、GMOゲームセンターの設立以後もマルチOS・マルチデバイス対応の開発ツールおよび実行環境として利用されています。現在は開発ツールのVIVID Runtime SDKがObjective-Cにも対応したため、iOS向けアプリからの移植も可能になりました。直近の事例としては、今年3月からGゲーでiOS向けタイトルの配信を開始したのですが、その移植にはVIVID Runtimeが大いに役立っています。

マルチプラットフォーム開発を行う上で何を意識するべきか

実際にゲームを作る開発者の立場からすれば、VIVID Runtimeのようなマルチプラットフォーム対応のランタイムを適切に利用することによって、プラットフォーム間の差異をある程度は無視できるというメリットがあります。しかしその一方で、共通化が難しい部分は、ターゲットとするプラットフォームごとに個別に作り込んでいかなくてはいけません。したがってマルチプラットフォーム開発では、ツールで吸収できる部分と吸収できない部分をしっかりと切り分け、開発リソースを適切に割り振ることが大切です。

例えば、同じ機能に対するOSごとのAPIの違いや、端末ごとの微妙な実装の違いなどは、ランタイムやフレームワークによって吸収することが可能なため、開発者が意識しなくても良いようになっています。VIVID Runtimeの場合にはOpenKODEで作ってあれば、どのプラットフォームに持って行っても同様の動作になるよう調整されています。

一方でグラフィック処理のようにハードウェアアクセラレーションが必要な部分や、ビデオやオーディオのフォーマットに関する実装、端末ごとの解像度の違いなどについては、アプリ開発者が意識して作り込んでいかなければなりません。例えばオーディオやビデオについては全ての端末がサポートしているフォーマットというものは限られていますし、デコード方式も端末によって実装が異なることがあります。画面のアスペクト比が端末によって異なるのも頭の痛い問題で、これにどう対応していくかという点は今後の大きな課題になるでしょう。

いずれにしても、重要なのは設計の段階から他のプラットフォームへの移植性をきちんと考慮しておくことです。 Gゲーの場合には、ミドルウェアの下にポーティングのためのレイヤーを設け、そこでプラットフォーム間の差異をできる限り吸収することで移植性を高めるようにしています。定石的なやり方でありますが、複数のプラットフォームをターゲットにするのであればこのような処置が必須と言えるでしょう。

マルチプラットフォームに向けたGゲーの試み

使用するランタイムやフレームワーク、開発ツールの選び方も、マルチプラットフォーム開発を効率的に行うためには重要なポイントになります。それぞれに得意とする分野が異なり、メリットだけでなくデメリットがあることも少なくないからです。

Gゲーの場合には、開発者の皆さんの様々なニーズに応えるために、マルチプラットフォーム開発向けに大きく分けて3種類の選択肢を用意しています。

ひとつは前述のVIVID Runtimeです。マルチプラットフォームながらネイティブコードと同等のパフォーマンスを実現できるため、OpenGLなどを駆使してネイティブアプリを開発したいというケースで強みを発揮します。

2つ目がウェブベースのゲームをネイティブゲーム化するためのシンプルなブラウザアプリです。OpenSocial Platformに準拠して作られたウェブアプリを簡単にAndroidやiOSのネイティブアプリに変換することが可能なため、ブラウザ型アプリとして開発されたゲームを再利用してアプリマーケットで公開したいというような用途に向いています。

3つ目がDalvik仮想マシン(Androidに搭載されている仮想マシン)やiOSのネイティブアプリ向けのSDKです。これは既存のアプリに対して、Gゲーのログイン機能や課金システムなどを簡単に追加してアプリ化できる開発ツールです。既にAndroid向けのネイティブアプリを持っている状態で、Gゲーのアプリプラットフォームの機能を活用したいというニーズに向けたものです。

このように用途に応じて様々なツールを選択できるため、異なる端末や異なるプラットフォームに向けたアプリ開発も昔ほど難しいものではなくなりました。そこで次に考えなければならないのは、これらのツールを活用しながら、いかに独自の付加価値を付けられるかということです。

今後のレポートでは、比較的早い時期からモバイル端末向けのミドルウェアやランタイム開発を手掛けてきた経験にもとづいて、マルチ端末やマルチプラットフォーム向けの開発を行う上で押さえておくべきポイントをお伝えしていきたいと考えています。


取材日:2013.06.24