GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

【インタビュー記事】GameWith Magazine さんにインタビューしていただきました

みなさん、こんにちは。GS2の丹羽です。

本日は GameWith Magazine さんにインタビューをしていただいた記事が公開されましたので、お知らせします。

magazine.gamewith.co.jp

私とゲームの出会いや、なぜ GS2 という事業を始めたのか、これからどうなりたいのか。といった点を記事にしていただきました。
よろしければ、ご覧ください。

それでは、また。

【登壇情報】CEDEC2018 に登壇します

みなさん、こんにちは。GS2の丹羽です。

本日は、国内最大のゲーム開発者カンファレンスであるCEDECでの登壇が決まったことをお知らせします。

https://2018.cedec.cesa.or.jp/session/12018.cedec.cesa.or.jp

『サーバレスアーキテクチャによるゲームサーバ開発』という題目で、サーバレスアーキテクチャとは何か?といった初歩的な内容から
サーバレスアーキテクチャをゲームに応用することでどのような恩恵が得られるかをお話しさせていただきたいと思います。

https://2018.cedec.cesa.or.jp/2018.cedec.cesa.or.jp

CEDECパシフィコ横浜 で 2018.08.22 (水) - 08.24 (金) の期間開催される予定です。
ご参加なさる際には、GS2のセッションにも是非足をお運びいただければ幸いです。

それでは、また。

マイクロサービス間でトランザクション処理を行う

みなさん、こんにちは。GS2 の丹羽です。

本日 GS2-Showcase という新サービスを告知しました。
gs2.hatenablog.com

このサービスを開発するにあたって新しいトランザクションシステムを導入することにしました。
このトランザクションシステムを GS2 内ではスタンプラリーと呼ぶことにしています。

マイクロサービスにおけるデータ更新の課題

まず、最初にマイクロサービス内におけるデータ更新の課題について振り返ってみます。
マイクロサービス間の結合度を下げる為には、まずは依存関係をなるべく少なく保つ必要があります。

たとえば、今回発表した GS2-Showcase を実装するためには最大4つのシステムが連携することになりました。
代表的な例として、課金通貨を使用してゲーム内通貨を購入するケースで必要となる操作を整理します。

  • GS2-Showcase / 商品が陳列されている(販売期間内である)
  • GS2-Money / 消費する通貨が商品価格に対して十分である
  • GS2-Gold / 購入する通貨が購入後もウォレットの上限に達しない
  • GS2-Limit / 商品の購入回数をカウントアップする
  • GS2-Money / 通貨を消費する
  • GS2-Gold / 通貨を加算する

このようなアクションを同期的に実行しなければ GS2-Showcase の機能を満足に提供することは出来ません。
しかし、マイクロサービス間では異なるデータベースを持ちますし、何らかの方法で排他処理を実装する必要がありました。

スタンプラリー

そこで、GS2 では新たにスタンプラリーというトランザクションシステムを用意しました。
スタンプラリーには以下の概念が存在します。

スタンプシート

スタンプラリーを実行する単位です。
スタンプシートには複数のスタンプタスクと、スタンプラリーを完走したときに得られる報酬。報酬を得るためのエンドポイントが記録されています。

スタンプタスク

スタンプタスクはスタンプラリーの報酬を得るために起こさなければならないアクションが記録されています。
スタンプタスクは主にスタンプラリーを完走したときに得られる報酬を得るための対価を支払うアクションの定義となります。

例を分類

先ほどの例をスタンプラリーの概念で分類してみます。

状態保証

  • GS2-Showcase / 商品が陳列されている(販売期間内である)
  • GS2-Money / 消費する通貨が商品価格に対して十分である
  • GS2-Gold / 購入する通貨が購入後もウォレットの上限に達しない

状態保証はスタンプラリーを開始するために必要となる条件です。
今回は GS2-Showcase がスタンプシートを発行することになりますので『GS2-Showcase / 商品が陳列されている(販売期間内である)』に関する保証は容易です。
GS2-Showcase では商品の購入アクション実行時(スタンプシート発行直前)に GS2-Script を呼び出すことが出来ます。
このスクリプト内で『GS2-Money / 消費する通貨が商品価格に対して十分である』『GS2-Gold / 購入する通貨が購入後もウォレットの上限に達しない』を検証することで状態保証を行えます。

