石渡真人(上記写真中央左)
役職:マネジャー
経歴:
美容師→DJ→エンジニアと変わった経歴を持つ。2016年、ゲーム事業立ち上げ当時から在籍のエンジニア。主にフロント開発を行っているが、最近はサーバーサイド、インフラ(Azure)と手を伸ばしている。リリース後は、クライアントサイドの効率化や、新規機能の実装を中心に行う。『オトギフロンティア』のBGMを作ったり、社員の髪を切ったりと、業務は多岐にわたる。『オトギフロンティア』の成功を受け、この記事の公開と共にプロポーズ予定。
田中大翔(上記写真中央)
役職:リードエンジニア
経歴:
秋田大学中退後、ゲームプログラマーのアルバイトとして上京し、ECサイトの制作に携わる。8年間ずっとC#をこよなく愛し、フロント・サーバーをC#で開発している会社を探して求めていた。2017年、KMSと運命の出会いを果たし参画する。
フロント・サーバーサイド・インフラ(Azure)の開発に従事する。リリース後のSQLチューニングや、サーバー/フロントの両開発を行う。趣味サークルでゲーム開発を行っており、コミケにて30本の販売実績を持つ。
Mamlay Andrei(上記写真左)
役職:アーキテクト
経歴:
ロシアのSaint-Petersburg State University Of Information Technologies, Mechanic and Optics卒業後、2013年に来日しB2Cのサービスの開発を立ち上げから運用まで携わる。学生時代からC#には9年触れており、Microsoft社の技術に深い知識を持つ。
2017年KMSに参画し、サーバーサイド/フロントの開発や、Azureを使用したインフラの構築等、幅広く開発に携わる。お寿司、キツネ、猫、音ゲー(『CHUNITHM STAR』)が大好きな、おちゃめなエンジニア。
増渕:日本マイクロソフトの増渕と申します。ゲームサーバーのテクニカル支援を担当しています。本日は宜しくお願いいたします。
石渡:
KMSの石渡と申します。もともと美容師をやっておりまして、ゲーム業界はまだ一年半です。現在は開発マネージャーとして業務をさせて頂いています。
田中:
KMSの田中です。クライアントやサーバーサイド、インフラ周りなどを担当しています。宜しくお願いいたします。
アンドレイ:
同じくKMSのアンドレイです。コーディングが好きです!以上です。
(一同笑)
増渕:
3人とも、ありがとうございます。アンドレイさんは会社内ではアーキテクト、全体設計を担当されているとお伺いしています。ちなみにご出身はどちらなんですか?
アンドレイ:
私はロシアのソチ出身で、日本に来たのは4年前です。日本に来た理由は、私が秋葉原に住んでいると言えば充分でしょう?当時は日中に日本語学校に通いながら、夜はロシアでのEC関係の仕事をリモートで行っていました。その後日本で働くことを決めて、昨年5月中旬にKMSに入社することになりました。
増渕:
秋葉原在住!良いですね。石渡さんも独特なキャリアをお持ちですね。美容師からゲーム会社というのは、なかなか面白い転身というか。
石渡:
私は最初、美容師でしたが、その後は広告代理店のメディア事業の方で働いていました。そちらを退職後、フリーランスとして3年ほど個人でメディア事業を行いながら、音楽制作やDJなども行ったりと、色々やっていましたね。KMSは現在設立2年となりますが、私は2016年のゲーム事業立ち上げの段階から在籍しています。
増渕:
ありがとうございます。田中さんは2017年11月の入社と伺っていますが、それ以前もゲームを作られていたのですか?
田中:
そうですね。私はもともと大学時代にプログラミングを始めて、最初はC++から触り始めました。その後C#に目覚めまして、今はもうないですがMicrosoft XNA(※)で個人的にゲームを作っていました。その後別のゲーム会社に入ったのですが、そこではPure Javaで開発をしていて。他の言語に移って初めて苦しさを知って、またC#を使いたいと思ったのがKMSに入社したきっかけでした。KMSはクライアントサイドだけでなく、サーバーもやれるところが良かったですね。
(※編集部注:マイクロソフトが2014年4月まで提供していたゲーム開発ツール。)
増渕:
XNA いいですよね!僕は XNA が動く Windows Phone 7 はきっと流行るだろうと思いました。
(一同笑)
増渕:
田中さんは開発後の入社と伺っておりますが、今回の『オトギフロンティア』は、皆さんゲーム開発経験がない状態でスタートしたのでしょうか?
石渡:
そうですね、弊社としては初のゲーム開発事業となりました。まずは『オトギフロンティア』の概要について説明します。
◆本格ファンタジーRPG『オトギフロンティア』概要と設計思想

石渡:
こちらが『オトギフロンティア』です。童話を題材にしたキャラクターと一緒に旅をするRPGになります。スキルの構成によって戦い方が変わるので、事前にデッキの組み方を考えて行くのが面白いゲームとなっています。
増渕:
今日は技術の話になると思うのですが、その前にシナリオなどゲームの魅力なども教えて頂けますか?
石渡:
良くあるRPGは題材が結構重たいものが多いのですが、本作は全体を通してコミカルなストーリーなので、気兼ねなく話を楽しんで頂けるかなと思います。キャラクターごとに特色があるので、ストーリーを見てクスッと笑って頂ければと思っていますね。
増渕:
ありがとうございます。アンドレイさん、最初にこのゲームの企画を受け取った時、どうでした?どうやって設計に落とし込んだのかを教えて頂けますか?

