Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Game Server Services ではじめる サーバ開発運用しないゲーム開発
Search
Kazutomo Niwa
July 12, 2019
Technology
1
7.3k
Game Server Services ではじめる サーバ開発運用しないゲーム開発
https://gs2.io
Kazutomo Niwa
July 12, 2019
Tweet
Share
More Decks by Kazutomo Niwa
See All by Kazutomo Niwa
Amazon Event Bridge による次世代の Pub/Sub
kazutomo
0
1.9k
DynamoDB のインデックス再編事例
kazutomo
2
780
Production-ready Amazon Event Bridge
kazutomo
2
970
もうそこまで迫っている! Cloud2.0 時代の開発
kazutomo
3
1.7k
Cloud2.0時代のゲーム開発を支えるGS2
kazutomo
1
2k
Unityネットワーク完全に理解した.pdf
kazutomo
3
3.1k
サーバレスアプリケーションの監視・運用
kazutomo
13
6.4k
ゼロからサーバレスの先頭に追いつこう
kazutomo
25
12k
サーバレスアーキテクチャ入門
kazutomo
16
6.1k
Other Decks in Technology
See All in Technology
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
140
形式手法の 10 メートル手前 #kernelvm / Kernel VM Study Hokuriku Part 7
ytaka23
5
830
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
460
データ活用促進のためのデータ分析基盤の進化
takumakouno
2
810
マイベストのデータ基盤の現在と未来 / mybest-data-infra-asis-tobe
mybestinc
2
2k
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
380
인디 앱 개발자와 Flutter
tinyjin
0
160
The Role of Developer Relations in AI Product Success.
giftojabu1
0
110
ドメイン名の終活について - JPAAWG 7th -
mikit
32
19k
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
420
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
Windows Autopilot Deployment by OSD Guy
tamaiyutaro
0
390
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
KATA
mclloyd
29
14k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Faster Mobile Websites
deanohume
305
30k
Code Reviewing Like a Champion
maltzj
520
39k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Navigating Team Friction
lara
183
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Transcript
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のインフラは提供される
ゼロスケール 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 GS2 が提供する機能をそのまま利⽤する。
⽤例A アカウント管理
⽤例A SDKが提供するAPIを呼び出すだけで実装できて、すぐにゲーム に導⼊可能。
⽤例B GS2 が提供する様々な機能を連携させて利⽤する。
⽤例B ゲーム内ストア イベント期間1回だけ 買える商品 イベント スケジュール管理 商品販売期間 回数制限管理 商品購⼊回数 所持品管理
買った商品 課⾦通貨管理 所持してる通貨量
⽤例B 複雑な仕様を実現しようと思うと必要となるパターン。 GS2 ではこのパターンでの利⽤を前提に設計しており、多くの 場合は設定項⽬で連携するサービスのID※を指定するだけで連携 できる様になっている。 ※ イベントスケジュールのイベントID ストアに陳列した商品を購⼊するために必要なアイテムID 購⼊したら⼿に⼊るアイテムのID
⽤例C 全く新しい仕組みを作り出す。
⽤例C クエスト管理 1⽇1回だけ 進⾏できるクエスト 回数制限管理 今⽇の クエスト進⾏回数 所持品管理 プレイヤーの所持品 イベント
スケジュール管理 公開中のログボ サーバスクリプト クエストの終端に 来たら進⾏状況を リセット ログインボーナスシステム
⽤例C GS2 が提供するコンポーネントを組み合わせることで、全く新 しいゲームサーバシステムが⽣まれます。
GS2 の提供するサービスの紹介
アカウント管理 データの引き継ぎに対応 ID/パスワード ソーシャルアカウント ⾃社でアカウント管理の仕組みがある場合は使わなくても他の GS2の機能を利⽤可能
課⾦通貨管理 資⾦決済法の前払式⽀払⼿段(⾃家型)に対応 通貨の単価ごとに数量を管理 未使⽤残⾼が⾃動計算 ⼆次通貨の管理にも対応
経験値・ランク管理 ランクアップテーブルを登録するとランクを⾃動計算 単純なレベルだけでなく経験を積み上げてランクをあげる仕組 み全般で使⽤可能 信頼度 クエストを3回クリアするとスキップチケットが使えるようになる クリア回数を経験値とする ランク2になるとスキップチケットが使える
プレゼントボックス 事前登録ボーナスを届ける お詫びの品を届ける 所持品管理サービスやスタミナ管理サービスと連携すれば溢れ たリソースを⾃動的にプレゼントボックスに届けることが可能
所持品管理 消費型アイテム ガチャチケット、スタミナドリンク 資産 キャラクター、ゲーム内通過 素材 強化素材、進化素材 : 様々なものを所持品として管理 所持品枠の拡張機能あり
回数制限管理 ⾏動回数のカウンター 商品の購⼊回数 クエストの挑戦回数 ガチャの抽選回数 リセット間隔を設定可能 毎⽇X時 毎週X曜⽇ X時 毎⽉X⽇
X時 リセットしない
抽選処理 排出確率テーブルを設定するだけで利⽤可能 重みベースの確率設定 アイテムA(重み1), アイテムB(重み3)に設定すると アイテムA(25%), アイテムB(75%)と処理される 排出コンテンツに排出確率テーブルを指定可能 1段⽬ SSR/SR/R
のようなレアリティ抽選 2段⽬ 各レアリティのコンテンツを抽選
クエスト管理 進⾏管理・前提クエストのクリア判定などに対応 パーティメンバーに特定キャラが編成されているか? スクリプトによる判定処理の拡張で対応可能 クエストの報酬を抽選可能 レアモンスターの出現判定 クエスト開始時に乱数シードと⼊⼿可能なコンテンツの最⼤量 クエスト終了時に実際に⼊⼿したコンテンツの数量を報告
ミッション管理 実績(トロフィー)に相当する機能 クエストのクリア報酬などでミッションのカウンターを操作 カウンターが閾値を超えたときにミッション達成 カウンターには「デイリー」「ウィークリー」といったスコー プを設定可能 ミッション達成時にサーバからプッシュ通知 ミッションの報酬受取、カウンターの操作に期間を設定可能
イベントスケジュール管理 ゲーム内イベントの管理 絶対期間・相対期間のイベントに対応 相対期間の場合は開始トリガーを引く必要あり ログイン時のパラメータで時間のオフセットを指定できる QA担当は1⽇進んだ状態でプレイできる
ゲーム内ストア管理 現⾦で課⾦通貨 / 現⾦で相対期間イベントのトリガー 課⾦通貨でガチャ / 課⾦通貨で所持品枠の拡張 ゲーム内通貨で進化素材 / ゲーム内通貨でスタミナ
様々なリソースを IN/OUT に指定可能 販売期間の設定が可能 複数商品をグルーピング。購⼊条件を満たす最初の商品が陳列 ステップガチャ、購⼊するたび売価が⾼くなる商品
スタミナ管理 時間経過で回復するスタミナ値の管理 ⼆段階の上限値を設定可能 50/100 の状態で 100回復アイテムを使うと 150/100 になる その場合でも 999/100
を上限とする 999 を超えるとプレゼントボックス送り 回復間隔・回復量・最⼤値 は経験値ランク管理と連携可能 建築系ゲームの資源回収にも応⽤可能
マッチメイキング 属性値の範囲で条件を設定 ゲームモード、レーティング、地域など ロールで条件を設定 盾役1、回復役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回増やす 済 済
チート対策 GS2 内のリソースの増加は基本的にこのスタンプシートを通し て⾏います。 対価を払わなければ報酬がもらえない仕組みによって不正⾏為を ⾏えなくします。 報酬:課⾦通貨 1,000 個を⼊⼿する件 対価:
100円⽀払う 対価: 購⼊回数を 1回増やす まだスタンプ揃ってないけど、 持っていくぜ これでは報酬は払えませんな
チート対策 スタンプシートには改ざん検出機能があり、不正にスタンプシー トを改ざんしても報酬は払い出されません。 対価: 100円⽀払う 対価: 購⼊回数を 1回増やす 済 済
内容を書き換えたろ 報酬:課⾦通貨 1,,000 個を⼊⼿する件 改ざんされてますな これでは報酬は払えませんな 報酬:課⾦通貨 1,000,000,000,000,000 個を⼊⼿する件
チート対策 対価を改ざんした場合も同様に、スタンプを押してもらえません。 対価: 1円⽀払う 対価: 購⼊回数を 1回増やす えーい。なら対価を変えてやる 報酬:課⾦通貨 1,000
個を⼊⼿する件 改ざんされてます これではスタンプは押せません
GS2 のマスターデータ管理
マスターデータ管理 サービスごとにJSON形式でマスターデータ管理 ゲーム内ストアは 購⼊に必要なリソースのIDと数量 そして、⼊ ⼿できるリソースのIDと数量 を設定。 リソースが何者かはしらない。 リソースのマスターデータは所持品管理のサービスなどに設定。 GS2の管理画⾯で登録してエクスポートもできるが、独⾃のツー
ルで定められた形式のJSONファイルを出⼒してもOK。
もちろん Excel でも Excel のマクロを使⽤して JSON 形式で出⼒すれば、Excel ベー スのマスターデータ管理も可能。
GS2 を利⽤した開発・運営の流れ
GS2-Deploy GS2 を利⽤した開発・運営をサポートするのが GS2-Deploy で す。 GS2-Deploy はGS2内で作成したいリソースを宣⾔的に記述する ことで、⾃動的に作成・更新・削除してくれる機能です。 この宣⾔ファイルのことをテンプレートと呼びます。
⾃動的に環境を作成 テンプレートを GS2-Deploy にアップロードすると、⾃動的に 必要となるリソース(サーバの設定)が作成されます。 この機能は開発環境と製品環境で内容を揃えるときに活⽤できま す。 開発期間も、テンプレートさえ共有していれば、開発者ごとに別 の環境を利⽤することができます。 テンプレートは
YAML形式のテキストファイルなので Git で管 理できます。
環境の削除 アップロードしたテンプレートを削除するだけで、その定義に よって作成されたリソースがまとめて削除されます。
GS2-Deploy を使ったイベント運営 テンプレートはアカウントに対して1つではなく、複数定義する ことができます。 ゲームを構成する基本的なテンプレートとは別にイベント開催⽤ のテンプレートを作成し、イベントが終わったらテンプレートを 削除することでイベント関連のリソースをまとめて削除できます。 復刻イベントを開催するときも過去のテンプレートを使えばすぐ に復刻できます。
カスタマーサポート サポート業務に即した管理画⾯を⽤意したい場合があります。 GS2-SDK を使うと独⾃の管理画⾯を作成できます。 GS2の提供する管理画⾯もSDKを使⽤して開発されています。
ロードマップ
第⼆世代GS2 を来週⽕曜⽇公開 現在サービス中の第⼀世代GS2から更に発展した第⼆世代GS2が 今⽉β公開されます。(本公演の内容は第⼆世代の内容) β期間は提供されているすべての機能を無料で試していただくこ とができます。 フィードバックも受け付け、フィードバックいただいた内容は正 式サービス開始までに優先度をつけて対応していきます。
年内正式サービス開始 年内に正式サービスを開始します。 正式サービス開始で変わること - 99.99% のSLA - ⽇本リージョン以外に北⽶・欧州リージョンの提供開始 - 利⽤料が発⽣
- 毎⽉2万円まで無料 (APIリクエスト100万回相当)
新発表 Cloud Weave
Cloud Weave Cloud Weave はGS2-Deployのテンプレートリポジトリです。 Unity Editor をはじめとした ゲームエンジンのIDE上のボタン ⼀つで
GS2-Deploy にアップロードし反映できます。 GS2-Deploy Cloud Weave テンプレート テンプレート 検索/選択 アップロード
機能特化の管理画⾯ テンプレートが提供する機能の視点でわかりやすい管理画⾯も含 むことで、より開発体験を良くしていきます。 ログインボーナスをインストール ログインボーナス管理 1⽇⽬の報酬 2⽇⽬の報酬 : 1⽇⽬の報酬は何にしようかな
最後に
会場にブースを出しています 詳しい説明を聞いてみたい!という場合はお⽴ち寄りください。 - ⼤阪会場 18 - 東京会場 26 Webサイトのお問い合わせページからも随時承っています。 https://gs2.io/
Good-bye, dedicated servers. https://gs2.io/