さらに、スタンプラリー実行中に状態が変化しないことを保証する為に GS2-Money / GS2-Gold のウォレットに対してロックを取得するといいでしょう。
その際に、その後の通貨の消費や加算処理の妨げにならないよう、スクリプトにはスタンプラリーにおいて使用するトランザクションIDが渡りますので、それを使用して GS2-Lock でロックを取得します。

ウォレットが条件を満たしていない場合や、ロックの取得に失敗した場合はスクリプトからエラー応答をすることで、スタンプシートの発行を止めることが出来ます。

変化要求

  • GS2-Limit / 商品の購入回数をカウントアップする
  • GS2-Money / 通貨を消費する

次に、変化要求です。
スタンプシートのスタンプタスクを全て実行することで変化要求に応えることが出来ます。
スタンプタスクは実行されたかという状態をサーバ側で管理しており、複数回実行出来ないようになっています。
『GS2-Limit / 商品の購入回数をカウントアップする』と『GS2-Money / 通貨を消費する』はそれぞれのマイクロサービスにタスクを送信することで、実行出来ます。
仮に処理が失敗した場合もリトライをしたり、場合によってはロールバックしましょう。

報酬

  • GS2-Gold / 通貨を加算する

スタンプラリーを終えたら、スタンプシートを消費することで、報酬が得られます。
指定されたエンドポイントにスタンプシートを送信すると、全てのタスクが完了しているかを検証し、問題が無ければ報酬を付与してスタンプシートを無効化します。

最後にスタンプシートに設定された、スタンプシートを消費したときに呼び出される GS2-Script でロックを解除すれば処理は終わりです。

不正対策

ゲームに不正行為はつきものです。スタンプラリーではどのような不正対策をおこなっているのでしょうか。

署名

スタンプタスク毎/スタンプシート全体 に署名がつけられています。
これによって、スタンプタスク内に含まれる 対価の消費数量 や、スタンプシートに含まれるタスクの数や種類を差し替えようとしても出来ないようになっています。

スタンプシートの無効化

報酬を得たスタンプシートはその時点で無効化しているため、全てのタスクを終えた1つのスタンプシートを使って何度も報酬を得ることは出来ません。

状態保証の不正取得

変化が起きる前にスタンプシートを何度も取得して購入回数制限などを突破しようとしたとします。
この場合、GS2-Lock を使用してリソースのロックを取得している場合は、2回目以降はそのロックが取れずに失敗します。
仮に GS2-Lock を使っていなかったとしても、GS2-Limit で購入回数をカウントアップするタスクを実行する際に不正に取得したスタンプシートでは回数上限に達してしまいタスクを完了出来ないため、報酬を得ることも出来ません。

スタンプシートの特徴

スタンプタスクを実行する際には、誰が何のためにタスクを実行しようとしているのか、消費されるマイクロサービスは知る必要がありません。
『スタンプシートを発行出来るのは信頼出来るシステムからに限定されている』という前提で信頼してタスクを実行します。

スタンプシートを消費して報酬を付与する際も同様で、誰が何の前提処理をして報酬を付与しているのかを、報酬を付与する側のマイクロサービスは知る必要がありません。

この信頼関係を前提として、各マイクロサービスはタスク・シートを処理することで、疎結合ながらも一貫したデータ更新が行えます。

スタンプシートの課題

スタンプシートは特性上、報酬は1つのマイクロサービスに対して行う必要があります。
そのため、複数のマイクロサービスに影響を与える報酬を同期的に処理することは出来ません。

GS2 では複数の報酬があるものに関しては GS2-JobQueue を使用したジョブを報酬毎に登録することで、結果整合で報酬が付与される仕組みで対応する予定です。

それでは、また。

【新サービス】ショップ機能を提供する GS2-Showcase を発表

みなさん、こんにちは。GS2 の丹羽です。

今日は近日公開予定の新サービス GS2-Showcase を発表します。
GS2-Showcase はいわゆるショップ機能を提供するものです。

これまで GS2-Money をご利用いただいている皆様の実装傾向を見ていると
初回のみ安く課金通貨が購入出来るような仕組みを提供されていることが多数見受けられました。
しかし、これまでの GS2-Money では全ての購入可能なの商品情報を応答するのみで、
そのような仕様には対応出来ておらず、おそらくゲーム側で商品情報をフィルタリングするなど苦労をおかけしていたと推察します。

GS2-Showcase はそのような課題を解決するためのサービスで、次のような特徴があります。

商品の公開時期を設定可能

商品を公開する時期を GS2-Schedule のイベントと連動させることが出来ます。

購入数量の制限を設定可能

商品は GS2-Limit と連動することで購入可能な回数を設定出来ます。

商品グループを設定可能

グループ内で優先度が高い順に購入可能かを判断し、購入可能な1つだけが商品として陳列される機能です。
初回半額で購入出来る商品を購入した場合に、通常価格の商品を表示するようにしたい。というような仕様に対応できます。

他のGS2サービスと連携可能

購入通貨として使用可能

  • GS2-Money(ストア決済)
  • GS2-Money(有償課金通貨)
  • GS2-Money(有償/無償課金通貨)
  • GS2-Gold

商品として陳列可能

  • GS2-Money(課金通貨)
  • GS2-Gold
  • GS2-Stamina
  • GS2-ConsumableItem

連携対象のサービスは今後も随時追加してきます。

それでは、また。

Startup Architecture of the year 2018 で オーディエンス賞 をいただきました #AWSSummit

みなさん、こんにちは。GS2の丹羽です。

f:id:kazutomo:20180604100426p:plain

先週末に開催されました、AWS Summit Tokyo 2018 で開催された Startup Architecture of the year 2018 でオーディエンス賞をいただきました。

f:id:kazutomo:20180604100826p:plain

このオーディエンス賞は AWS Summit 会期中に受付付近にファイナリストのアーキテクチャ図のパネルが設置されており、
来場者が「これはいい」と思ったアーキテクチャのシステムの横に設置された AWS IoT Button を押すことで投票出来る。というものでした。

Game Server Services は以下のパネルを設置していました。

f:id:kazutomo:20180604100922p:plain

来場者のみなさんに数多くの支持をいただいたことで、この賞を受賞出来たということで、ただただ感謝しかありません。
会場で GS2 に投票いただいた皆さんにお礼申し上げます。

今後も先進的な技術で、より便利なサービスを提供出来るよう頑張りますので、応援よろしくお願いします。

それでは、また。

【事例紹介】usaya株式会社 私、茄子で飛びます(私、猫で飛びます)

f:id:kazutomo:20180528152751p:plain

私、茄子で飛びます(私、猫で飛びます)について


--私、茄子で飛びます(私、猫で飛びます)のご紹介をお願いします

本作はシューティングライクなタップゲームです。
タップのみの簡単操作で敵を撃破することができるため誰でも遊ぶことが可能です。
撃破した時の爽快感、ちょっとおかしな世界観、魅力的なキャラクターなどをお楽しみ頂ければと思います。
またゲームの世界観をイメージしてオリジナルのBGMも作成しております。そちらも必聴です。


--なぜ、iOS版とAndroid版でタイトルが異なるのでしょうか?

f:id:kazutomo:20180528152813p:plain:w320 f:id:kazutomo:20180528152835p:plain:w320
Android iOS


iOSに関しては茄子が卑猥であるとAppleに指摘されてしまったためです。
お盆における茄子の精霊馬からの引用だったのですが、Appleはそういう認識を持っていないので余計卑猥に見えてしまったのでしょう。
以前、女子高生が大根を登るゲームを出した経験があり甘く見ていたのですが、そこは大きな誤算となってしまいました。

iOSが猫になった経緯としましては、指摘された後に色々試した結果猫に落ち着きました。
試した内容としましては、茄子の部分を白抜き、ただの白い四角、色々試したのですが結局駄目で、猫にしたら通りました。
その過程で直接Appleの方との電話交渉もしました。「総合的に見てエロと判断しました。」としか言われませんでした(笑)
他の開発者さんの参考になれば嬉しいです。


--レビューがとても好調ですが、本作のどのあたりが受け入れられたと思いますか?

システムに関してはタップタイタンなどのタップゲームを参考にしたのですが、今更タップゲームを再生産しても新鮮味が無いので、シューティングの要素を混ぜるなどをして今までとは異なるプレイ感覚を目指しました。

f:id:kazutomo:20180528153422p:plain

ただ、そのままシューティングにしてしまうと集中して遊ばないといけないため、長期間長く遊ぶタップゲームとの相性が悪い。なので、自機は固定、タップした位置に弾が飛ぶ、敵は移動していて当たり判定があるなど、タップゲームとシューティング双方の良さを上手く混ぜようとした点かと思います。

f:id:kazutomo:20180528153328p:plain