アンドレイ:
設計の方で行くと、フロントはUnity、サーバー側はWeb APIです。大体のゲームはシーン遷移などでサーバー接続を行いますが、『オトギフロンティア』でもフロントエンドは独立しています。ネット接続については既存ライブラリーに任せるのではなく、SignalRを用いて自分でネット接続のライブラリーを作っています。
増渕:
エンジニアの体制は、クライアントとサーバーで分けていますか?
石渡:
一応分かれてはいるんですけど、クライアント側もサーバーを触れるように、 サーバーエンジニアもUnityを触れるようにとはしています。最初期はサーバー側はLISPで開発をしていたのですが、今はC#で統一をしています。
増渕:
もともとサーバー側はLISPだったんですね。
石渡:
はい。Azureのご相談をしたのが確か昨年4月でしたが、その時は弊社にインフラエンジニアが居なかったんです。「Azureで、すべてPaas構成ならインフラエンジニアが必要ない」ということで試しにやってみて、その後アンドレイが入社して来て、その後C#に統一された形ですね。マネージドサービスも含め、専任のエンジニアを配置しなくても良いというのは大きな利点でした。

増渕:
データの置き場所としては、Azure SQL Databaseをお使いですね。
アンドレイ:
はい、Azure SQL Databaseはきちんと保存したいデータとホットデータ、あとはよく変更があるデータをRedisに入れている感じです。ゲームは常時接続がないため、サーバー側から見れば普通のECサービスと特に違いがありません。ホテルの予約システムとゲームのサーバー側は大体同じですね。
増渕:
セッションごとにサーバー上のセッションオブジェクトを使って、その中に魔法やアイテムなどの情報が入っていて。それをやり取りするというか。
アンドレイ:
サーバー側にゲームのステートはなく、全てクライアント側です。ただ、バトルの場合クライアント側に侵入できないので、サーバー側でバトルを再生します。それ以外はクライアントから受け取ったデータをバリデーションし、おかしなデータが入ってないことを確認してデータベースに入れるという感じですね。

増渕:
なるほど。今はAzure SQL Databaseの方は基本的にEntity Framework経由でアクセスしてる感じになるのでしょうか。Azure SQL Databaseの設計は、Visual StudioなどC#に依存して作っているのですか?
石渡:
はい、そうなりますね。
増渕:
なるほど、ありがとうございます。急にざっくりとした質問ですが、初のゲーム開発で一番困ったのはどこでしょう?
アンドレイ:
メモリ!Unityで60fpsで走っていても、書き出すと固まったりしました。
石渡:
アンドレイも言う通り、メモリですね。アセットのサイズを小さくするために減色ツールを使ったり、できるだけクライアント側でキャッシュするなどの対策を取っていました。

増渕:
運用についてお伺いさせて下さい。C#とVisual Studio運用のコツのようなものっていくつかあると思うのですが、例えば行動管理をしたり、検証環境に自動デプロイやCI(Continuous Integration)をしていたりすると思うのですが、その辺りはどうされてますか?Visual Studioから各個人環境には自動でCIで行うとか、本番環境は一回で、全てのプルリク(プルリクエスト)が終わってることを確認してから流し込みとか、そこら辺の仕組みって少し紹介して頂けますか?
アンドレイ:
最初にタスク番号と簡単な説明をブランチ名に入れて、マスターからブランチを切ります。その後のローカル開発はVisual Studioで行い、データベースの変更がなければ直接、開発用のデータベースを使います。ローカルデータベースを使おうと思った事もありましたが、あちらこちらでデータが足りないから実際にテストできない事もあって。個人ごとにdev1やdev3とか割り振って、Visual Studioから直接つないでいる感じです。
増渕:
「Visual Studioで、サーバーもクライアントも両方開発できるからいいぞ!」みたいな感じですね。

増渕:
それと、Azure App Serviceの事も少しお聞きしようかと思ってました。運用を開始した時は従来のWeb Appでしたよね?
石渡:
そうです。それで途中でAzure App Service Environment V2へ切り替えた形ですね。従来のものだとレスポンスの平均タイムが1秒から悪い時は2秒程度掛かっていて、「ゲームが重い!」という問い合わせが来ることもありました。その時にASE(Azure App Service Environment)の話をもらってたので、切り替えてみようかということで試してみたら、今では平均200msから300ms。いい時は150msくらいで、かなり快適になりましたね。
増渕:
従来のものはネットワークが他のお客さんと共有なんです。ASEと従来のWeb Appの違いは、ユーザーからは見えないところなのですが、ネットワークのフロントが見えないロードバランサーのレイヤーがありまして、そこで他ユーザーと分離するような設定をするロードバランサーが自前で使えるという。
石渡:
それこそ前の状態だと、最後は合計で40台くらいだったのですが、今は2台から9台ぐらいになりました。
田中:
そうですね、今はピーク時でも9台です。トータルコストは結構安くなりまして、助かりましたね。
増渕:
それは良かった!世の中のドキュメントは古いものが多いので、是非新しい環境を皆さんに使って欲しいですね。
◆複数のプログラマがリアルタイムにコードを編集できる「Visual Studio Live Share」

