ソーシャルゲーム開発におけるC#の強みは圧倒的な速さ…グラニCTO河合氏が語る『神獄のヴァルハラゲート』開発・運営秘話


グラニの『神獄のヴァルハラゲート』がサービス開始から1年半以上経過したが、現在もなおGREEの人気ゲームランキングでたびたび首位を獲得するなど好調だ。さらに、カプコンとの共同タイトル『モンスターハンター ロア オブ カード』も上位に入っている。

今回、グラニの取締役CTOの河合宜文氏(写真右)にインタビューを行い、立て続けにヒットタイトルを生み出しているグラニの技術的な強さに迫った。今回、エンジニア以外の人にもわかるように初歩的なところから話してもらった(写真左は、取締役の福永 尚爾氏)。



■そもそもC#とはなにか
 
———:よろしくお願いいたします。河合さんのプロフィールを教えてください。

前職は大手ソーシャルゲームの会社に在籍し、リアルタイムバトルゲーム2タイトルの開発に携わりました。その後、グラニの立ち上げから参画しました。

———:御社では、C#を使っておられるとのことですが、この言語の特徴を教えてもらえるでしょうか?

マイクロソフトが開発しているプログラム言語です。業務アプリケーションやWindows用のデスクトップアプリケーションで使われる印象があるかもしれませんが、それに限らずウェブアプリケーションや組み込みなど幅広いところで利用されています。最近では、Unityによるゲーム開発でも使われています。特にiPhoneやAndroidなどのスマートフォン向けゲームですね。

———:ソーシャルゲームでC#を使う会社が少ないですが、なぜ御社で導入したのでしょうか?

高い生産性を実現できる言語であることが主な理由です。マイクロソフトが最もプッシュしている言語ということもあり、強力な開発環境(Visual Studio)があり、また、言語としてもラムダ式や非同期構文などの高効率化のために欠かせない流行りの要素を貪欲に取り入れバージョンアップを続けています。私個人としても、Microsoft MVP for Visual C#という肩書を持っており、C#の普及を推進していきたいという思いもあります。BtoC分野でC#を使っている話はあまり聞かないと思いますが、これは逆に言えばチャンスです。つまり、ここで圧倒的な成果を成し遂げれば、我々が第一人者になることができます。

もうひとつは、元々はPHPで開発していたのですが、我々が不慣れということもありますが、開発効率も非常に悪く、また、実行速度が思うように出ませんでした。C#に切り替えたところかなり速くなりました。他のソーシャルゲームを計測しても、『神獄のヴァルハラゲート』の応答速度は業界でも屈指の速さです。その一端をC#が担っているわけです。




■『神獄のヴァルハラゲート』でPHPからC#にリプレース

———:つまり…『神獄のヴァルハラゲート』はもともとPHPで作ったのですか?

はい。当初はいわゆるLAMP環境で作っていました。会社を立ち上げた直後でスタッフが少ないこともあり、ライブラリやインフラ等が揃っていることからPHPを選択しました。開発基盤に関しては、PHPの経験が豊富なスタッフが担当し、ゲーム開発に関しては、私など前職で経験のあるスタッフが担当しました。C#に切り替えたのは、2013年7月ころですね。『ヴァルハラゲート』のリリースが2013年1月なので、半年後ということになります。

———:一度作ったものをリプレースしたのですか?

はい。リリース後、通常の追加開発や運営を行いつつ、平行してC#に移行するための開発も進めていました。相当大変でした。失敗するとお客様が遊べなくなりますし、当社の売り上げもゼロになります。普通の企業だったら、リスクが高すぎてやらないと思います。

リリース後すぐにこの意思決定はされました。開発をしていて、パフォーマンスが思うようにでない、さらに書きにくい、したがって生産性が上がらない…。そのため、リスクを承知でリプレースするしかないと判断しました。実際に作業に入ったのは4月からですが、ゲームの機能追加を止めるわけにはいかないので、エンジニアの人数が少ない中、機能追加する部隊とC#へ移植する部隊に分けて取り組みました。特にソーシャルゲームは、日々新しい機能が追加されていくので、そこに追いつくのが大変でした。最後は本当に気合で作りましたね(笑)


