アイドルを育成したり、過去の英雄や偉人が仲間になったり、擬人化された刀を戦わせたり、女の子になった馬を育成したり……多種多様なスマホゲームアプリがあります。
遊んだことがない方もテレビCMやWeb広告などで、日に1回はスマホゲームアプリの画像や映像を見かけるのではないでしょうか。
前職ではスマホゲームアプリの運営・開発をしていたため、今も新しいスマホゲームアプリはチェックするようにしています。
また、職業病ともいえるのですが「このゲームはどんな作りになっているのかなぁ」と、つい裏側を考えながら遊んでしまいます。
そこで今回は、ざっくりとスマホゲームアプリの代表的な仕組み(システム)についてまとめてみました。
スマホゲームアプリの内容によって仕組みは異なりますが、ほかのユーザーと協力したり、対戦したりするスマホゲームアプリは、一般的にクライアントサーバシステムと呼ばれる仕組みで動いています。クライアントサーバシステムは、クライアントサバモデルと呼ばれる場合や、略してクラサバとも呼ばれる場合があります。
クライアントは「顧客」「依頼人」、サーバは「与える人(もの)」「給仕する人(もの)」という意味がある単語で、クライアントはサーバへ何らかの要求を行い、サーバは要求に応じた結果をクライアントに返します。
スマホゲームアプリの場合、ユーザーがスマホで操作するアプリがクライアントに該当します。なお、PCのWebブラウザでオンラインゲームが遊べる場合は、Webブラウザがクライアント(※1)に該当します。
またスマホゲームアプリでは、大きく分けると2種類のサーバが利用されています。
1つはアプリケーションサーバと呼ばれるクライアントからの要求に応じて何らかの処理を行うサーバ、もう1つはデータを保存しておくためのデータベースサーバ(以降、データベース)です。
クライアント「バトルをしたいです」
サーバ「条件を満たしているのでバトルを開始していいですよ」
クライアント「アイテムを買いたいです」
サーバ「所持金を減らして、アイテムの所持数を増やしました」
なんてやりとりを行っています。
スマホゲームアプリで通信(または通信処理)と呼ばれるものは、クライアントからサーバに何らかの要求をし、結果を得る一連の流れを指します(※2)。
通信中であることをわかりやすく「通信中」「now loading」「wait please」などと画面に表示するものもあれば、何も表示せず遊びの邪魔にならないようにこっそりと通信を行うものもあります。
先ほど登場したデータベースは、ユーザーデータとマスターデータと呼ばれるデータを持っています。
ユーザーデータは名前のとおり、ユーザーに関するデータで、ユーザーごとのプレイ情報や所持しているアイテム情報などのデータです。
もう1つのマスターデータは、ゲーム内で不変の情報を指します。 具体的には、ゲームに登場するキャラクターの情報だったり、アイテムの情報だったりと、一度保存(記録)されたら、不具合や設定ミスなどがない限り、変更しないデータです。
とはいえ、マスターデータの種類によっては、アップデート(更新)されることもあります。例えばですが、アイテムの値段を下げたり、武器の攻撃力を上げたりする場合などです。
スマホゲームアプリで、緊急メンテナンスが行われる理由の1つに、このマスターデータの設定ミスが挙げられます。本来は登場しない敵キャラが出てしまった、ストーリーの進行条件を間違えていた……etc。
もちろん、入念な確認をしますが(しているはず)、複雑なものであればあるほど、設定項目が多くなり見落としてしまうことがあるため、寛容な心を持ってもらえると嬉しいです(元同業者として)。
クライアントサーバシステム、ユーザーデータとマスターデータ、これらには大きく3つのメリットがあります。
ほかのユーザーと協力したり、対戦したりできるのは、サーバ側でユーザーデータを管理したうえで、処理を行っているからです。サーバを仲介することで、ユーザー間で繋がれる仕組みを実現しています。
マスターデータをサーバ側で管理して、必要に応じてクライアントにデータを渡すため、クライアント(アプリ)は更新せずに、新しいキャラクターやアイテムを追加できます。
ユーザーデータをサーバ側で管理しているので、チート(不正行為)によるデータ改ざんなどを防げます。
例えば、ゲーム内のショップでアイテムを購入するとしましょう。ショップで購入できるアイテムには、販売期間や価格が設定されています。期間外である場合や、ユーザーの所持金が足りない場合は、本来買えないはずです。
クライアント側ですべてのデータを管理して処理を行っている場合、チートでアイテムを不正に入手されてしまう恐れがあります。しかし、サーバ側で購入可否の判定処理を行って、ユーザーデータを管理していれば、そのようなチートを防ぐことができます。
もちろん、デメリットがないわけではありません。
ユーザーが多ければ多いほど、サーバの維持管理のコストがかかります。また、新機能(新しい遊びの追加)をする場合は、サーバとクライアントの双方の追加開発が必要です。
しかし、トータルで考えると、有り余るメリットがあるといえます。
ユーザーからすると、通信量がかかるからこんな仕組みじゃなくていいのになぁと思うかもしれません。私の個人的な考えですが、このシステムでユーザーが受ける最大の恩恵は、データの引き継ぎができることだと思います。
スマホの機種を変更した場合や、スマホのデータを初期化した場合など、ゲームデータの引き継ぎを行ったことがある方がいると思います。
これを可能にしているのが、データベースに保存しているユーザーデータです。
あらかじめ設定しておいた引き継ぎ用のパスワードや記録しておいたユーザーIDなどを使うことで、新しいスマホ(もしくは初期化したスマホ)に入れたアプリで、古いスマホ(もしくは初期化前のスマホ)のデータを引き継いで遊べるようになっています。
前触れもなくスマホが故障してしまった、スマホを紛失してしまった……なんてこともあるでしょう。
プレイの状況をサーバ側で管理しているため、最新のプレイ状況を引き継いで遊べるようになっています。ただし、引き継ぎパスワードやユーザーIDを紛失してしまった場合は、以前のプレイデータで遊べなくなってしまう可能性が非常に高いので、ご注意ください。
(ユーザー名などほかの情報をもとに、お問い合わせで対応してくださることがあります)
スマホゲームアプリでプレイ中、要所要所で通信を行うのは、このような仕組みで動いているためです。
厳密にいえば、スマホゲームアプリにおけるクラサバのメリットとデメリットはもっとありますが、わかりやすい点でいえば上記で挙げた内容だと思います。
遊びすぎると通信量がかかってしまいますが、楽しいゲームライフをお過ごしください!
なお、当社で手がけたプログラミング書籍には、クラサバを体験できる書籍がありますので、興味がある方は挑戦してみてはいかがでしょうか。
※1 クライアントサーバシステムで、クライアントがWebブラウザの場合、Webシステムとも呼ばれます
※2 通信は要求して結果を得る流れだけではなく、クライアントがサーバへ一方的に要求して(データの保存を求めるなど)結果は得ない、サーバがクライアントへ一方的に何らかのデータを送るような通信もあります。