増渕:
先ほどの話で、エンジニアがサーバーサイドもクライアントサイドも両方できるように、という話がありました。最近は何社かゲーム会社とのお付き合いがあり、我々としてもゲーム開発のサポートを強化したいと考えているのですが、これは背景として「これまではPHPやLAMPなどを通ったWebエンジニア系譜の方々がモバイルゲームを作っていた」というものがあるんです。
それが最近になってUnityと、Unityと接続性の良いPhotonやスクラッチ開発だったりというところでC#が見直されて来ている。なので、マイクロソフトとして、ゲーム業界のサポートを強化するというように舵を切る事にしたんです。皆さんとは良い時期に出会えたなと。
石渡:
そういう意味でも、LISPで最後まで行かなくて良かったです。私達はまだ新しいチームなので、社員募集も積極的にやっていますが、「LISP使える人募集!」だと誰も来ないんですよ。来たとしても60歳くらいの教授クラス、みたいな…。C#に方向転換してからは、田中のように良いメンバーに巡り会えるようになりました。
増渕:
ちなみに、今はエンジニアは何名編成なのでしょうか?
石渡:
アルバイトの方を含めて7名ですね。少し増えて来ました。

増渕:
もしかしたら、「Visual Studio Live Share」という機能が使えるかも知れません。これはご存知でしたか?
田中:
はい、知っています。既に申し込んでいます。
増渕:
良いですね!今後Visual Studioでペアプログラミングができて、デバックも共有できる機能が追加されます。チームの規模が大きくなってくると、だんだん全体に目が行き届かなくなったりしますよね。都度会話をするのも大変だと思うので、「ちょっとコードを見せて」で有無を言わさず相手の環境に入ってしまいましょうということです。チャットで自分の環境に相手を呼ぶという感覚ですね。まだβ版ですが、Visual StudioとVisual Studio Codeの間でもシェアできるようになります。
アンドレイ:
別製品でもできるんですね。私個人的には、仕事が増えそうで嫌ですけど。
(一同笑)
田中:
個人的には、あと1人チームにエンジニアが欲しいですね。
石渡:
そうですね。「面白い人」なら是非一緒に働いてみたいと思っています。私もそうですが、弊社は少し変わった経歴の方が多くて。他のゲーム会社が打ち合わせに来るとよく「こんなに賑やかな会社は他にない」と仰っていますね。
アンドレイ:
みんな何かしら、わいわい話しています。どこにいても話し声が聞こえてきますから、最近はイヤホンを付けるのをやめましたね。いい環境だと思います。
◆まとめーインフラエンジニア以外もサーバーサイドへ

増渕:
皆さん、ありがとうございました。弊社としては、Visual StudioとAzureを使って、インフラエンジニアがいなくてもサーバーサイドを作れるという世界を用意してるつもりなんですけど、なかなか広まらなくて。そんな時にこういった事例を頂けて。田中さんにお伺いしたいのですが、サーバー側を触り始めるきっかけはありましたか。
田中:
私も最初は1人で同人ゲームを作っていたので、設計部分からリリースまで全て1人でやるというのが多かったんです。自分でゲームを作るからこそ、全体を見ることができるようになりたいと思っていたので。だからきっかけというか、そもそもVisual Studioからそのままコードがサーバーにデプロイできるというのが嬉しくて使い始めた形ですね。
増渕:
Azure のサブスクリプションをお持ちの方は Visual Studio から簡単に自動デプロイできてしまいますね。
田中:
そうです。パブリッシュってボタンを一個ポチッと押すだけで全部いい感じにしてくれるので、きっかけとしてはそこですね。
アンドレイ:
ただ、たまに確認なしのボタンがあるので、ワンクリックで本番を倒す(Production Server=本番環境)こともできますけどね。
(一同笑)
増渕:
確かに、自動デプロイという目立つボタンをポチッと押すと、本番環境は倒せますね。Azure 自体は本番環境で使われてるか開発環境で使われているかというフラグはないので、本番でもビルド環境や開発用のリポジトリから直接デプロイできます。小規模なWEBサイトの運用ならよいのですが、気軽にやっちゃダメですね。ゲームサーバーの運用においては、 デプロイ先は検証環境、本番環境といった複数の場所、Environmentをソフトウェアが管理しないといけませんし、承認後のリリースタイミングも作りたい。そいうときは、VSTS(Visual Studio Team services)承認フローを作って、リリースマネジメントしましょう、という感じですね。
石渡:
ちょっとしたTipsですね。今回のこの会もそうですが、こういった技術的な話ができる場をもっと増やしていけたら良いなとは思っています。
増渕:
そうですね。日本マイクロソフトとしても、技術提供や知見の共有の場は積極的に設けて行きたいと思います。皆さん、本日はありがとうございました。引き続き宜しくお願いいたします!