———:それもまたすごい話ですね。当時、テレビCMも放映して、ゲームも盛り上がっている最中ですよね。

はい。当時、テレビCMを放映し、ユーザー様の人数が急激に伸びていました。負荷状況も厳しくなり、サービスの維持が難しい状況のなか運営していましたから、リプレースしないという選択はなかったのです。C#に変えれば、状況は明らかによくなるという強い確信を持っていました。

———:リプレース後は順調だったのですか?

初日は少しトラブルがありましたが、その後はおおむね順調でした。お客様の書き込みをみていると、リプレース以前は「遅い」というお叱りの声が多かったのですが、リプレース後はかなり減りました。リプレースに気付いたお客様は少なかったかもしれませんが、体感で速くなったと感じた方が多かったと思います。実際、応答速度は3〜4倍になり、サーバーの台数が1/3になりました。他社のゲームだと、500ミリ秒や800ミリ秒というタイトルも珍しくありません。『ヴァルハラゲート』は100ミリ秒以下で返しています。客観的にみても『ヴァルハラゲート』の速さは示せていると思います。

———:新宿や池袋など大きな駅で『ヴァルハラゲート』に接続したのですが、他のゲームに比べて確かに速いですね。

技術面でお客様にストレスを与えてしまったらダメですからね。開発者としてはその部分は譲れないところです。「聖戦」(リアルタイムバトル)ですぐに行動できないというのはストレスでしかありません。



■C#の強みは速さ、そして開発しやすさ
 
———:開発での強みはどういった点にありますか?

強力な開発環境と、言語としての質の良さからくる開発の生産性です。C#の選択理由として企画などから上がってきた仕様をできるだけ早く開発し実装することも重視しています。また、とにかく速さです。お客様に伝わるものとしてバックエンドでできることはサービスの速さと安定性です。

———:速さを実現するために気をつけているポイントを教えて下さい。

速度に関しては常時監視しています。表示速度の変化に関してはエンジニアがリアルタイムで見られるようにしています。表示速度に関する情報を常に把握できるようにしないと、速度が意識されることはなく、改善されることもないからです。当社は、数字はいつも見える状態にして、遅くなったらすぐに対応しています。あとは「このくらいの速度が出ないと速いとはいえない」と判断基準を示して、エンジニアに意識してもらうことも重要ですね。
 

———:遅いとなった時、どう対応されるのですか?

まず、そのページで何が速いのか、遅いのかを解析します。それについても、開発環境上でグラフで瞬時に表示されるなど、常に確認できる環境ができあがっています。わかりやすいボトルネックの場合はすぐに取り除くだけで対応できます。気付きにくいものに関しては地道にログを調べて取り組みますが、重要性の高い事項の場合、時間を割いてでもすぐに対応するようにしています。

———:コードを書いていて気をつけていることはどういったことでしょうか。

なるべく非同期でまとめるものはまとめるようにしています。多重アクセスでデータベースなどへの通信を一気にまとめるようにしています。なかなか表現が難しいのですが、例えば、ボールを右から左に3個届けるというタスクがあったとすると、ボールを1個ずつ届けるのではなく、一気に3個渡したほうが速いし効率的ですよね。なるべく並列でリクエストできるものは並列でやるようにしています。多いもので10や20といった並列通信を行っています。

他社ですと、直列で書いているところが多いと聞きます。そもそも言語として直列じゃないと書きにくいからです。並列で書くことの難易度は非常に高く、ゲームの基盤部分だけじゃなく、ソーシャルゲームの全域にわたって、大量のコードを書く場合では手間がかかってやりにくいです。


では、なぜ並列でコードが書けるかというと、最新のバージョンであるC# 5.0で導入された新機能(非同期構文)で、並列のコードが書きやすくなったからです。せっかく並列で書けるわけですから、できるものは片っ端からやります。そこが速さの源泉です。

———:そうなんですか。使い込まれた技術をしっかり使っていく会社が多いなか、御社の姿勢は対照的ですよね。

たしかに、そういう会社は多いですね。当社は、逆に新しい機能や技術があったら積極的に使うことを奨励しています。もちろん新しい技術だからといってむやみに飛びつくわけではありません。長く見て生き残っていく技術かどうかを見極めるようにしています。加えて、BtoCでC#を使っている会社が少ないことを考えると、当社がパイオニアとして取り組む義務があるとも考えています。技術的な面でリードしていくという使命感ですね。地雷には積極的に突っ込んで、そして得た知見を当社内だけでなく業界内でも共有するようにしています。

———:ユーザーや業界の人にはこういうところを注目してほしいところは?

バックエンドの技術という点では、フロントエンドのように機能や見た目でのアピールがしにくいのですが、お客様にはレスポンスの良さですね。業界の方には、C#で作られていることと、やはり応答速度の速さに注目してもらいたいですね。



■ネイティブアプリの開発にも
 

———:ところで、UnityでもC#が使えますが、ネイティブアプリの開発なども行っているのでしょうか?

もちろんです。ネイティブアプリに取り組むにあたって、われわれが強いのはC#ですから、その強みが活かせるゲームエンジンとしてUnity以外の選択肢はありません。またクライアントサイドとサーバーサイド双方ともC#を使えることも当社の強みになります。というのも、同じ言語であることは知識が共有できますし、同じコードを双方でシェアすることができる部分もあり、工数の削減につながります。また、言語が違うと、クライアントとサーバー間でのコミュニケーションでロスが発生しやすいです。我々としては、他社の方にもクライアントサイドをUnityで、C#で作るのだったら、サーバーサイドでもどんどんC#を使えばいいんじゃないかと思います。

———:アプリは実際につくられているのですか?

はい。先日、マイクロソフトさんの主催された「de:code」というエンジニア向けのイベントに、プレイアブルな状態で出展しました。スマートフォンアプリを鋭意開発中ですのでぜひ注目してください。

———:楽しみにしています。ところで、御社に入るエンジニアは同業他社よりも業務用などでC#を使っていた方が多いのですか?

そうですね。他の業界から移ってくる方が多いですね。フィールドは問いません、C#を使えるエンジニアであれば、業種が違っても通用します。エクストリームエッジなC#を書きたいという強い情熱をもっている人は歓迎ですね。当社に入れば最先端の技術に触れることができますので、技術者には魅力ある環境ではないかと思います。

———:グラニでC#を使う魅力は?

C#で、ハイトラフィックなサービスに携わること。また、新しいテクノロジーを積極的に使えます。新しい技術をどんどん投下できる会社はなく、我々がそれができるのは、自分たちで全てコントロールできるからこそです。

———:技術力向上の取り組みとして様々な取り組みがあるかと思いますが、勉強会などをされているのですか?

そうですね、社外のセミナーに参加したり、グラニ社内で勉強会も開催しています。技術は個人に宿るものですので、個人の技術を伸ばす機会を増やしたいと考えています。結果として、得た技術は社内に伝播し、全体の技術力が上がります。また社内に在籍するエンジニア20名のうち4名がMicrosoft MVP受賞者です。これは他社にはない濃度ではないかと思います。技術的に濃い状況を作り出すことで、レベルをさらに引き上げたいと考えています。

———:社外の勉強会に出したくないという会社が多いですよね。

当社は全く逆ですね。外部の勉強会に出ることを奨励しています。エンジニアの引き抜きを恐れるからなのかもしれませんが、会社に魅力があれば、そんなことはありません。外部のセミナーに出て新しい技術や知識を吸収して刺激を受けて成長してもらえれば、結果として会社も成長できます。そうして良い循環が回り、グラニで働けば、常に最先端の技術に触れられるような環境を目指しています。

———:河合さんの目標を教えて下さい。

とにかくC#でトップの会社にすることです。世界でもC#としてバリューを出せる会社にしたいです。また、若い人にC#を使って欲しいので、技術的な模範となる会社、憧れるような会社にしたいですね。そして、大ヒットゲームを作ることです。まずはゲームありきで、それがヒットしていてはじめて、それを支えている言語は?という形で認識してもらえますから。

———:最後にメッセージをお願い致します。

「C#といったらグラニだよね」といわれるようにしたいと思っています。ぜひC#という言葉を忘れないようにしていただければと思います。
株式会社グラニ
http://grani.jp/

会社情報

会社名
株式会社グラニ
設立
2012年9月
代表者
谷 直史
決算期
8月
直近業績
非公開
上場区分
非上場
企業データを見る