GS2 Blog
https://gs2.hatenablog.com/
Game Server Services(https://gs2.io/) の最新情報をお届けします
フィード

GS2-Limit の回数制限リセット間隔に「一定日数ごと」が追加されました
GS2 Blog
この更新は2025年1月30日の更新内容です はじめに GS2-Limit はゲーム内の操作に回数制限を設けることのできるマイクロサービスです。 機能追加の背景 回数制限は一定間隔でリセットすることが可能で、毎日・毎週・毎月 リセットが可能でした。 ここに「一定日数ごと」という設定ができず、3日ごとにリセットというような条件は設定できませんでした。 追加された機能の詳細 docs.gs2.ioGS2-Limit のマスターデータである LimitModel の resetType に days が追加されました。 days を指定すると、追加で anchorTimestamp と days の…
8日前

GS2-Mission にタスクの達成再評価のみを行うAPIが追加されました
GS2 Blog
この更新は2025年1月26日の更新内容です はじめに GS2-Mission はデイリーミッションや、ウィークリーミッション、実績といった機能を実現するマイクロサービスです。 機能追加の背景 GS2-Mission のミッションタスクまたはミッショングループには挑戦可能な期間として、GS2-Schedule のイベントを関連づけることが可能です。 イベントと関連づけることで、イベントの開催期間のみ達成可能なミッションを作成可能です。このイベント期間のミッションタスクには、カウンターと関連づけることになりますがカウンターの値はミッションタスクのイベント期間設定とは異なる設定でカウントアップが可…
9日前

GS2-Account の OIDC 機能で id_token 以外の値を取得できるようになりました
GS2 Blog
この更新は2025年1月23日の更新内容です はじめに GS2-Account は匿名アカウントを管理し、引き継ぎ情報を紐づけることで匿名アカウントの復元が行えるマイクロサービスです。 OIDC(Open ID Connect) に準拠したIDプロバイダーのアカウントとの連携をサポートしており、Google Account や Apple Account、Facebook Account といった一般的な SNS のアカウントの認証情報を使用してデータの引き継ぎを容易に行えるようになっています。 機能追加の背景 データの引き継ぎだけであれば、これまで提供していた id_token を取得するだ…
17日前

GS2-Guild のギルドメンバーにメタデータを持つことができるようになりました
GS2 Blog
この更新は2025年1月21日の更新内容です はじめに GS2-Guild はギルド機能を提供するマイクロサービスです。 機能追加の背景 GS2-Guild はギルドメンバーのユーザーID一覧を管理しますが、それ以上のメンバーの情報を持つ場所がありませんでした。 そのため、一般的な操作であるメンバーの名前の一覧を取得するのにも、GS2-Friend に登録された公開プロフィールを1件ずつ取得する必要があり、コスト面でもUX面でも課題がありました。 追加された機能の詳細 GS2-Guild が管理するギルドメンバーにメタデータを保持できるようになりました。 ギルド情報にメンバー一覧やメタデータが…
21日前

GS2-Mission のミッションカウンターをリセットするクライアントAPIを追加しました
GS2 Blog
この更新は2025年1月21日の更新内容です はじめに GS2-Mission はデイリーミッションやウィークリーミッション、実績といった機能を実現するためのマイクロサービスです。 機能追加の背景 「クエストを10回クリアする」というミッションと「クエストを100回クリアする」というミッションを1つのカウンターを使って実現した時に、ミッション報酬を受け取らないまま クエストを 100回 クリアすると、連続して2つのミッションタスクの報酬を受け取ることが可能です。しかし、ゲーム仕様として「クエストを10回クリアする」というミッションタスクを達成した後から「クエストを100回クリアする」というカウ…
22日前

GS2-Experience のランク変動時のスクリプトに変動前の値が渡るようになりました
GS2 Blog
この更新は2025年1月8日の更新内容です はじめに GS2-Experience はプレイヤーやキャラクター、装備といったリソースの経験値・ランクを管理するマイクロサービスです。 GS2-Script は機能拡張を実現するマイクロサービスで、GS2-Experience であれば、経験値獲得時やランク変動時に任意のスクリプトを実行することを可能とします。 機能追加の背景 これまで、ランク変動時のスクリプトには変動後のランクしか渡ってきませんでした。 そのため「ランクが変動したのでスタミナを回復する」というような処理は記述できましたが「ランクが2あがったので、アイテムを2個付与する」というよう…
23日前

GS2-Stamina に現在のスタミナ値で確定する機能が追加されました
GS2 Blog
この更新は2025年1月8日の更新内容です はじめに GS2-Stamina はスタミナ機能を提供するマイクロサービスです。GS2-Buff を利用することで、イベントスケジュールなどと連携して各種マイクロサービスのマスターデータに補正値を提供できます。 GS2-Stamina との連携あれば、イベント期間中スタミナの回復速度2倍や、最大値1.5倍といった設定を GS2-Stamina のマスターデータを更新することなく適用することができます。 機能追加の背景 GS2-Buff のバフの有効期間が切れる時や、より強力なバフに書き換える時に意図しない動作をすることがありました。GS2-Stami…
24日前

マスターデータの固定に署名付き時刻を使用できるようになりました
GS2 Blog
この更新は2024年12月12日の更新内容です はじめに マスターデータはクエストの一覧や、ミッションの一覧といったデータの呼称です。 マスターデータを更新することで、ゲームにコンテンツを追加することができます。メンテナンスにいれずにマスターデータを更新できるように、ログイン時のマスターデータでゲームが動き続けられるように ログイン日時時点でのマスターデータでサーバー機能を利用できるようにする機能を提供しています。 機能追加の背景 古いゲームバージョンを利用しているプレイヤーには影響を与えずに、バージョンアップしたプレイヤーにだけ更新したマスターデータを適用したいといったニーズがありましたが、…
1ヶ月前

GS2-Version の規約同意バージョンを拒否してもゲームを進行できる設定が可能となりました
GS2 Blog
この更新は2024年12月9日の更新内容です はじめに GS2-Version はゲームのバージョンや、アセットのバージョン、同意した利用規約のバージョンを管理するマイクロサービスです。 GS2-Version は2種類のバージョン管理機能を提供しています。 パッシブバージョンチェック アクティブバージョンチェック パッシブバージョンチェック アプリのバージョンやアセットのバージョンのような配信されたデータに関するバージョンチェックを行う機能です。 アクティブバージョンチェック 利用規約のような、プレイヤーにドキュメントを提示して、その内容に同意した際に同意したドキュメントのバージョンを記録す…
1ヶ月前

GS2-Dictionary にお気に入りエントリーを管理する機能が追加されました
GS2 Blog
この更新は2024年12月7日の更新内容です はじめに GS2-Dictionary は図鑑機能を提供するマイクロサービスです。 機能追加の背景 図鑑機能のような所持したことがあるもの/所持しているもの を管理する機能の中に、特にお気に入りのエンティティに対して優先表示するような機能を実装したいというニーズがありました。 しかし、これまでの GS2-Dictionary にはエントリーを解放状態か未解放状態かの2値しかなく、このようなニーズに応えることができていませんでした。 追加された機能の詳細 解放状態のエントリーに対して、Like することができるようになりました。 Like に登録され…
1ヶ月前

トランザクション処理を同期実行できるようになりました
GS2 Blog
はじめに GS2におけるトランザクションとは、何らかのリソースを消費して、なんらかのリソースを入手する一連の操作を指します。 たとえば「スタミナを消費してクエストを開始状態にする」であったり「クエストの開始状態を削除する代わりに、クエストのクリア報酬を得る」であったり「ミッションの達成報酬を受け取り済みにする代わりに、達成報酬を得る」というような操作を指します。 機能追加の背景 GS2 におけるトランザクション処理は非同期処理が基本です。 これは、マイクロサービスごとにサービス障害が発生した際や、通信エラーのようなリトライで改善する可能性があるエラーハンドリングをGS2サイドでよしなに行う狙い…
10ヶ月前

冪等性で挑む、非同期処理のパフォーマンスチューニング
GS2 Blog
前回好評だった「冪等性と非同期実行」の続編にあたる記事です。gs2.hatenablog.com私たちが提供している Game Server Services はバックエンドに Lambda + DynamoDB といったフルマネージドサービスを活用した、いわゆるサーバーレスアーキテクチャで実装されています。 前回の記事はデータの整合性を保ちつつ、いかに処理をするかに焦点を当ててお話ししました。ゲームはデータの整合性に対する要件は金融システムほどではないものの、高い水準で求められます。 あわせて、ゲームは体験に対する要件の水準が高く、レスポンスタイムへの要件にも厳しいのが特徴となっています。前…
1年前

GS2-Mission の報酬を一括受け取りができるようになりました
GS2 Blog
はじめに GS2-Mission はゲーム内のミッション機能を実現するためのマイクロサービスです。 機能追加の背景 デイリーミッションのような毎日の日課となるシステムはなるべく効率的に受け取れるようにすることでプレイヤーのプレイ体験を最適化できます。 しかし、GS2-Mission のミッション報酬受け取りはこれまでタスクごとに受け取り処理を実行する必要があり、一括受け取りのような仕様を実現するには受け取りAPIを並列実行する必要がありました。 追加された機能の詳細 新しく一括受け取りのためのAPIが追加されました。 var result = await gs2.Mission.Namespa…
1年前

GS2-Friend のプロフィール更新を入手アクションで設定できるようになりました
GS2 Blog
はじめに GS2-Friend はゲーム内のフレンドやフォロワー、プロフィールの値を管理できるマイクロサービスです。 機能追加された背景 最近のゲーム仕様としてプレイヤーの名前を変更するのに一定のコストが必要なケースが増えています。 この仕様を実現するには、これまでのプロフィールを自由に更新できる使用では要件を満たすことができません。そこで、プロフィールを更新する処理を 入手アクション として処理できるようにしました。 追加された機能の詳細 以下の入手アクションが追加されました。 Gs2Friend:UpdateProfileByUserId 型 説明 namespaceName string…
1年前

GS2-Schedule にトリガーが引かれてからの経過時間で検証する VerifyAction が追加されました
GS2 Blog
はじめに GS2-Schedule はゲーム内のイベントスケジュールを管理するマイクロサービスです。 イベントには大きく2種類存在し、すべてのプレイヤーを対象とした絶対時間でイベント期間を定義するものと、プレイヤーごとに対象期間が異なるトリガーが引かれてから一定時間をイベント期間として定義するものがあります。後者はチュートリアル終了時にトリガーを引くことで、チュートリアル突破から24時間をイベント開催期間として定義できるようなものを想像してください。 機能追加の背景 最近のゲームでは、チュートリアル突破後の期間経過で機能が解放されるような仕様が増えています。 これは、ローンチ後期間が経過したゲ…
1年前

GS2-Mission に特定の条件を満たしてからのカウンター上昇量を求めるスコープが追加されました
GS2 Blog
はじめに GS2-Mission はゲーム内のミッション機能を実現するためのマイクロサービスです。 ミッションを表現するために、ミッションタスク と ミッションカウンター という2つのエンティティを持ち クエストクリア時に ミッションカウンター を上昇させ、ミッションタスクにはミッションカウンターの値が一定以上であれば達成とみなして報酬を受け取れるようにする というような定義を行うことになります。 機能追加の背景 ミッションカウンターは1つのカウンターを複数の切り口で値を参照できるようになっています。 具体的には、デイリー・ウィークリー・マンスリー・トータル という4つの切り口が用意されており…
1年前

GS2-Exchange のコスト上昇型交換処理のコスト計算スクリプトで 64bit整数値 以上の値を扱えるようになりました
GS2 Blog
はじめに GS2-Exchange はゲーム内のリソースの交換処理を実装するためのマイクロサービスです。 GS2-Exchange はコスト上昇型交換という機能を持っており、これは名前の通り交換を実行するたびに交換に必要なコストが増えていきます。 具体的にはスタミナを課金通貨を使用して回復する仕様があった時に、毎日最初の回復は課金通貨10個で実行できますが、2回目は20個必要になるような仕様を実現できます。 さらに、この上昇量は線形などの単純なものであれば特にコードの記述なく実装できるようになっていますが、より複雑な計算に基づいてコストの上昇量を決定したい場合には GS2-Script を使っ…
1年前

OpenID Connect による引き継ぎ処理の実装がより便利になりました
GS2 Blog
はじめに GS2-Account はアカウント管理をするためのマイクロサービスで、匿名アカウントの発行や認証機能を持ちます。 匿名アカウントの引き継ぎ情報の管理機能も用意されています。OpenID Connect とは Twitter が提唱した OAuth を標準化した技術で、認可処理にかかわるフローを標準化しています。 現在では Google, Apple, Facebook, Yahoo, LINE などさまざまな会社の認証基盤が OpenID Connect に準拠した認可の仕組みを提供しています。 機能追加の背景 GS2-Account が持つ引き継ぎ情報の管理機能は OpenID …
1年前

非同期処理とリトライと冪等性
GS2 Blog
今回の記事は普段の GS2 のアップデート告知とは少し毛色が異なり、技術的なトピックを扱うエントリーです。gs2.hatenablog.comこちらで告知した消費アクションの分岐処理を実装するにあたって、どのようなアプローチで課題に向き合ってきたのかを解説しようと思います。 非同期処理とリトライ まずは、非同期処理とリトライについて考えてみましょう。 非同期処理とは? 「API を呼び出すと、処理の結果が返ってくる。処理の途中でエラーが発生したらエラーが返ってくる」というのが同期処理です。 この場合、エラーハンドリングは呼び出し元に委ねられますので、比較的シンプルに処理を行うことができます。一…
1年前

ギルドマスターが引退した時にギルドメンバーからギルドマスターを選出する仕組みを追加しました
GS2 Blog
はじめに GS2-Guild はゲームプレイヤー同士で協力プレイをするためのチームを結成するためのマイクロサービスです。 機能追加の背景 ギルドマスターが一人しかいない状況で、ギルドマスターがゲームを引退してしまった時、ギルドメンバーは脱退する以外の選択肢がありませんでした。 これに新しいギルドマスターをギルドメンバーから選出することで、ギルドの運営を継続できるようにしました。 追加された機能の詳細 ギルドのマスターデータにギルドマスターが引退したと判断するまでの日数を指定できるようになりました。 var domain = gs2.Guild.Namespace( namespaceName:…
1年前

検証アクションと消費アクションが区別されるようになりました
GS2 Blog
はじめに GS2 においてプレイヤーの操作は最終的に「何かのリソースを消費」し「何らかのリソースを得る」という処理として表現されます。 何かのリソースを消費する処理を「消費アクション」と呼び、何かのリソースを得る処理を「入手アクション」と呼び、一連の処理を「トランザクション」と呼んでいます。 機能追加の背景 これまで「アイテムの所持数量が n 個であることを確認」「ミッション x が達成済みであることを確認」というようなトランザクションアクションは「消費アクション」に分類していました。gs2.hatenablog.comこちらの対応を進めるにあたって、If 文の condition に指定でき…
1年前

消費アクション内で分岐処理が記述できるようになりました
GS2 Blog
はじめに GS2 においてプレイヤーの操作は最終的に「何かのリソースを消費」し「何らかのリソースを得る」という処理として表現されます。 何かのリソースを消費する処理を「消費アクション」と呼び、何かのリソースを得る処理を「入手アクション」と呼び、一連の処理を「トランザクション」と呼んでいます。 機能追加の背景 これまで消費アクションは静的な内容を記述することしかできませんでした。 たとえば、「課金通貨を300消費」して「単発ガチャを引ける」トランザクションを発行する「ゲーム内ストアの商品」があるとします。ここにガチャチケットの仕様を追加したとしましょう。 「ガチャチケットを1枚消費」して「単発ガ…
1年前

ギルドへの参加を拒否するユーザーIDリストを設定できるようになりました
GS2 Blog
はじめに GS2-Guild はゲーム内のギルド機能を実現するための機能です。 機能追加の背景 ギルドから除籍したプレイヤーが再度ギルドに参加申請が出せるため、UXが良くない状況がうまれてしまっていました。 追加された機能の詳細 ギルドのパラメーターに ignoreUsers が追加されました。 ここにユーザーIDを設定すると、ギルドへの参加リクエストが失敗するようになります。これにより、除籍したプレイヤーをここに加えることで発生していた問題を回避することが可能となりました。
1年前

GS2のログインアカウントを多要素認証で保護できるようになりました
GS2 Blog
はじめに 多要素認証とは、ログインIDとパスワードに加えて、追加のなんらかの情報に基づいて本人からのアクセスであることを確認することで、アカウントの保護を強固にする仕組みです。 一般にワンタイムパスワードが用いられることが多く、GS2 の多要素認証でもワンタイムパスワードを採用しています。 機能追加の背景 近年「パスワードリスト攻撃」と呼ばれる、サービスから漏洩したユーザーID・パスワードを使って他のサービスへのログインを試みる不正アクセスが横行しています。 このような攻撃への耐性を強めるために導入が進んでいるのがワンタイムパスワードです。 追加された機能の詳細 ワンタイムパスワードは30秒ご…
1年前

GS2-Friend のフレンド申請の上限処理が改善されました
GS2 Blog
はじめに GS2-Friend はゲーム内のプレイヤー同士の関係を管理するマイクロサービスで、単方向のフォロー、双方向のフレンドを管理できます。 フレンドは申請を出し、承認されることで関係を構築できますが、フォローは承認プロセスなしで関係を構築できます。 今回改善されたのはフレンドの申請についてです。 機能追加の背景 GS2-Friend はさまざまな値の条件が絡み、エラー処理が複雑になりがちでした。 具体的にはフレンドについては以下の3つの上限が存在しました。 自分が他人に送信し、未承諾のフレンド申請数の上限 1000 他人が自分に送信し、未承諾のフレンド申請数の上限 1000 フレンド関係…
1年前

GS2-Schedule に新しい繰返しの種類が追加されました
GS2 Blog
はじめに GS2-Schedule はゲーム内のイベントのスケジュールを管理するマイクロサービスです。 スケジュールには全てのプレイヤーが同じ期間をイベント期間とする絶対期間や、チュートリアル終了後24時間のようなプレイヤーごとに異なる相対期間の期間を設定することが可能で、 さらに、期間中に毎週月曜日だけイベント期間とするような繰返しの設定が可能です。 機能追加の背景 繰返し設定には「毎日」「毎週」「毎月」といった条件を設定できました。 今回これに加えて「X日開催し、Y日非開催日」というのを順番に繰り返す繰返し設定はできませんでした。 追加された機能の詳細 開催日数Xと、非開催日数Y、さらに「…
1年前

GS2-Account に他プラットフォームにおけるIDを保持し検索する機能が追加されました
GS2 Blog
はじめに GS2-Account はゲームにログインするためのアカウントを管理します。 GS2-Account が発行するアカウントは匿名アカウントと呼ばれるタイプのアカウントで、このアカウントに引き継ぎ情報として他プラットフォームのIDを保持してデータを引き継ぎできるようにする仕組みがあります。 機能追加された背景 Facebook や X の友達をゲーム内にインポートして利用したい時に 各種プラットフォームのIDを使って GS2-Account の匿名アカウントを特定したいことがあります。 また、この処理はデータ引き継ぎとは異なり、他人が実行できる必要があります。 追加された機能の詳細 G…
1年前

C# SDK にカオスモードが追加されました
GS2 Blog
はじめに GS2-SDK に「カオスエンジニアリング」のための機能が追加されました。カオスエンジニアリング とは Netflix が提唱した開発手法です。 Netflix は皆さんもよく知る動画配信サービスですが、本番環境のサーバーをランダムに停止する「カオスモンキー」や、本番環境のデータセンターのサーバーを全て停止する「カオスゴリラ」、特定地域のデータセンターのサーバーを全て停止する「カオスコング」といったプログラムが日常的に動くことで、システムの障害耐性を高めるアプローチをとっているという発表を行い、方々に驚きを生みました。この手法はゲーム開発にも応用できると考え、追加されたのが今回の機能…
1年前

GS2-Money2 の提供を開始しました。
GS2 Blog
はじめに GS2-Money は課金通貨の残高を管理するマイクロサービスです。 機能追加の背景 GS2-Money は課金通貨の残高を管理するマイクロサービスですが、1つのネームスペースで1つの通貨(日本円/米ドルなど)しか扱えないため、グローバル展開する際の扱いが難しいという課題がありました。 新しいマイクロサービスの特徴 原則 GS2-Money とほぼ同じ仕様を持ちますが、ウォレットに複数種類の通貨でチャージした結果を保持できるようになりました。 ウォレットのフォーマットが変わっているため、GS2-Money の新機能というよりは、GS2-Money というマイクロサービス自体を新しくし…
1年前

GS2-Buff で絶対値による補正を適用できるようになりました
GS2 Blog
はじめに GS2-Buff はゲーム内のイベントの一環として、クエスト報酬を2倍にしたり、クエストに挑戦可能なスタミナ消費量を減らしたりする各種補正を各マイクロサービスのマスターデータを書き換えることなく設定できる仕組みです。 機能追加の背景 GS2-Buff ではユーザーデータの最大値にも補正が可能で、サブスクリプション契約するとスタミナの最大値が 30 →50 に補正されるような取り組みも見られます。しかし、これまでの GS2-Buff では、絶対値による補正はできず、割合ベースの補正しかできませんでした。 つまり、これまでは 30→50 にしたければ、サブスクリプション契約中はスタミナの…
1年前