こんにちは。ゆきのもりです
ゲームのエンジニアを経験して4年くらいになります

サーバって何だ?
最近のゲームをプレイをしているとよく聞く「サーバ」という言葉
「サーバが混雑しています」「サーバとの通信が途切れました」なんて画面はプレイ中に見かけたりもしますね
今回はゲームにおけるサーバの役割について解説していこうと思います
こんな疑問を抱いたことがある方は、この記事を読めば解決するかも?
ゲームにおけるサーバの役割
ゲームプレイ中、サーバが一体何をしているのか、どんな役割をになっているのか解説します
ユーザーデータを管理する

昨今のゲームはプレイしている間、頻繁にサーバと通信しています
一体何をしているのかというと、サーバからユーザーのデータを取得しているのが大半です
ユーザーのデータというのは…
などなど、自分のゲームの状態に関する情報です
こういった情報はスマホにもある程度保存されていますが、サーバにも保存されています

スマホに保存してあったら十分では?
そんな疑問を抱く方も多いかと思います
オンライン要素や課金要素がないゲームの場合はそれでもよいのですが、最近のゲームにはサーバへのデータ保存が必要不可欠な理由があります
異なるプラットフォーム間でデータを共有する
最近のゲームはスマホ、パソコン、PS4、スイッチなど異なる機器、端末からプレイできるようなものも多いです
このとき、ユーザーのデータを共有するためにサーバが使われています

例えば自分のスマホでゲームをプレイして魔法石というアイテムを10個入手したとします

この情報が自分のスマホにしか保存されていないと、パソコンで同じゲームをはじめたとき、パソコンでは魔法石が0個で始まってしまいます
これではゲームをプレイする機器を変更するたびに、ゲームを最初からやり直す必要があります
ここでサーバの出番です

スマホでゲームをプレイして入手した魔法石の個数をサーバに保存しておきます
次にパソコンでゲームを始めたときに、サーバに保存してある魔法石の個数を取得することでパソコンでもスマホでプレイした直後のデータからゲームを再開することが出来ます
サーバがストレージのような役割を果たすことで、異なるプラットフォーム間で円滑なゲームプレイができるわけですね
ガチャの不正を防止する
「ガチャをいっぱい引きたい!」というのは最近のゲームをプレイしていると頻繁に思いますよね
そのために、不正にスマホを改造するといったことをする人もいます

改造して魔法石(ガチャを引くためのアイテム)を増やしたスマホがあると、何回もガチャを不正に引かれてしまいます
結果的に他のユーザーと差がついたり、運営の儲けがなくなってしまったりと悪いことだらけです
ここでサーバの出番でとなります

サーバに正式な手順で入手した魔法石の個数を保存しておきます
このとき不正にガチャを引こうとすると・・・

サーバは自身の中に保存された魔法石の個数から、本当にガチャが引けるのかどうかを判断します
この場合ガチャは引けないため、ガチャの商品をこのユーザーが入手することはありません
このようにユーザーのデータをサーバが管理することにより不正を検知し、防止することが出来ます

なるほど・・・でも、サーバは改造されたりしないの?
スマホはプレイする人の手元にありますが、サーバはゲーム運営者の下にあるため不正をされる可能性はとても低いです
ただ、不正なスマホを使うとサーバを攻撃する通信ができたりするので、サーバを作るエンジニアはこのあたりの対策を考えてサーバを作成しています

例えば、魔法石9999個をさも正常に入手したかのような通信を送ってもサーバは魔法石の入手経路をチェックし、サーバ内の魔法石の個数を増加させたりはしません
ネット対戦中のデータ同期

ネット対戦では他の端末とデータ送りあっています
例えばネット対戦のゲームでは
などの情報をお互いに送信しあっています
ただ実際のところ、多くのゲームはここにサーバとの通信を挟みます
図にしてみるとこんな感じです

スマホがサーバにデータを送り、サーバが別なスマホにデータを送る、といった感じですね

サーバ挟むのはいいけど、なんか効率悪くない?
たしかに実際のところ、若干効率が悪いのは事実です
サーバに対する通信が多い分、通信に時間がかかってしまったりします
ただ、それでもサーバを挟む意味はいろいろあります
対戦の不正を防ぐ

例えば、スマホを改造して・・・
などをされると対戦結果が不正なものになってしまいます
そこでサーバの出番です

サーバは不正な改造をしたスマホからの通信をチェックして不正を検知した場合、対戦を中止することが出来ます
こうすることで正常な対戦のみを行うことが出来ます
対戦結果からランキングなどを作る場合、こういった取り組みで不正な対戦を除外するのはとても重要なことなのです
通信断絶への対処

例えば、複数の端末が通信して対戦する状況があったとします
ギルドバトルやレイドバトルなどではよくある感じですね

このとき、AとBの端末の通信が途切れたとします
例えばBさんが電車移動中でトンネルに入ったりした場合です
このときA,C,Dの端末で、Bのキャラクターは止まったように見えますがゲーム自体は進行していきます
すると、A,C,DとBの端末で異なる対戦結果が生成されます
対戦結果に応じて報酬が手に入る場合、各ユーザーの間で入手する報酬が異なり不平等になります
ここでサーバの出番となります

全ての通信をサーバ経由にします。実際のゲームではほぼこちらのパターンです
ここでBとサーバの通信が断絶した場合どうなるのでしょう?
A,C,Dの端末で、Bのキャラクターが止まったように見えたりするのは一緒ですが、対戦結果はサーバの中に保存されているもの=Bさんが途中でいなくなった対戦結果が真となります
サーバに保存されている対戦結果を正として進行し続けるため、A,B,C,Dの端末に不平等が発生することはなくなります
まとめ

以上、ゲームにおけるサーバの役割でした
今回はゲームのサーバの説明でしたが、ゲーム以外のサービスでもだいたい似たような役割です
本記事の内容をおさらいしますとこんな感じです
いろいろな役割がありますが、根底は「不正を防止する」という役割が大きいです
ゲームの開発というとキャラクターや戦闘など、目に見える部分の開発を思い浮かべると思いますが、サーバの開発も非常に大切な役割を担っています
ぜひ、サーバを使用したゲームの開発にも興味をもっていただけると幸いです
ではまた!
コメント