SHOEISHA iD

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

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

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

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

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

 本稿では、「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。

次のページ
ゲーム開発にかかわるすべての人に快適な環境を提供するために

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング