SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2013】セッションレポート(AD)

【デブサミ2013】15-C-2 レポート
「グリーにおけるスマホアプリ開発~HTML5編」

  • このエントリーをはてなブックマークに追加

ゲームの演出作成に必要な機能満載のアニメーションエンジンLWFを活用

 続けて反田氏は、LWF(Lightweight SWF)を使った開発事例を紹介した。

 LWFはGREE内製アニメーションエンジンで、SWFをHTML5のCSS/Canvasアニメーションに変換し、再生するものだ。OSSで公開されているので、誰でも利用できる。

 ゲームの演出作成に必要な機能がそろっていることが大きな特徴で、まず、演出に必要なパラメーターを渡すインターフェースが充実している。カード画像など、ユーザーの状態に合わせた画像の置き換えが可能で、端末解像度に応じた画像の切り替えもサポートしている。

 中でも反田氏が注目を促すのが、CSSやCanvasなど描画方法を選択できる点だ。というのも、端末によって最適な描画方法というのは異なるためだ。CSSとCanvas、それぞれ速い端末がある。選択できるのがLWFの強みとなっている。

 LWFは、画像を外部リソースとして読み込む。そのため、キャッシュを有効に使うことができ、転送量/待ち時間を減らすことができる。これは、高解像度の画像を大量に使用する場合に、特に重要だ。また、LWFはテクスチャシートというものに対応している。これはCSSスプライトのように、演出内で使う画像を1つにパックし、まとめて読み込めるようにするものだ。1つにまとめることで、より効率的に読み込むことができる。

図:LWFを使った開発事例 全体の流れ
図:LWFを使った開発事例 全体の流れ

新プロダクトでの組み込み例

 演出ごとに、LWFの初期化やエラー処理を書いていくのは、バックエンドエンジニアにとって負担が大きい。そこで、そういった処理を共通化した。HTML内のdata属性に、LWFのパラメーターを全部展開してしまうことで、自動的に再生できるようにした。

 LWFの制作は一見、敷居が高いように感じるのだが、LWFSというLWFへの変換/再生を行うアプリを使うと、複雑なセットアップをせずに、LWFが制作できるようになる。エンジニアが開発環境をセットアップする必要はなく、LWFSをインストールするだけですぐに使える。LWFSにより演出の確認、改善というイテレーションを回しやすくなる。

図:LWFSを導入した制作フロー
図:LWFSを導入した制作フロー

 反田氏たちがLWF利用において注意した点だが、まず画像の読み込みに1つでも失敗すると、LWFは再生されない。そこで適切にエラー処理をして、エラーページなどに遷移させる必要がある。また、演出パラメーターは、オブジェクトとして渡されるので、サーバ側で演出パラメーターを出力する際に、余分なパラメーターを含めないようにする。そうすることで、ゲーム内部でのみ使用するパラメータの流出を防ぐ。

 見落としがちなポイントとして、LWFSで再生確認に使用するLWFと、サーバ側に組み込まれているLWFとでバージョンが一致していることを確認することだ。LWFのバージョンアップにより、動作が異なることがある。加えて制作時には、ページ遷移などの処理をLWF内に直接埋め込まず、単独で動くようにすることが重要だ。このようにすることで、制作時のブラッシュアップを効率的に行えるようにする。

開発効率化とエラー検知、キャッシュ有効利用への取り組み

 LWF利用以外の取り組みだが、まずバックエンドに関しては、ユニットテストをきちんと書くようにした。バックエンドの処理を、User、Point、Item…などの単位でパッケージ化した。Jenkinsでユニットテストを定期的に実行することで、機能追加などによるデグレードを防止している。

JavaScript/CSSのビルド環境としては、GruntJSを導入し、開発用、リリース用などのビルド作業を定型化している。

 また、Androidのデバッグを簡単にするため、console.logの出力内容をログサーバに送信する BirdWatcherというものを組み込んだ。

 JavaScriptのエラーは、サーバ側では検知できない。そこで適切なエラーハンドリングをすると共に、原因個所の情報をサーバに通知するようにした。

 アプリ内キャッシュに関しては、キャッシュ容量の上限を設け、使わないものからLRUで削除する。事前にロードすることで、読み込み時間を短縮させるなど最適化が可能だ。

 最後に反田氏はまとめとして、「各チームがイテレーションを回せるように、依存をなくす」「早い段階で調整し、仕様の不整合を防ぐ」「LWFとLWFS活用の有効性」「エラー検知、キャッシュの重要性」「JenkinsやGruntJSなどで開発を効率化」を強調し、セッションを閉じた。

お問い合わせ

グリー株式会社

東京都港区六本木6-10-1 六本木ヒルズ森タワー

E-mail: jp-pr@gree.net

URL: http://corp.gree.net/jp/ja/

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
【デブサミ2013】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7038 2013/03/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング