9月20日、東京・渋谷のレバレジーズ本社にて、サイバーエージェントとグループスのエンジニアがソーシャルゲーム開発の現場ノウハウを語るイベント「CA×gloops コアエンジニアによるソーシャルゲーム開発勉強会」が開催されました。
今もっとも注目を集めているソーシャルゲーム業界。かつてないような規模で制作、運営され、開発スピードの要求も高いハードな現場でどのような開発ノウハウが培われているのか、開発者なら誰しも興味を抱くところでしょう。今回主催の2社はそれぞれ開発言語が違い、その言語の特長を活かした対照的なアプローチで最新の開発事情について語りました。
ライブラリ化でゲーム開発ノウハウの共有を─開発パッケージ化から始まる「スマートなゲーム開発」
最初のセッションはサイバーエージェントの山田 元基氏による「Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ」と題した講演です。山田氏は同社でソーシャルゲームの基盤開発を行う「コアシスグループ」という部署を立ち上げ、そこでソーシャルゲームのさまざまな機能をパッケージ化する取り組みを行っています。このパッケージ化の実際と効果について、さまざまな角度から紹介されました。
まずパッケージ開発に至った経緯についてのお話です。ソーシャルゲームは現在スマートフォンベースに移行し、従来よりリッチなUIや標準で高度な機能が搭載されるようになりました。またソーシャルゲーム規制が始まり、より迅速な対応も求められています。もちろん新規開発の開発期間の短縮や、ネットゲームなのでリリース後の運用をどうするか、も開発者と無縁ではありません。
これらを解決するため、まずはゲームライブラリを開発し、ゲームAPIを通して利用できるようにした上で、共有できる機能のパッケージ化を進めることになりました。着手してからまだ半年程度とのことですが、すでに10本以上のゲームプロジェクトで並行してライブラリ化が進んでいるそうです。
ライブラリ化されているのはおなじみの「ガチャ」やショップ、ランキング、トレード、掲示板、友達招待、いいね、など、現在のソーシャルゲームでは標準装備されているものが中心です。このほかバックで動く画像サーバや共通ログ、そしてFlash→JavaScript変換といったものもあります。
ライブラリ化が進んでいるのは、主な開発言語であるJavaとライブラリの相性が非常に良いことが挙げられます。これによってゲームの品質向上にもつながっているとのことです。
実際の開発は、山田氏率いるコアシス部門のメンバーが個々のゲームプロジェクトに入り、一緒になって開発していく形で進められています。こうしていくことで、ライブラリ化が開発情報ノウハウの共有につながっているといいます。
現在も試行錯誤中とのことですが、今後はさらにパッケージ化のフェーズに進むことによって開発がスマートになり、開発人員の削減にもつなげていきたいと講演を結びました。
講演後のQ&Aタイムでは、ライブラリ化の効果についての質問が多く出されました。ライブラリ化した機能に細かいカスタマイズの要求がある場合はどうするのか?との問いには、現状世に出ている機能については設定の変更で対応できるよう設計したそうです。開発期間については、ライブラリ化以前の企画情報の共有ができたことが大きく、企画時点の仕様決め、準備期間が大幅に短縮されたとのこと。
ライブラリの使い方の説明にはWikiが使われ、機能は非エンジニアにもわかるように公開されているとのこと。ライブラリ導入に際してはコアシス部門のメンバーが一緒に開発しながら他の開発者に説明していったそうです。
Java開発でのライブラリ化はどの開発現場でも普通に行われていることでは? との指摘もありましたが、その当たり前のことができていなかったと認め、それを正しつつあると説明がありました。またライブラリをOSSとして公開する予定については、公開する気持ちもあるが、移り変わりが速いものなのでそもそも需要があるのかを検討したいと答えました。
Visual Studioは「ロケットブースター」─言語、フレームワーク、IDEの三位一体で進化するC#
次のセッションは「The Evolution of C#─C#の秘めるポテンシャルとソーシャルゲーム」と題されたグループスの河合 宜文氏による講演です。同社はWindows ServerやSQL Serverなどマイクロソフトの製品によるシステムインフラを構築していることで知られていますが、実際の開発でもVisualStudio上のC#やASP.NETがメインで使用されています。河合氏ご自身もMicrosoft MVP(for Visual C#)です。
まずはC#とは何か、そしてこれまでの進化についてざっと紹介がありました。C#は2002年にTurbo PascalやDelphiなどの生みの親として知られるアンダース・ヘルスバーグがマイクロソフトに移って開発した言語で、現在バージョンは5.0。3.0、4.0のメジャーバージョンアップで劇的な進化を遂げてきたと言います。
Webアプリ、とくにソーシャルゲームなどは前述のように開発スピードが最も重要視されます。この点ではRubyやPerlなど、コードの修正→テスト、実行が比較的容易ないわゆるLL(Lightweight Language)が有利で、コンパイルが必要なC#やJavaなどは不利という評価が一般的です。しかし、C#はその開発プラットフォームであるVisualStudioと合わせて見た場合、C#はLLに負けない軽量さを発揮すると河合氏は言います。「Visual Studioはまさにロケットブースター」(河合氏)。
たとえば動的型付けはLLの大きな特長ですが、静的言語であるC#でも3.0から装備された型推論の機能やIntelliSenseで入力は動的型付け言語並みに手軽に扱え、かつ強力なリファクタリング性能などは静的言語ならではのメリットはそのまま享受できます。
さらに、C# 3.0で装備されたLINQ機能が非常に有効で、これによりSQLと同様な記述でプログラム内(インメモリ)でデータ結合などを行うことができます。このためゲームなどのアプリでも大量データを高速に処理することが可能となります。
またC# 4.0で搭載されたDynamicにより、LLなどと連携するために部分的に動的な型付けができるようになりました。これによりブラウザのJavaScriptを呼び出すことができるなど、さまざまな応用が考えられます。
C# 5.0ではAsyncというスレッドを使った非同期処理の機能が装備されました。これによって、最近Node.jsなどで用いられている非ブロッキング処理のI/O待ちなどを非常に簡潔に記述することができます。
次世代のC#の機能として注目しているのは、C#のパーサをVisual Studioに装備することで、Visual Studioそのものを簡単に拡張することができる機能だそうです。
まとめとして、河合氏は「大事なことなので3度言います」とC#が言語、IDE(Visual Studio)、フレームワーク(.NET Framework)の三位一体で、開発者はより楽ができる方向に進化し続けていることを強調し、講演を結びました。
質問コーナーでは、マイクロソフト製品を使う際のコストやWebアプリ開発での手薄な面などについて質問が集中しました。コストについては、たしかにOSSよりコストがかかりますが、無料版のVisual Studioを利用したり、マイクロソフトの用意する各種支援プログラムを利用することで開発面の出費をかなり抑えることができると説明しました。また運用面も、SQL ServerベースのサービスをAWSをはじめ大手クラウドベンダがほぼ提供し始めているので、今後はコスト差が縮まるのではないかと見ているそうです。
メインターゲットがWebとは思えないマイクロソフト製品によるWebアプリ開発をどう考えるか、という質問には、むしろデスクトップや今後タブレットなどに手厚い製品が出てくることが、UIなどの面でソーシャルゲームアプリ開発についても強みになるのを期待しているそうです。マイクロソフト製品だけでカバーできない部分のOSS開発系との連携も、サードパーティ製品が充実しているので問題ないとコメントしました。
気になる「隣の開発環境」
第3部は両社のパネルディスカッションです。あらかじめ双方で用意した質問にそれぞれが答えるという形で進められました。
まずはCA→グループスの質問です。
- Q1 .NETフレームワークでC#以外の言語の採用検討はあるのか?
- 選択肢としてはVB.NET、F#、IronRubyなどのスクリプト言語がありますが、現在はWebアプリ開発の容易さでC#以外は考えにくいとのこと。調査はつねに怠りなく行っているそうです。
- Q2 なぜC#を選択したのか?
- 同社の前身となる会社でC#を使って開発していたのがそのまま続いているとのこと。
- Q3 C#のバージョンアップのタイミングは?
- まず新しい開発プロジェクトに対して、その時点の新しいバージョンで開発し、問題がなければ以前のシステムにも適用していく方法を採っているそうです。河合氏によると、言語のバージョンアップにはリスクが高いが、C#は比較的前バージョンとの互換性を重要視しており、バージョンアップのリスクは他の言語より低いとのこと。
続いてグループス→ CAの質問から。
Q1 JVM上でJava以外の言語での開発は検討しているのか?
他の部署でScalaを使っているところがありますが、やはりノウハウの多さからソーシャルゲームではJava以外は使わないそうです。ゲーム本体以外の、たとえば管理ツールには他の言語を検討してもいいとのこと。
Q2 Javaの多数のフレームワークの中から何を選んだのか、その理由は?
おもにStruts、Spring、Seaserが多く、ゲームによりフレームワークが違うそうです。ゲームごとに違うと、開発の慣れなどから人の異動が難しくなりそうですが、それを吸収する意味でもライブラリ化がうまく機能しているとのことです。ただ、それでもある程度の学習が必要となるため、DIをSpring3系、MVCをStruts2系に統一できないか検討しているとのこと。
Q3 エンジニアの採用はJava経験者が多いのか?
Java経験も重視するそうですが、幅広く採用しているとのこと。このあたりの教育についても、ライブラリ化によってノウハウを標準化することが一役買っているといえるでしょう。
最後に両社に質問です。「最新の技術をどのように現場にと入りれていくのか? 」
グループスでは社内勉強会を開いて最新技術を紹介する場を設けているとのことです。「そうした活動で地道に全体を底上げするしかない」(河合氏)。
またCAは、もともと新しい技術を取り入れたいという気持ちが強い人が多いので、まずバックグラウンドで導入するなどテスト的に使える方法を見つけ、コストを考慮しつつ試していることが多いそうです。
Webアプリの中でもとくに競争が厳しく流れの速いソーシャルゲームの世界、駆け足な紹介とならざるをえないところもありましたが、そのスピード感を十分感じることができたイベントでした。