314 Views
September 25, 19
スライド概要
2019/9/25-6に開催されたUnite Tokyo 2019の講演スライドです。
丹羽 一智(Game Server Services 株式会社)
こんな人におすすめ
・ゲームプロデューサー
・ディレクター
・クライアントプログラマ
受講者が得られる知見
・ゲーム開発の効率化
・BaaSを使ったゲーム開発手法
Unityのイベント資料はこちらから:
https://www.slideshare.net/UnityTechnologiesJapan/clipboards
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
Game Server Services ではじめる サーバ開発運⽤しないゲーム開発
⾃⼰紹介 代表取締役社⻑CEO 丹⽻ ⼀智 新卒で株式会社セガに⼊社、携帯電話向けのゲームおよびサーバ開発業 務に従事。約3年勤める 任天堂株式会社に⼊社、ニンテンドー3DSのOS開発や、ゲームサーバの 開発・運⽤。Nintendo Switchのサーバシステム設計などに従事。約7年 間勤める 2016年9⽉ Game Server Services 株式会社を設⽴
会社概要 事業内容 ゲームサーバを、初期費⽤・運⽤費⽤など⼀切かからず、サーバアクセ ス1回あたり 0.02円 で使⽤出来るクラウドサービス。 パズドラ / モンスト のようなゲームをサーバ開発 / 運⽤ することなく リリース出来る。 代表的なゲーム関連企業の株主 DeNA KLab Venture Partners ワンダープラネット
なぜ GS2 が必要か
コードを書くことには責任が伴う コードを書くことで責任が発⽣する バグがないか? 脆弱性がないか? スケールするか?
ゲーム開発者の負うべき責任 ゲームを⾯⽩く ゲームを遊べる状態を維持
構築から利⽤へ ゲームのコアバリューに関係のないものは責任を負って構築する のではなく、責任を他者に転嫁して利⽤するようにしましょう。 ゲームサーバの多くの要素は“当たり前に存在するもの”であり、 ⽌まって怒られることはあれど、新たな価値を⽣み出しません。
今のゲームサーバに⾜りないもの 汎⽤ゲームエンジンはゲーム開発 シーンで過去10年で最もイノベー ティブな存在でした。 開発効率を向上させ、ゲーム開発 の敷居を⼤幅に引き下げました。 ゲームサーバの分野には開発環境 の改善が不⾜しています。
GS2 が提供する価値
サーバダウンの恐怖から解放 GS2は AWS と GCP のハイブリッドクラウドで提供します。 秒間10万アクセスを超える負荷テストを実施しそれ以上のアク セスを受け⼊れられることを確認しました。 これはローンチ時に未曾有のアクセスが発⽣し、1,000台以上の サーバーを⽤意したというSINoALICEのピーク時のアクセスの2 倍以上※です。 ※ CEDEC 2018 公演より
先⾏投資なし GS2 は初期費⽤無しで採⽤できます。 従来はゲームサーバの初期開発には開発リソースが必要で、外部 委託する場合は数百〜数千万円の初期投資が必要でした。 これらのコストはゲームを⾯⽩くするための開発に活⽤できます。
運⽤費なし 通常、サーバの保守運⽤費として継続的に費⽤が発⽣します。 GS2は利⽤料⾦に運⽤費が含まれるため、追加の費⽤は発⽣しま せん。 GS2はフルサーバレスアーキテクチャを採⽤。 AWS スタートアップ アーキテクチャオブ・ザ・イヤー受賞 GS2の責任で動作しているサーバは1台もない アプリケーションコードより下のサーバに関する全ての責任は AWS/GCPが負っている 世界で最も優れた監視運⽤体制でGS2のインフラは提供される
サーバ障害からの解放 フルサーバレスアーキテクチャを構成するAWSがGCPが提供し ているフルマネージドサービスの障害発⽣時のフェイルオーバー はAWSやGCPの責任で⾏われます。 先⽇AWS東京リージョンでアベイラビリティゾーンレベルの障 害が発⽣しましたが、AWSによってフェイルオーバーが⾏われ ていたため、GS2のサービス提供には何の影響もありませんでし た。
ゼロスケール GS2 はサーバのAPI呼び出し回数など利⽤状況に応じて料⾦が計 算されます。 GS2は⼤量のアクセスを捌くためのスケーリングは当然ながら、 ゲームサーバーを使⽤していないときには⼀切費⽤が発⽣ないゼ ロスケールまでをサービスとして提供します。
ゲームのニーズに合わせてカスタマイズ GS2では、アカウント新規登録時、レベルアップ時、クエストク リア時など様々なイベントをトリガーとしてサーバサイドでスク リプトを実⾏できます。 この仕組みを使うことでゲームの特徴にあわせてゲームサーバー の動作を⾃由に拡張できます。
クロスプラットフォーム対応 ⾃宅ではコンソール機。外出先ではスマートデバイス。会社の昼 休みにはブラウザ。 ライフサイクルに適したデバイスで同じゲームを楽しめるように することで、プレイヤーにとってゲームはより⾝近な存在に。 GS2 は様々なプラットフォームから利⽤できるだけでなく、プ ラットフォームを跨いだ通信も可能。
様々な⾔語向けSDKを提供 ゲームエンジン向けSDKを提供。 Unity, Unreal Engine4, cocos-2dx ゲーム内から利⽤するだけでなく独⾃の管理ツールを作りたい場 合は。各⾔語向けSDKも。 Java, PHP, Python, Ruby, Node.js(JavaScript), C#, C++
GS2 の概念
わかりやすいAPI Unity のゲームにアカウント機能を導⼊する場合は7種類のAPI を意識するだけでOK! Gs2Account.Create() アカウントの新規作成 ‒ ユーザID/パスワードを発⾏ Gs2Account.Authentication() ユーザID/パスワードでアカウントを認証 Gs2Account.AddTakeOverSetting() データ引き継ぎ⽤ ID/パスワード を登録 Gs2Account.ListTakeOverSettings() データ引き継ぎ⽤ ID/パスワード の⼀覧を取得 Gs2Account.UpdateTakeOverSetting() データ引き継ぎ⽤ ID/パスワード を更新 Gs2Account.DeleteTakeOverSetting() データ引き継ぎ⽤ ID/パスワード を削除 Gs2Account.DoTakeOver() データ引き継ぎ⽤を実⾏
わかりやすいAPI 管理⽤のAPI も提供。ゲーム向けAPIキーでは使⽤できないよう に設定可能。 管理⽤APIの例(⼀部) Gs2Account.DescribeAccounts() Gs2Account.DeleteAccount() Gs2Account.DescribeTakeOversByUserId() 存在するアカウントの⼀覧取得 アカウントの削除 ユーザIDを指定して引き継ぎ情報⼀覧取得
⽤例A アカウント管理
⽤例B ゲーム内ストア イベント スケジュール管理 イベント期間1回だけ 買える商品 商品販売期間 課⾦通貨管理 回数制限管理 所持してる通貨量 商品購⼊回数 所持品管理 買った商品
⽤例C サーバスクリプト クエスト管理 1⽇1回だけ 進⾏できるクエスト クエストの終端に 来たら進⾏状況を リセット 回数制限管理 所持品管理 ログインボーナスシステム プレイヤーの所持品 イベント スケジュール管理 公開中のログボ 今⽇の クエスト進⾏回数
必要な機能を組み合わせて実装 アカウント管理 引き継ぎ 経験値・ランク管理 レベルキャップ・ユニットごとのキャップ引き上げ プレゼントボックス リソース⼊⼿時にあふれたリソースの保管 所持品管理 所持品枠の拡張・スタック上限・複数スタック作成可能か 回数制限管理 リセット間隔を「毎⽇」「毎週」「毎⽉」「なし」で設定
必要な機能を組み合わせて実装 抽選処理 重みベースの確⽴設定(1:3=25%:75%)。複数段抽選 マッチメイキング 時間経過で条件を緩和。役割ベース 課⾦通貨管理 資⾦決済法対応。⼆次通貨にも対応。 クエスト管理 進⾏管理・クリア報酬の抽選
必要な機能を組み合わせて実装 リアルタイム対戦 100⼈対戦・カスタムサーバロジックに対応 ミッション管理 同⼀カウンターを複数スコープで参照可能 イベントスケジュール管理 絶対期間・相対期間に対応。⼀部アカウントで時間をずらせる ゲーム内ストア管理 あらゆるリソースを対価・報酬に設定可能 スタミナ管理 2段階の上限値。回復量・回復間隔・最⼤値をレベルと連携
必要な機能を組み合わせて実装 編成管理 パーティや装備枠 テキストチャット テキストベースのコミュニケーション フレンド管理 フレンド・フォロー。各1万⼈ バージョン管理 リジェクト・バージョンアップを促す2段階の閾値
GS2 のサービス連携と不正対策の仕組み
スタンプシート GS2 内のサービス間を連携させる仕組みとして、スタンプシー トシステムを提供。 スタンプシートシステムは、稟議のようなもの。
対価と報酬 スタンプシートには対価と報酬が設定されています。 たとえば、1回だけ100円で買える1,000個の課⾦通貨を購⼊する としましょう。 その場合のスタンプシートは以下のようになります。 報酬:課⾦通貨 1,000 個を⼊⼿する件 対価: 100円⽀払う 対価: 購⼊回数を 1回増やす
対価を払うとスタンプがもらえる GS2-Money に スタンプシートと、AppStore や PlayStore で購 ⼊したときに発⾏されるレシートを持っていきます。 すると、GS2-Money はレシートを検証して、スタンプシートに スタンプを押してくれます。 報酬:課⾦通貨 1,000 個を⼊⼿する件 済 対価: 100円⽀払う 対価: 購⼊回数を 1回増やす
対価を払うとスタンプがもらえる 続けて、回数制限サービスにスタンプシートを持っていって、購 ⼊回数のカウンターを増やしてもらい、スタンプをもらいます。 報酬:課⾦通貨 1,000 個を⼊⼿する件 済 対価: 100円⽀払う 対価: 購⼊回数を 1回増やす 済
すべてのスタンプが揃ったら すべてのスタンプが揃ったら報酬を受け取りに⾏きます。 報酬を受け取るとスタンプシートは⼆度と使えないよう破棄され ます。 報酬:課⾦通貨 1,000 個を⼊⼿する件 済 対価: 100円⽀払う 対価: 購⼊回数を 1回増やす 済
チート対策 GS2 内のリソースの増加は基本的にこのスタンプシートを通し て⾏います。 対価を払わなければ報酬がもらえない仕組みによって不正⾏為を ⾏えなくします。 まだスタンプ揃ってないけど、 報酬:課⾦通貨 1,000 個を⼊⼿する件 持っていくぜ 対価: 対価: 購⼊回数を 100円⽀払う これでは報酬は払えませんな 1回増やす
チート対策 スタンプシートには改ざん検出機能があり、不正にスタンプシー トを改ざんしても報酬は払い出されません。 報酬:課⾦通貨 1,000,000,000,000,000 1,,000 個を⼊⼿する件 個を⼊⼿する件 済 対価: 100円⽀払う 内容を書き換えたろ 対価: 購⼊回数を 1回増やす 改ざんされてますな これでは報酬は払えませんな 済
チート対策 対価を改ざんした場合も同様に、スタンプを押してもらえません。 えーい。なら対価を変えてやる 報酬:課⾦通貨 1,000 個を⼊⼿する件 対価: 1円⽀払う 対価: 購⼊回数を 1回増やす 改ざんされてます これではスタンプは押せません
GS2 のマスターデータ管理
マスターデータ管理 サービスごとにJSON形式でマスターデータ管理 ゲーム内ストアは 購⼊に必要なリソースのIDと数量 そして、⼊ ⼿できるリソースのIDと数量 を設定。 リソースが何者かはしらない。 リソースのマスターデータは所持品管理のサービスなどに設定。 GS2の管理画⾯で登録してエクスポートもできるが、独⾃のツー ルで定められた形式のJSONファイルを出⼒してもOK。
もちろん Excel でも Excel のマクロを使⽤して JSON 形式で出⼒すれば、Excel ベー スのマスターデータ管理も可能。
GitHub と連携すればさらにハッピー GS2 ではスクリプトやマスターデータをアップロードする際に GitHub のリポジトリ・ファイルパス・コミットハッシュ(タグ) を指定してアップロードする機能があります。 この機能を活⽤すればロールバックなどもより安全に実⾏できま す。
GS2 を利⽤した開発・運営の流れ
GS2-Deploy GS2 を利⽤した開発・運営をサポートするのが GS2-Deploy で す。 GS2-Deploy はGS2内で作成したいリソースを宣⾔的に記述する ことで、⾃動的に作成・更新・削除してくれる機能です。 この宣⾔ファイルのことをテンプレートと呼びます。
環境の複製が容易に 開発環境と製品環境で内容を揃えるときに活⽤。 開発期間も、テンプレートさえ共有していれば、開発者ごとに別 の環境を利⽤することができます。 テンプレートは YAML形式のテキストファイルなので Git で管 理できます。
GS2-Deploy を使ったイベント運営 テンプレートはアカウントに対して1つではなく、複数定義する ことができます。 ゲームを構成する基本的なテンプレートとは別にイベント開催⽤ のテンプレートを作成し、イベントが終わったらテンプレートを 削除することでイベント関連のリソースをまとめて削除できます。 復刻イベントを開催するときも過去のテンプレートを使えばすぐ に復刻できます。
データ分析 GS2 のログは⾃由にアクセス可能。 1. GS2 にすべてを任せる • DAUや課⾦額のチャートなど標準的なアナリティクス • チャットログの検索など⼀般的な検索処理 2. ⾃分たちの BigQuery でログを受け取る • ⾃由なアナリティクス
GDPR GDPR にも対応。 • ユーザIDに紐づくすべての情報を取得する • ユーザIDに紐づくすべての情報を削除する BigQuery に配送したログなど、外部に持ち出したデータは利⽤ 者の責任で削除する必要あり
サンプルリポジトリ github.com/gs2io/gs2-sample
アカウント登録・ログイン GS2 のアカウント機能を利⽤し、登 録・ログインを実現するサンプル
アカウントのロード ローカルストレージに登録されてい るアカウントをロードします。 ロードに成功したかどうかで分岐し ます。 失敗 成功
アカウントの作成 アカウントの作成通信処理を実⾏し、 成功したかどうかで分岐 サンプルでは『アカウントを作成し ます』という確認画⾯を表⽰してい るが、不要であればこのステートを 削除してもらえばいい 失敗 成功
アカウントの作成 失敗 成功
アカウントのセーブ 作成されたアカウント情報をローカ ルストレージに保存 保存に成功したかで分岐 失敗 成功
ログインメニュー ログインするか、ローカルストレー ジに作成されたアカウントを削除す るかを選択するメニュー画⾯ メニュー画⾯が不要であれば、この ステートを削除すればいい 削除 ログイン
ログイン ログイン通信処理を実⾏し、成功し たかどうかで分岐 失敗 成功
改変・商⽤利⽤フリー サンプルコードは⾃由に改変してゲームに組み込んでいただけ ます。開発の効率化にご活⽤ください。 https://github.com/gs2io/gs2-sample
Cloud Weave
Cloud Weave Cloud Weave はGS2-Deployのテンプレートリポジトリです。 Unity Editor をはじめとした ゲームエンジンのIDE上のボタン ⼀つで GS2-Deploy にアップロードし反映できます。 Cloud Weave 検索/選択 テンプレート GS2-Deploy アップロード テンプレート
機能特化の管理画⾯ テンプレートが提供する機能の視点でわかりやすい管理画⾯も含 むことで、より開発体験を良くしていきます。 ログインボーナスをインストール ログインボーナス管理 1⽇⽬の報酬 2⽇⽬の報酬 : 1⽇⽬の報酬は何にしようかな
ロードマップ
ベータ提供中 現在GS2はベータ提供中です。 すべての機能を無料で試していただくことができます。 フィードバックも受け付け、フィードバックいただいた内容は正 式サービス開始までに優先度をつけて対応していきます。
年内正式サービス開始 年内に正式サービスを開始します。 正式サービス開始で変わること - 99.99% のSLA - 北⽶・欧州・東南アジア リージョンの提供開始 - 利⽤料が発⽣ - 毎⽉APIコール1万回までの無料プラン - 毎⽉APIコール10万回までの⽉額1,000円プラン - 制限なし従量課⾦プラン - 毎⽉2万円まで無料 (APIリクエスト100万回相当)
GS2 プロフェッショナルサービス
GS2 プロフェッショナルサービス GS2のスタッフがプロジェクトの企画書や仕様書をもとにサーバ サイドの設計をします。 費⽤はゲームの規模や資料の詳細さによって変動。 GS2プロフェッショナルサービスでかかった費⽤分、毎⽉のGS2 のサービス利⽤料を50%引きをして還元。 実質無料で開発を⽀援します
お気軽にご相談ください 会場にブースも展⽰しています。詳しい説明を聞いてみたい!と いう場合はお⽴ち寄りください。
Good-bye, dedicated servers. https://gs2.io/