Create a new world

きっと誰もが新しい世界を作り続けているんだよ。

CyberAgent VS gloops な勉強会に行ってみた。

9/20に行われたレバレジーズさん主催の勉強会 
【Java・C#エンジニア必見!】CA×gloopsコアエンジニアによる合同技術勉強会! Javaによるゲーム開発パッケージ化への取り組みとノウハウ /月間150億PVを捌く想像を超えた安定性と適応力を持つC#の魅力 : ATND
に行ってきましたので、久々に勉強会レポートなるものを書いてみようと思います。
なぜ書くかというと、近いうちにがっつりレポートを書かなければいけないので、その練習という感じだったりします。
あと、サイバーエージェントさん・gloopsさんの仕事に興味を持っていたので、一度聞いておこうと思って行ってみました。

サイバーエージェントさん講演

Javaを用いてソーシャルゲームの開発をしている。これまでに15本ほどゲームを展開した。いまも新規で数本開発している。
そのソーシャルゲームも最近ではリッチなUIが求められたり、標準機能が増加している。また、コンプガチャが規制されたように、今後特定の機能が規制されることもあり得る。
そうした対応を個々に行うことが大変になってきたため、ソーシャルゲーム開発の基盤をパッケージすることになった。
講演者の山田元基さん [twitter: @ygenki] は、そのパッケージの開発を行っている。

パッケージ化したのはガチャやショップ・トレードといった、どのゲームにも共通して必要となる機能である。たとえばガチャのライブラリ化を行うことで簡単にガチャを導入できるようになった・規制にも対応しやすくなった・新しいガチャの種類を他のゲームに展開できるようになった。
また、各ゲームでの独自機能開発も行っている。その独自機能開発を行う際はパッケージの開発メンバが入って、ライブラリ化を前提に行うようになった。その結果として、独自開発したものを横展開できるようになった。

パッケージ化をすることで、開発スピードや品質の向上。ゲーム間の機能連携などを行えるようになった。特に開発スピードに関しては、開発前の仕様を決める部分などがごっそり無くなった。また、開発したゲームがヒットすると、開発者はそのゲームの運用にずっとかかわらなければいけなくなり、人が移動しにくくなるという弊害があるが、パッケージ化を行うことで、人が移動しやすくなり、新しいゲームを生み出しやすくなる土壌が出来た。

gloopsさん講演

gloopsはIIS, SQLServer, ASP.NET C#ソーシャルゲームの開発を行っている。主なタイトルは「大召還!マジゲート」など。
講演者の河合宜文さん [twitter: @neuecc] はLINQjsなどのライブラリの開発を個人で行ってもいる。

講演の内容はC#の進化の歴史である。2002年にC#が登場した後、2005年にジェネリクス、2008年にLINQラムダ式といった関数型言語的な機能が追加される。2010年にDynamicが加わり一部動的言語のように扱えるようになった。そして2012年はASyncと呼ばれる非同期処理向けの言語機能が加わった。
C#は日々進化している。その進化の過程で加わった言語機能に、強力な補完機能、コンパイルエラーをリアルタイム検出、リファクタリング支援などを備えたIDE Visual Studioを合わせることで、スピードの速さが求められるソーシャルゲームの開発をC#で行えている。
例えばLINQを使うことで、どんなコレクションでも同じ構文で統一的に扱える。その機能のおかげで、memcachedを使ったキャッシュデータをそのままアプリ側のメモリ上で高速にJoinすることができている。実際のところ、SQLよりも強力であり、生産性が高い。
Dynamicがあることで、Javascriptを通して取得したデータを動的に扱えるようになっているし、ASyncがあることで、node.jsのようなコールバック地獄に陥ることなく、非同期処理が書けている。
開発コストについてはLinuxを使う場合よりも若干高くつく。しかしAWSなどでもWindows Serverのインスタンスを提供しているので、今後開発コストの差はどんどん縮まっていくだろう。
スタートアップがC#で開発するような場合、BizSparkというMicrosoftが提供する支援制度があるため、費用面も安く済む。
ソース管理はSubversionを使っている。今後はGitを検討中。どちらもIDEと連携するプラグインで優秀なものがある。
一方、ユニットテストなどはあまり書けておらず、今後の課題となっている。

サイバーエージェントからgloopsへの質問

C#以外の言語の採用・検討はあるのか。
現状は無い。他社でF#をバックグラウンドに採用している事例はあるが、ソーシャルゲームの場合、C#のほうが有利であると考えている。

C#を選んだ理由。
前身の会社がSNSC#で作っており、その流れからC#を採用することとなった。

バージョンアップはどうしてる?
新しいバージョンを試して、問題なく移行できそうであればバージョンを上げている。
バージョンアップ自体はリスクが高いものの、言語そのものをMicrosoftがしっかり管理しているため、あまりリスク無くバージョンアップをすることができている。

gloopsからサイバーエージェントへの質問

他のJVM言語は使わないのか。
ソーシャルゲームJavaでやることにしている。
他にはScalaのノウハウを貯めるために管理ツールの開発に使っている。

フレームワークはどうしているか。gloopsはASP.NET Web Formsでやっているが。
サイバーエージェントではStrutsやSpring, Seaserなどいろいろ使っている。フレームワークの選定は責任者が行っている。

感想

どちらの講演も「なるほど」という感じで聞いていました。
サイバーエージェントさんについては、「共通機能をライブラリ化することで、ゲームのコア部分にリソースを集中させられるな」と普通に思いました。いい戦略だなぁと思いますし、そうした共通機能のライブラリを作れてしまうのもすごいなぁと思いました。
gloopsさんについては、「こんなにもC#の機能は進化していたのか」と思いました。普段VB.NETぐぬぬと思いながら開発をしている身としては、なかなか魅力的ではあります。
ただ、ASP.NET Web Formsではテストしずらいのは身を以て知っているので、そこがなんとかなると、もっと魅力が増すなぁと思いました。