TOPICS

TECH BLOG

【TECH BLOG #7】『フルスタックエンジニア』とは?

こんにちは、技術戦略チームのTNです。
もう新しい年を迎えましたが、本年もファンプレックスと当TECH BLOGをよろしくお願いいたします。

ゲーム業界におけるフルスタックエンジニアとはどんなエンジニア?

私の寄稿も2度目になりますが、今回は『フルスタックエンジニア』について。

去年の末に、名古屋のトライデントコンピュータ専門学校にて登壇させていただいたのですが、
その際に今後活躍が熱望されるエンジニアのモデル像のひとつとしてフルスタックエンジニアを挙げさせていただきました。(※登壇の様子はこちら)

講義時間の都合もあり、フルスタックエンジニアがどういうエンジニアなのか、掘り下げが浅かったなと反省したこともあり、今一度ゲーム業界におけるフルスタックエンジニアとは、どういうスキルセットを備えたエンジニアなのか考えたいと思います。

特定領域に特化したスキルをもつ『専門特化型』のイメージに対して、フルスタックエンジニアはクライアントとサーバーがこなせるというイメージがあるものの、漠然としている感があります。
また業態によっても求められるものが違ってくることもあり、ネットで検索をかけると多種多様な情報が溢れています。

「イメージしづらいものは、小さく分解することで物事の形が見えてくる」

ので、私なりの解釈でフルスタックエンジニアの最小の姿を定義していきます。

フルスタックエンジニアの最小スキル

まず、クライアントとサーバーができる、という定義に関してです。
昨今、多くのゲームにおいてネットワークで繋がってるのは当然になっていますが、ソーシャルゲーム開発においてはサーバー・クライアントモデルが基本になっています。
さまざまなゲームサービスやサポートを行うためにユーザーデータを中央管理しているのですが、マシンが一台ではなくAPI、データベース、CDNなど複数のサービスがクラウド上で動作し複合的に利用しております。
またビジネス面でも課金処理だったり、Push通知を送ったり、ユーザー情報を分析にかけたりとさまざまな仕事をしております。
これらを包括的にバックエンドと呼ぶこともあります。
ソーシャルゲームではゲームロジックの大部分をサーバーサイドで処理し、スマフォやPCなどのクライアントサイドで行う処理は画面描画とユーザー入力、ネットワークアクセスだけというミニマムな構成も少なくありません。
サーバーサイドはそれほど多岐にわたる処理を担うのですが、ゲームを成立させるための最小の要素としては、

APIコールに対してデータベースにデータ(ユーザーおよびゲーム情報)を格納する、または決められたフォーマット(XML, json, シリアライズドバイナリーなど)で要求されたデータを送信する

となります。

つまり、サーバーサイドができる、というのはデータベース(以下DB)のテーブル設計とオペレーション(SQL等)、API実装(PHP, Python,C#,Javaなど)のスキルが期待されます。
開発現場においては上記のスキルに加えてこれらを動かす、

・MySQL等のデータベース本体
・Apache、nignx等のWebサーバー
・AWS、GCP等のクラウドインフラ

などに関する最低限の知識も必要です。

またDB内に格納されるデータには、プレイヤーの振る舞いで変更されることがない固定的なデータ「マスターデータ」と、プレイヤーの行動や状態を記録する「トランザクションデータ」(ユーザーデータなどとも言う)があります。
トランザクションデータはクライアントからAPIを介した入力データを加工してDBに格納されますが、マスターデータは事前に準備される(デプロイされる)データなので、データをDBに格納するためのシステムが必要となります。(入稿ツールなどと呼ぶ)
サーバーサイドエンジニアのみならず、クライアントサイドでも入稿ツール実装はよく求められます。
一般的にはExcelやGoogleAppのスプレッドシートに記載されたデータを変換して、DBへ格納するような入稿ツールが多いです。(Webアプリあるいはネイティブアプリ)
入稿ツールでデータを作成しないと、機能実装のテストなどもできないので必須スキルと言えます。

一方、クライアントができる、というのもかなり曖昧です。
上記でソーシャルゲームにおいて、クライアントは画面描画とユーザー入力とネットワークアクセスだけというミニマム構成なものもあると書きましたが、
この3要素も内部を細かく分解してみると、それぞれが多くの処理を積み重ねていることがわかります。

例)画面描画

近年ではUnityなどのゲームエンジンの台頭により、ビルトインされた機能を組み合わせて使うことで、こういったクライアントサイドの実装ハードルがぐっと下がりました。

またゲームロジックはクライアントで処理し、サーバーサイドはオンラインストレージぐらいの役割しか持たないゲームもあります。
誤解を恐れずに書くと、広義ではフルスタックエンジニアがもつ最小のクライアントスキルは

APIコールしてレスポンスデータをクライアントで処理しやすいデータ構造に変換してメモリ上に配置する

と言えます。
「処理しやすいデータ構造に変換して」はjsonやXMLのパースであったり、シリアライズされたバイナリデータのデシリアライズだったりします。
ただ、これだけではゲームが動いているとは言い難いですし、クライアント・サーバーで一気通貫で機能を実装できるというフルスタックエンジニアの利点を考えると、もう少しスキルが要求されそうです。

例えば、

・位置データが指定する座標にキャラクターを移動させる
・アイテムデータをUIに一覧表示する
・ダメージデータをクライアントキャラクターの見た目に反映させる

などなど、いろんなケースが考えられます。

まとめ

あらゆる技術に精通してるのが上位レベルのフルスタックエンジニアとすれば、ダーマ神殿で転職したての賢者のようなLv1のフルスタックエンジニアがもつスキルは、

・クライアント<->サーバーでやりとりするデータ設計ができる
・サーバーサイドでDBテーブル設計ができ、APIを実装することができる
・入稿ツールを実装できる
・クライアントサイドでネットワークから取得したデータをパースやデシリアライズしてメモリ上に配置することができる
・クライアントサイドでネットワークから取得したデータを使って、画面表示そのものやキャラクターステータスの更新、アイテム取得や消費、などプレイヤー行動に影響を与える機能を実装できる
・最低限のクラウドインフラ知識を持っている

といったところでしょうか?

ようやくフルスタックエンジニアの姿が少し見えてきました。
Lv1とはいえけっこう多くのスキルが要求されますね。
必然的にフルスタックエンジニアとしての成長には相当な経験値が必要になります。
まずは基本のスキルセットを習得し、そのうえで自分がなりたい目標に向けて日々勉強していくことがフルスタックエンジニアへの道かと思います。

今はフルスタックエンジニアの需要がゲームも含めたIT業界全体で高まってる背景もあり、いろんなオンライン講座なんかも用意されています。
ファンプレックスでも、所属しているエンジニアのさらなる成長のために、各種カリキュラムを策定したり、エンジニア全員がオンライン講座を利用できるような制度を整えています。

ファンプレックス株式会社

グリー株式会社の100%子会社で、ゲーム運営事業を行う。
公式サイト: http://funplex.co.jp/
公式Facebook:https://www.facebook.com/funplexInc

[本件に関するお問い合わせ先]
ファンプレックス株式会社 広報担当
東京都港区三田一丁目4番1号 住友不動産 麻布十番ビル 5階
E-mail: info.funplex@funplex.co.jp