Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

【デブサミ2012】17-A-5 レポート
ngServerとngGoBuilder、その開発を支えるサンフランシスコとの連携体制

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/03/15 17:00

 本稿では、「Developers Summit 2012」(デブサミ2012)において、2月17日に行われた株式会社ディー・エヌ・エー CTO室 篠崎祐輔氏、能登信晴氏によるセッション「ngCore Server, ngGoBuilder とサンフランシスコ-東京共同開発の実際」の内容を紹介する。  DeNAでは、グループ企業の米国ngmoco社との連携のもと、スマートフォン向けクロスプラットフォームゲームエンジン「ngCore」(ngCore Client)を開発・提供するとともに、周辺ソフトウェアの開発も進めている。1つは、Node.jsをベースとしてJavaScriptでのゲームサーバ開発をサポートする「ngServer」。そしてもう一つは、ngCoreを利用したゲーム開発環境/ライブラリの「ngGoBuilder」だ。

目次
株式会社ディー・エヌ・エー CTO室 / 日本Node.jsユーザ会 篠崎祐輔氏
株式会社ディー・エヌ・エー CTO室 / 日本Node.jsユーザ会 篠崎祐輔氏
株式会社ディー・エヌ・エー CTO室 能登信晴氏
株式会社ディー・エヌ・エー CTO室 能登信晴氏

サーバサイドからクライアント、ツールまで、Node.jsを利用

 DeNAでは、スマートフォン向けのソーシャルゲーム開発プラットフォームとして、クライアントアプリ開発用のゲームエンジン「ngCore」(ngCore Client)、開発ツールの「ngBuilder」(ngGoBuilder)を提供しており、ソーシャルゲームのサーバサイド実装をサポートする「ngServer」を現在開発中だ。

 ngCoreでは開発時におけるデバイスへの配信サーバとしてNode.jsが使われており、ngBuilderでもNode.jsを利用。そして、ngServerはNode.jsをベースとしたサーバサイドフレームワークだ。Node.jsを採用している理由として、篠崎氏はまず「より多くの接続数に対処できること」を挙げた。

 「特にスマートフォン向けのソーシャルゲームでは、リアルタイムの要求が増加し、いわゆるC10K問題が現実味を帯びてきている。そのため、大量の同時接続を処理するうえで十分なパフォーマンスを発揮できることが重要なポイント」

 ほかにも、Node.jsはメモリ使用効率に優れており、「スレッドを使ったサーバプログラムと比較すると、かなり有効にメモリ資源を使えている」という。

 すでにNode.jsのサーバを使ってサービスを展開しているMobageのソーシャルゲームとして、篠崎氏は「SKYFALL」と「VIP LIFE」の2つを紹介。これらはDeNAのグループ会社である米国ngmoco社のタイトルで、米国のAndroidマーケットなどでベータ公開されている。

 これらのゲームの開発では、Node.jsのバージョンアップが早すぎる、モジュールのアップデートについていけないといったように、Node.jsを採用したことに起因する問題にも直面した。中でも一番苦労したのが、CPUスパイクの問題だという。

 「一定の負荷がかかった状態で運用していると、いつの間にかCPUスパイクが発生するようになってしまった。なかなかその原因が特定できなかったが、最終的にはNode.js自体の問題であることが分かった」(篠崎氏)

 その根本的な原因は、Node.jsが採用するJavaScriptエンジン「V8」のGC(ガベージコレクション)で、大きなヒープメモリが確保されたときに同様の問題が起きていたそうだ。Node.jsはV8のアップデートを取り込んでいくため、もし新バージョンのV8に未知のウイークポイントがあれば、そのままNode.jsにも取り込まれてしまう。プロダクションのサーバでは、Node.jsのリリースバージョンを使うのか、あるいはカスタマイズのバージョンで運用するのかなど、検討したうえで自社の方針を決断する必要があるだろう。

 こうした経験をもとに開発されたサーバサイドフレームワークが、ngServerだ。篠崎氏は、「奇をてらわないスタンダードな構成」としながら、図1のアーキテクチャを紹介。デバイス(スマートフォン)からJSONが送られると、ngServerのコントローラはJSONを返す。デバイス側はそれをもとに、デバイス上でレンダリングを行う。従来の携帯電話(フィーチャーフォン)のソーシャルゲームのように、サーバからデバイスにswfファイルやレンダリングされたHTMLファイル、イメージなどが送信されることはなく、やりとりされるのはJSONのみとすることでNode.jsの強みを最大限に活かす仕組みだ。

 なお、ngCoreはもともと米国サンフランシスコに拠点を置くngmoco社の技術であり、ngServerのプロジェクトも基本的に東京-サンフランシスコ間での共同開発で進められている。篠崎氏は最後に、この開発体制についても紹介。距離や時差など共同開発における課題は多いが、篠崎氏が最も留意しているのは、アメリカ人と日本人との「気質の違い」だという。

 例えばレビューなどで、日本人は「問題がある」「バグ」「ひどい」「動かない」など、否定的な表現から入る場合が多いが、アメリカ人は「すばらしい」「すごい」「これいいね」といった言葉の後に、「ところで提案だけど……」と意見を述べる。

 「こちらもポジティブな言葉や、いわゆる褒め言葉を使ったほうが、明らかに意思疎通もうまくいく。それが信頼関係にもプラスに作用することを、身をもって学んだ」(篠崎氏)

図1:スマートフォン向けソーシャルゲームのサーバサイド実装アーキテクチャ。図中央部分(Express、Controller、Model)がngServer。
図1:スマートフォン向けソーシャルゲームのサーバサイド実装アーキテクチャ。図中央部分(Express、Controller、Model)がngServer。

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

著者プロフィール

バックナンバー

連載:【デブサミ2012】セッションレポート

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5