GS2 Blog

https://gs2.hatenablog.com/

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

フィード

記事のアイキャッチ画像
リソースレベルのアクセス制御ができるようになりました
GS2 Blog
はじめに GS2-Identifier は GS2 のAPI呼び出しのための権限管理をするためのサービスです。 プロジェクトに対して複数のクレデンシャル(APIキー)を発行でき、それぞれに呼び出し可能なAPI権限を設定できます。 機能追加の背景 これまでは、呼び出し可能なAPIの種類のみが制御可能でした。 今回のアップデートでは、そこから更にリソース単位でのアクセス制御が可能となりました。例えば、クレデンシャルAは 「GS2-Account でアカウントを作成する権限がある」 というような設定しかできなかったのが 「GS2-Account のネームスペース1 にアカウントを作成する権限がある」…
16日前
記事のアイキャッチ画像
GS2-Account の認証時のスクリプトに前回ログインからの経過時間が渡るようになりました
GS2 Blog
はじめに GS2-Account はゲームが必要とする認証機能を提供するサービスです。 機能追加の背景 「久しぶりゲームを再開してくれたプレイヤーにカムバックボーナスを付与したい」というようなニーズがあります。 このようなニーズを満たすために認証時のスクリプトに前回ログインからの経過時間を渡すようにし、スクリプトから GS2-Schedule のカムバック用のイベントを開始状態にすることで、カムバック時にのみ得られる報酬を設定できます。 追加された機能の詳細 namespace = args.namespace account = args.account elapsedHours = arg…
20日前
記事のアイキャッチ画像
GS2の各種パラメーターに補正値を適用する GS2-Buff が公開されました
GS2 Blog
はじめに GS2 はさまざまなマスターデータやユーザーデータを取り扱います。 イベントやサブスクリプションの特典として、各種パラメーターに補正値を適用したいことがあります。例えば、イベント期間中は「スタミナ消費量半減」「クエスト報酬2倍」「スタミナ最大値2倍」というようなことです。 新サービス追加の背景 これまではこのような補正値を適用する手段がなく、マスターデータをイベント期間のみ差し替えるような対応が必要でした。 しかし、マスターデータの更新は予約することができないため、メンテナンス期間をとってメンテナンスとしてマスターデータの更新作業を行うようなオペレーションが必要でした。 新サービスの…
20日前
記事のアイキャッチ画像
GS2-Inventory の巨大インベントリのアイテム入手・消費時のスクリプトを実装できるようになりました
GS2 Blog
はじめに GS2-Inventory はアイテムの所持数量を管理するマイクロサービスです。 なかでも巨大インベントリは 64bit整数値 の範囲を超えるアイテムの所持数量を管理するマイクロサービスです。クッキークリッカーを代表するインフレ系ゲームのようなゲームでクッキーの所持数量を管理するために利用できます。 今回の更新で解消された課題 これまで巨大インベントリのアイテム入手・消費時のスクリプトは設定できませんでした。 追加された機能の詳細 新しく巨大インベントリのアイテム入手・消費時のスクリプトを設定できるようになりました。 スクリプトの戻り値では、処理を継続するかに加えて、入手量・消費量の…
2ヶ月前
記事のアイキャッチ画像
GS2-Quest でクエスト失敗時の報酬量調整が可能となりました
GS2 Blog
はじめに GS2-Quest はインゲームの挑戦料・報酬・クリア状況を管理するためのマイクロサービスです。 今回の更新で解消された課題 GS2-Quest はクエストごとに報酬として「クリア時に得られる報酬」「初めてクリアした時に得られる報酬」「失敗した時に得られる報酬」の3種類を設定できます。一番直感から外れるのが今回改善が行われた「失敗した時に得られる報酬」でしょう。 元々、クエストに失敗した場合に開始時に消費したスタミナを返却するような用途を想定して機能を実装していました。クリア時の報酬はインゲームで宝箱を開け損ねたりした時のためにマスターデータに定義するのは入手可能な最大量で、クエスト…
2ヶ月前
記事のアイキャッチ画像
GS2-Exchange の非同期交換に待機時間の部分スキップ機能が追加されました
GS2 Blog
はじめに GS2-Exchange はなんらかの対価としてプレイヤーが所持するリソースを消費して、何らかのリソースを入手するための交換処理を実装するためのマイクロサービスです。GS2-Exchange の交換には即時交換と、非同期交換の2モードが存在し非同期交換モードでは交換APIを呼び出してから現実時間で一定時間経過後にリソースの入手が行えます。 遠征や合成などゲーム内にリアル時間の経過を求める機能を実装するために活用できます。 これまで有していた課題 交換の待機時間を短縮する仕組み自体はありましたが、即座に受け取り可能とするもののみで「4時間の待機時間のうち2時間を短縮する」「待機時間の5…
2ヶ月前
記事のアイキャッチ画像
時刻補正が可能なAPIの種類が追加されました
GS2 Blog
はじめに 運営型のゲームにおいてイベントのような時刻に関わる処理は重要な要素です。 プロジェクトによってはQAのためにメンテナンスモードにしてプレイヤーを追い出し、サーバーの時刻設定を変更して動作確認するという話すら聞いたことがあり、時刻が関わる処理はデバッグやQAがしづらいという問題があります。GS2ではこのような問題を解決するために、アクセストークン発行時に時刻のオフセットを指定できるようにしています。 そのため、QAスタッフは1週間進んだタイムゾーンで動作確認できたり、ユニットテストですぐさま1時間後のアクセスとしてAPIを呼び出すようなことができるようになっています。 これまでの課題 …
2ヶ月前
記事のアイキャッチ画像
シーズンレーティング機能の提供を開始しました
GS2 Blog
はじめに 近年のPvPゲームではシーズンごとにランクマッチが実施され、ブロンズ→シルバー→ゴールド→プラチナ のように昇格していくスタイルが一般化しました。 GS2 も元々レーティング機能は持っていましたが、シーズンで区切ることはできず、ランクではなくレート値の増減のみで表現するレートマッチのみの提供でした。そこで、近年増えてきたランクマッチ用に GS2-SeasonRating 機能の提供を開始しました。 機能の概要 まずはシーズンを定義します。シーズンにはランクごとの情報を表す複数ティアーと、開催期間を設定します。 ティアーには勝負によって変動するポイントの増減量のレンジと、ティアーに昇格…
2ヶ月前
記事のアイキャッチ画像
パフォーマンスチューニング用のツール提供を開始しました
GS2 Blog
はじめに 通信時間を最適化する一番のポイントは通信処理の並列化です。 依存関係のないデータ取得ではなるべく並列化することで、通信の待ち時間を最適化できます。ただ、今の実装が最適化できているかどうかを正確に判断するのは困難が伴います。 追加された機能 GS2-Log のアクセスログを APM(Application Performance Monitoring) で可視化するためのツールとして GS2-Telemetry をオープンソースで公開しました。 GS2-Telemetry は Open Telemetry というオープンなテレメトリデータ収集プロトコルに則って動作し、さまざまなオープン…
3ヶ月前
記事のアイキャッチ画像
GS2-Script でトランザクションを発行できるようになりました
GS2 Blog
はじめに GS2-Script は GS2 の機能を拡張するもので、任意のタイミングでクライアントから呼び出せるようなものではなく レベルアップした時や、アカウント引き継ぎを登録したときなどあらかじめ用意されたトリガーと関連づけることで、イベント駆動で実行できるスクリプトです。トランザクションとは、GS2内のリソースを増減する処理を指します。 機能追加された背景 GS2-Script からは GS2-SDK を利用できるため、もともとアイテムの増減といった処理は実装可能でした。 しかし、スクリプトの実行内容はクライアントから把握できないため、キャッシュへの値反映を行いたければ GS2-Exch…
4ヶ月前
記事のアイキャッチ画像
GS2-Inventory のシンプルインベントリに入手・消費時のスクリプトを設定できるようになりました
GS2 Blog
はじめに GS2-Inventory はプレイヤーの所持品を管理するマイクロサービスです。 なかでも、シンプルインベントリはアイテム所持数の上限やインベントリの容量といった機能は持たない代わりに複数のアイテムをまとめて増減できる特徴があります。機能の詳細は以下の記事を参照ください。gs2.hatenablog.comスクリプトは、GS2 内のマイクロサービスで何かイベントが生じた時に追加の処理をする仕組みです。 GS2-Script に Lua で定義したスクリプト、もしくは Amazon Event Bridge を使用して AWS 上で処理を実行できます。 追加された機能の詳細 これまでス…
4ヶ月前
記事のアイキャッチ画像
限界突破(凸)機能が追加されました
GS2 Blog
はじめに 限界突破とは、同一キャラクターを合成したり、特定の進化素材を使用することでキャラクターを強化する仕組みを指します。 限界突破を行うと、キャラクターのレベル上限が引き上げられ、より強力に育成することが可能となります。 機能追加の背景 GS2-Experience はレベルキャップの引き上げはサポートしていましたが、レアリティごとに初期値が異なったりするケースの取り回しは必ずしも扱いやすい状態とは言えませんでした。今回 GS2-Grade というマイクロサービスを追加することで、レベル上限の管理をより直感的に行えるようにしました。 追加された機能の詳細 GS2-Grade はグレードとレ…
4ヶ月前
記事のアイキャッチ画像
GS2-StateMachine に投機的実行機能が追加されました
GS2 Blog
はじめに GS2-StateMachine はステートマシンをサーバーで管理することで、ゲーム開発者が定義した独自のゲームロジックを、チート耐性が高い状態で実行する仕組みです。GS2-StateMachine の詳細は以下の記事で解説しています。gs2.hatenablog.com 機能追加の背景 ステートマシン管理機能は柔軟な処理を、安全に実行できる仕組みです。 しかし、欠点としてステートマシンにメッセージを送信するたびに通信をしなければならないため、通信頻度の高いゲーム性ではプレイ体験の面でもGS2のAPI呼び出しコストの面でも課題がありました。 追加された機能の詳細 ステートマシン定義を…
5ヶ月前
記事のアイキャッチ画像
トランザクションをより細かい粒度で待てるようになりました
GS2 Blog
はじめに GS2 におけるトランザクションとは、GS2-Showcase の商品購入APIの戻り値 や GS2-Exchange の交換実行API の戻り値です。 このような複数のマイクロサービスの値を書き換える動作は非同期処理で実行されます。この処理単位を 「トランザクション」 と呼んでいます。gs2.hatenablog.comそして、8月には非同期処理の完了を待てるように SDK を拡張しました。 機能追加の背景 ガチャを例に説明します。ガチャは一般的に以下のプロセスで実行されます。消費「GS2-Money から課金通貨を300減らす」 入手「GS2-Lottery でガチャを実行する」…
5ヶ月前
記事のアイキャッチ画像
SimpleInventory / BigInventory に任意の所持数量を設定できるようになりました
GS2 Blog
はじめに SimpleInventory はアイテムの所持数量を管理する仕組みで、通常の Inventory が持つスタックサイズの制限や、Inventory の容量制限の管理の仕組みがない代わりに、複数のアイテムを同時に増減することが可能なインベントリです。BigInventory はアイテムの所持数量を int64 の範囲を超えて保持できるインベントリです。 今回の更新の背景 アイテムの所持数量の操作は、これまで増減APIを通して実行することになっていました。 しかし、任意の数量を持っている状況を作り出したい時に、すでに所有している数量を考慮した上で増減量を調整して処理を実行するのはロジッ…
5ヶ月前
記事のアイキャッチ画像
サーバーから取得した時刻を基準とした現在時刻取得機能が追加されました
GS2 Blog
はじめに イベントの開始時刻や終了時刻など運営型ゲームでは時間の取り扱いは重要です。 機能追加の背景 一方で、ゲームが動作するデバイスの時刻設定は必ずしも正確とは言えず、正しくUIを表現するのは難しいです。 サーバーから取得した時刻を使用して、現在時間を補正することが一般的に行われており、それによってより正確なUIを表現することができるようになります。GS2 では元々 GS2-Realtime::Now というAPIで現在時刻を取得できました。 しかし、それはその瞬間の時刻の取得であり、刻々と変化する時刻やスリープ復帰後にも問題なく動作するような仕組みはゲーム開発者が構築する必要がありました。…
5ヶ月前
記事のアイキャッチ画像
Nifty Cloud mobile backend をご利用の皆さんへ
GS2 Blog
本日、Nifty Cloud mobile backend(NCMB) のサービス終了がアナウンスされました。 多くのインディーデベロッパーさんを支えてきたサービスで、移行先を検討される方も多くいらっしゃると思います。GS2 がその移行先として選んでいただくにあたって、必要となるであろう情報をこちらにまとめます。 料金(無料枠) まず、重要なのは利用料金です。 API 無料で利用可能な範囲についてですが、NCMB は 100万回 ⁄ 月 が無料で利用できます。 GS2 も月2万円の無料枠があり、APIリクエスト 0.02円 が基本となっているため、同じく100万回/月 が無料で利用可能です。 …
5ヶ月前
記事のアイキャッチ画像
マイクロサービス間の連携の設定が簡素化されました
GS2 Blog
はじめに GS2 は多数のマイクロサービスを提供しており、多くのケースはトランザクション処理として、《消費アクション》と《入手アクション》として抽象化されています。一方で、トランザクションを実行するために必要な GS2-Distributor や GS2-JobQueue 各種暗号処理で利用する GS2-Key の暗号鍵、各種通知処理で使用する GS2-Gateway といったマイクロサービスとの関連付けは各マイクロサービスのネームスペース設定として設定が必要です。この設定漏れや誤りによる不具合報告を多数頂戴する状況から、利用者にとってもGS2にとってもボトルネックになっていると感じていました…
5ヶ月前
記事のアイキャッチ画像
トランザクション処理の投機的実行機能が Unreal Engine 5 をサポートしました
GS2 Blog
gs2.hatenablog.com先日、通信待ちをすることなく通信後の結果を想定して GS2-SDK がもつローカルキャッシュを投機的に更新することで SDKから取得できる値を先行して更新後の値を取得できるようにする仕組みのリリースを発表しました。前回リリースの段階では、Unity 向けの SDK でのみ本機能が実装されていましたが この度 Unreal Engine 向けの SDK でも同様の対応が行われました。細かな仕様は Unity と同様ですので、昨日の詳細については前述のブログ記事を参照ください。
6ヶ月前
記事のアイキャッチ画像
トランザクション処理の投機的実行機能が追加されました
GS2 Blog
はじめに GS2におけるトランザクション処理というのはユーザーデータの増減処理を指します。 たとえば、「課金通貨を消費してスタミナを回復する」というような操作です。 機能追加の背景 GS2はレスポンスタイムの最適化を日々行なっており、数百msのオーダーで処理が実行されます。 しかし、通信が完了するまでUIを更新しないとこの数百msのラグが違和感を生んでしまいます。そこで、ユーザー体験を最適化するために投機的実行機能を実装しました。 追加された機能の詳細 GS2-Showcase の Buy や GS2-Exchange の Exchange 関数に第二引数 bool speculativeEx…
6ヶ月前
記事のアイキャッチ画像
GS2-StateMachine で利用する GSL にスクリプトを直値で指定できるようになりました
GS2 Blog
はじめに GS2-StateMachine はステートマシンをサーバーサイドで管理し、クライアントから届くメッセージを元に状態遷移することで チート行為に対する耐性をたかめつつ、自由度の高いスクリプティングを実現する機能を提供しています。 機能追加の背景 GS2-StateMachine が管理するステートマシンは GS2 State Language(GSL) を使用して定義します。 新しいステートに遷移した際にスクリプトを実行して、ステートマシンが持つ状態変数を書き換えることができます。 従来はこのスクリプトの指定には GS2-Script が管理するスクリプトのIDを指定することで定義し…
6ヶ月前
記事のアイキャッチ画像
エクスポートしたユーザーデータをインポートできるようになりました
GS2 Blog
機能追加の背景 gs2.hatenablog.com先日各国の法令遵守のために、ユーザーデータをエクスポートして提供できるようにしたり、ユーザーデータを完全に削除する機能の提供開始をアナウンスしました。 今回の更新はこのエクスポートしたユーザーデータを異なるアカウントやプロジェクトにインポートする機能の提供開始をお知らせします。 追加された機能の詳細 この機能の追加によって、お客様が何らかの問題を報告してきた際に製品環境でユーザーデータをエクスポートして QA環境や開発環境にユーザーデータをインポートして、実際にお客様のプレイデータを再現した状態で動作確認をすることが可能となります。先日、エク…
7ヶ月前
記事のアイキャッチ画像
国外の個人情報保護のための法令に対応するための機能が追加されました
GS2 Blog
機能追加の背景 この10年の間に 欧州では GDPR、米国では CCPA などの個人情報を取り扱う上で課題となる法令が次々と制定されています。 その中には対応するのに相当な工数を必要とする内容もあり、サービス提供者を悩ませています。 追加された機能の詳細 GS2 が提供する全てのマイクロサービスから、特定のユーザーIDに関連づけられたデータの全データをzip形式で取得 GS2 が提供する全てのマイクロサービスから、特定のユーザーIDに関連づけられたデータの完全な削除 上記2つの機能が追加されました。完全な削除については、完全な削除を必要とする法律と一定期間保存しなければならない法律が国ごとにあ…
7ヶ月前
記事のアイキャッチ画像
強化処理の UI Kit サンプルが追加されました
GS2 Blog
github.comサンプルを実行すると、自動的に3つの武器の入手処理が行われ一覧表示が行われます。武器を選択すると、強化素材の選択メニューが表示されます。スライダーを動かすと、予測経験値獲得量が連動します。Execute をクリックすると、強化が実行されます。Unleash タブを選択すると、レベルキャップの引き上げができますが まだレベルキャップに到達していないので、実行できません。レベルキャップまで強化をしますすると、Unleash タブで進化素材を消費する画面になります。Execute を選択すると、レベルキャップが5上がります。再度レベルキャップまで強化します。レベル10 -> 15…
7ヶ月前
記事のアイキャッチ画像
値チェック系のトランザクションアクションが追加されました
GS2 Blog
はじめに GS2におけるトランザクションは、ゲーム内のリソースの増減の組み合わせを定義したものです。 消費「アイテムを減らす」入手「経験値が増える」のようにプレイヤーにとってデメリットがある消費アクションと、プレイヤーにとってメリットがある入手アクションを組み合わせて定義します。 機能追加の背景 レベルキャップの引き上げの交換レートを定義する際に、現在のレベルキャップを元に交換に必要なコストを決定したいことがあります。 しかし、これまではこれを素直に実装する手段はなく、GS2-Limitの交換回数制限機能でキャラクターごとにレベルキャップの引き上げを実行した回数で制限をかけるといった工夫が必要…
7ヶ月前
記事のアイキャッチ画像
UI Kit for Unity がイベント駆動に対応しました
GS2 Blog
はじめに UI Kit for Unity は Unity 用の高レベルなSDKで、Unity Editor 上で GS2 のリソースを宣言的に利用することが可能なSDKです。 たとえば、スタミナを表示したい場合は スタミナコンテキストコンポーネント をゲームオブジェクトに割り当て、操作対象となるスタミナの種類を設定します。 その横に スタミナラベルコンポーネントをゲームオブジェクトに割り当て、整形する文字列フォーマットを指定することでテキストコンポーネントに GS2から取得したスタミナの値をテキストコンポーネントに反映することができます。詳細なサンプルは以下のURLをご確認ください。docs…
7ヶ月前
記事のアイキャッチ画像
Game Engine 用 SDK でイベント駆動実装ができるようになりました
GS2 Blog
はじめに GS2 SDK for Game Engine は Unity と Unreal Engine 用の SDK です。 これらの SDK を使用することで、GS2を利用したプログラミングをするのが容易になります。 機能追加の背景 これまでの GS2 SDK for Game Engine では、ポーリングスタイルで値を取得するのが主な実装でした。 GS2 の API の多くは遅延実行される設計のため、UIに最新の値を反映するにはポーリングするのが主な手段で ポーリングをしても無駄なサーバーアクセスが発生しないようにキャッシュレイヤーが設けられていました。 追加された機能の詳細 キャッシ…
7ヶ月前
記事のアイキャッチ画像
GS2-Account のアカウントBANに理由と期間を設定できるようになりました
GS2 Blog
はじめに GS2-Account は匿名アカウント機能を実現するためのマイクロサービスです。 アカウント情報の保持や認証機能に加えて、各種プラットフォーマーのアカウントを使用した引き継ぎ機能を実現できます。 機能追加の背景 GS2-Account は元々アカウントBAN機能を提供していました。 しかし、期間設定はできず永久BANの機能しか有していませんでした。 追加された機能の詳細 軽微な不正行為に対して、理由の提示と1週間などの期間を設けた利用制限を実行できるようになりました。 実装例 アカウントBAN情報の登録は Untiy などのゲームエンジンからは行えません。 代わりに各種プログラミン…
7ヶ月前
記事のアイキャッチ画像
バージョンチェックにGS2-Scheduleとの連携機能が追加されました
GS2 Blog
はじめに GS2-Version はアプリやアセット、利用規約のバージョン管理や、メンテナンスモードの切り替えなどを行えるマイクロサービスです。 機能追加の背景 バージョン更新や、メンテナンスは予定を持って実行されることが一般的です。 しかし、これまで GS2-Version には予定時刻に要求バージョンを切り替える仕組みがありませんでしたので、バージョン更新やメンテナンスの進行に合わせてマスターデータを切り替える必要がありました。 追加された機能の詳細 そこで、VersionModel に type フィールドが追加され、従来のバージョンチェックを行える simple と、新しく sched…
8ヶ月前
記事のアイキャッチ画像
広告視聴報酬機能が追加されました
GS2 Blog
はじめに モバイルゲームのマネタイズ手法としてプレイヤーに広告を視聴してもらい、広告プラットフォームから報酬を得ることも一般的になりました。 広告が正しく視聴された時に広告プラットフォームからサーバー間連携で通知をもらい、GS2に報酬を付与することでチート行為を防ぐことができます。 追加された機能の詳細 一般的に GS2 では対価と報酬を設定してリソースの交換を行っていますが、サーバー間通信の仕様が広告プラットフォームごとに異なり、データの粒度も異なるため GS2-Reward では広告の視聴が確認できた際に《視聴ポイント》を1ポイント加算するようになっています。獲得した《視聴ポイント》は G…
8ヶ月前