キャラクターデザインはpopman(@popman3580) さんにお願いしました。女子高生をとても生き生きと描かれていてコンセプトにピッタリだと思いました。
それと、popmanさんに関してはは、所謂ソーシャルゲーム風のテイストに染まっていない点がいいなと思いました(笑)ソーシャルゲーム風だと、その手のビジュアルのゲームは多いので埋もれてしまうリスクがとても大きいと思ったためです。その点で、引っかかるものはあったかと思います。

後は、iOSを茄子で出せなかった事に関する同情票があると思います(笑)

GS2について


--本作は おひとよしカメたろう に引き続き二作目のGS2採用タイトルですが、引き続きGS2を採用しようと思った理由は何ですか?

前作で採用・運用させて頂いた範囲ではとく大きな問題もなく、エンドユーザーに課金サービスを提供し続けることができた実績があったためです。
導入のしやすさもありましたが、課金サービスを安定して提供できるという点が主になります。


--usayaさんはもともと広告収入によるマネタイズを中心にされており、カメたろうから課金通貨によるマネタイズを始められましたが、課金通貨をゲームに導入するにあたって気をつけなければならないことはありますか?

当たり前のことですが、課金通貨を導入しても、遊んでいただけるユーザーさんの多くは課金をしない方々です。
そのため、課金通貨を利用しなくてもプレイを継続してもらえるゲームシステムであるべきであることは変わりないと考えております。
なので、課金通貨はそれと別軸で+αのメリットが得られるような作りが理想です。

課金ユーザーに寄りすぎず、でも課金すると恩恵がある形を気をつけております。
本作におきましても、レビューでたまに「課金ユーザー向けだ」と低評価をされてしまうことがあります。
どこか割り切ってしまわないといけないラインはあるとか思いますが、試行錯誤し続けなくてはならないポイントです。


--GS2の利用料金について、料金計算が従量課金なので不安があるという開発者の声があります。既にカメたろうから1年近くご利用いただいているusayaさんからGS2の利用料金についてなにかコメントいただけますか?

確かに、ダウンロード単価が低いアプリで導入しても、たとえダウンロードが増えたとしてもGS2の利用料金もそれに伴って上昇するため、費用的にメリットが生まれにくいです。
ただ、ダウンロード単価を上げる目的でサーバーサイドも利用した機能を提供するのであれば、自前でサーバー運用コストがかからない点を考慮すれば費用的には問題ない費用だと感じております。


usaya さん。ありがとうございました。
GS2の採用をご検討いただく際に参考にしていただければと思います。

Game Server Services は現在アカウント登録していただいた皆様に 30,000円分のクーポン(有効期限: 登録日から3ヶ月間)をプレゼントしています。
この機会にお試しください。
gs2.io

play.google.com

私、猫で飛びます。

私、猫で飛びます。

  • USAYA Co., Ltd.
  • ゲーム
  • 無料

Startup Architecture of the year 2018 ファイナリストに選出されました

みなさん、こんにちは。GS2 の丹羽です。

aws.amazon.com

5月30日から6月1日にかけて実施される AWS Summit の最終セッションとして6月1日17時より開催される
Startup Architecture of the year 2018 にて ファイナリスト に選出されました。

このアワードは名前の通り、スタートアップの提供するサービスのシステムアーキテクチャに関して、最も優れたシステムを賞するイベントです。
Game Server Services はフルサーバレスアーキテクチャで実装されている点が、システムアーキテクチャにおいて他とは異なる特徴であることは疑う余地もありません。

様々な講演を通じて、フルサーバレスアーキテクチャの優位性について伝えてきましたが、
本セッションでもフルサーバレスアーキテクチャの優位性について非常に短い時間でピッチする予定です。

GS2 以外のファイナリストの皆さんは以下のようです。

  • コネヒト株式会社 開発部 エンジニア 永井 勝一郎 氏
  • GVA TECH株式会社 CTO 本田 勝寛 氏
  • 株式会社スナックミー CTO 三好 隼人 氏
  • ピクシブ株式会社 コミック事業部 Palcyチーム アーキテクト 石川 勇太 氏
  • 株式会社MESON COO 小林 佑樹 氏
  • 調整中

【5/18時点のエントリーに基づく。50音順】

みなさん素晴らしい会社ばかりですが、なんとか賞をもって帰りたいと思います。

セッション以外にも AWS Summit の「飛天」会場に設置するスタートアップのための特設展示エリア「Startup Square」でパネル展示が行われる予定で、
そこで AWS Summit 参加者の皆さんによる投票が出来るようになるとのことですので、もし参加予定がある場合は是非投票をお願いします。

それでは、また。

(C) Game Server Services, Inc.