GS2 Blog

https://gs2.hatenablog.com/

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

フィード

記事のアイキャッチ画像
トランザクション処理を同期実行できるようになりました
GS2 Blog
はじめに GS2におけるトランザクションとは、何らかのリソースを消費して、なんらかのリソースを入手する一連の操作を指します。 たとえば「スタミナを消費してクエストを開始状態にする」であったり「クエストの開始状態を削除する代わりに、クエストのクリア報酬を得る」であったり「ミッションの達成報酬を受け取り済みにする代わりに、達成報酬を得る」というような操作を指します。 機能追加の背景 GS2 におけるトランザクション処理は非同期処理が基本です。 これは、マイクロサービスごとにサービス障害が発生した際や、通信エラーのようなリトライで改善する可能性があるエラーハンドリングをGS2サイドでよしなに行う狙い…
1ヶ月前
記事のアイキャッチ画像
冪等性で挑む、非同期処理のパフォーマンスチューニング
GS2 Blog
前回好評だった「冪等性と非同期実行」の続編にあたる記事です。gs2.hatenablog.com私たちが提供している Game Server Services はバックエンドに Lambda + DynamoDB といったフルマネージドサービスを活用した、いわゆるサーバーレスアーキテクチャで実装されています。 前回の記事はデータの整合性を保ちつつ、いかに処理をするかに焦点を当ててお話ししました。ゲームはデータの整合性に対する要件は金融システムほどではないものの、高い水準で求められます。 あわせて、ゲームは体験に対する要件の水準が高く、レスポンスタイムへの要件にも厳しいのが特徴となっています。前…
3ヶ月前
記事のアイキャッチ画像
GS2-Mission の報酬を一括受け取りができるようになりました
GS2 Blog
はじめに GS2-Mission はゲーム内のミッション機能を実現するためのマイクロサービスです。 機能追加の背景 デイリーミッションのような毎日の日課となるシステムはなるべく効率的に受け取れるようにすることでプレイヤーのプレイ体験を最適化できます。 しかし、GS2-Mission のミッション報酬受け取りはこれまでタスクごとに受け取り処理を実行する必要があり、一括受け取りのような仕様を実現するには受け取りAPIを並列実行する必要がありました。 追加された機能の詳細 新しく一括受け取りのためのAPIが追加されました。 var result = await gs2.Mission.Namespa…
3ヶ月前
記事のアイキャッチ画像
GS2-Friend のプロフィール更新を入手アクションで設定できるようになりました
GS2 Blog
はじめに GS2-Friend はゲーム内のフレンドやフォロワー、プロフィールの値を管理できるマイクロサービスです。 機能追加された背景 最近のゲーム仕様としてプレイヤーの名前を変更するのに一定のコストが必要なケースが増えています。 この仕様を実現するには、これまでのプロフィールを自由に更新できる使用では要件を満たすことができません。そこで、プロフィールを更新する処理を 入手アクション として処理できるようにしました。 追加された機能の詳細 以下の入手アクションが追加されました。 Gs2Friend:UpdateProfileByUserId 型 説明 namespaceName string…
4ヶ月前
記事のアイキャッチ画像
GS2-Schedule にトリガーが引かれてからの経過時間で検証する VerifyAction が追加されました
GS2 Blog
はじめに GS2-Schedule はゲーム内のイベントスケジュールを管理するマイクロサービスです。 イベントには大きく2種類存在し、すべてのプレイヤーを対象とした絶対時間でイベント期間を定義するものと、プレイヤーごとに対象期間が異なるトリガーが引かれてから一定時間をイベント期間として定義するものがあります。後者はチュートリアル終了時にトリガーを引くことで、チュートリアル突破から24時間をイベント開催期間として定義できるようなものを想像してください。 機能追加の背景 最近のゲームでは、チュートリアル突破後の期間経過で機能が解放されるような仕様が増えています。 これは、ローンチ後期間が経過したゲ…
4ヶ月前
記事のアイキャッチ画像
GS2-Mission に特定の条件を満たしてからのカウンター上昇量を求めるスコープが追加されました
GS2 Blog
はじめに GS2-Mission はゲーム内のミッション機能を実現するためのマイクロサービスです。 ミッションを表現するために、ミッションタスク と ミッションカウンター という2つのエンティティを持ち クエストクリア時に ミッションカウンター を上昇させ、ミッションタスクにはミッションカウンターの値が一定以上であれば達成とみなして報酬を受け取れるようにする というような定義を行うことになります。 機能追加の背景 ミッションカウンターは1つのカウンターを複数の切り口で値を参照できるようになっています。 具体的には、デイリー・ウィークリー・マンスリー・トータル という4つの切り口が用意されており…
4ヶ月前
記事のアイキャッチ画像
GS2-Exchange のコスト上昇型交換処理のコスト計算スクリプトで 64bit整数値 以上の値を扱えるようになりました
GS2 Blog
はじめに GS2-Exchange はゲーム内のリソースの交換処理を実装するためのマイクロサービスです。 GS2-Exchange はコスト上昇型交換という機能を持っており、これは名前の通り交換を実行するたびに交換に必要なコストが増えていきます。 具体的にはスタミナを課金通貨を使用して回復する仕様があった時に、毎日最初の回復は課金通貨10個で実行できますが、2回目は20個必要になるような仕様を実現できます。 さらに、この上昇量は線形などの単純なものであれば特にコードの記述なく実装できるようになっていますが、より複雑な計算に基づいてコストの上昇量を決定したい場合には GS2-Script を使っ…
4ヶ月前
記事のアイキャッチ画像
OpenID Connect による引き継ぎ処理の実装がより便利になりました
GS2 Blog
はじめに GS2-Account はアカウント管理をするためのマイクロサービスで、匿名アカウントの発行や認証機能を持ちます。 匿名アカウントの引き継ぎ情報の管理機能も用意されています。OpenID Connect とは Twitter が提唱した OAuth を標準化した技術で、認可処理にかかわるフローを標準化しています。 現在では Google, Apple, Facebook, Yahoo, LINE などさまざまな会社の認証基盤が OpenID Connect に準拠した認可の仕組みを提供しています。 機能追加の背景 GS2-Account が持つ引き継ぎ情報の管理機能は OpenID …
5ヶ月前
記事のアイキャッチ画像
非同期処理とリトライと冪等性
GS2 Blog
今回の記事は普段の GS2 のアップデート告知とは少し毛色が異なり、技術的なトピックを扱うエントリーです。gs2.hatenablog.comこちらで告知した消費アクションの分岐処理を実装するにあたって、どのようなアプローチで課題に向き合ってきたのかを解説しようと思います。 非同期処理とリトライ まずは、非同期処理とリトライについて考えてみましょう。 非同期処理とは? 「API を呼び出すと、処理の結果が返ってくる。処理の途中でエラーが発生したらエラーが返ってくる」というのが同期処理です。 この場合、エラーハンドリングは呼び出し元に委ねられますので、比較的シンプルに処理を行うことができます。一…
5ヶ月前
記事のアイキャッチ画像
ギルドマスターが引退した時にギルドメンバーからギルドマスターを選出する仕組みを追加しました
GS2 Blog
はじめに GS2-Guild はゲームプレイヤー同士で協力プレイをするためのチームを結成するためのマイクロサービスです。 機能追加の背景 ギルドマスターが一人しかいない状況で、ギルドマスターがゲームを引退してしまった時、ギルドメンバーは脱退する以外の選択肢がありませんでした。 これに新しいギルドマスターをギルドメンバーから選出することで、ギルドの運営を継続できるようにしました。 追加された機能の詳細 ギルドのマスターデータにギルドマスターが引退したと判断するまでの日数を指定できるようになりました。 var domain = gs2.Guild.Namespace( namespaceName:…
5ヶ月前
記事のアイキャッチ画像
検証アクションと消費アクションが区別されるようになりました
GS2 Blog
はじめに GS2 においてプレイヤーの操作は最終的に「何かのリソースを消費」し「何らかのリソースを得る」という処理として表現されます。 何かのリソースを消費する処理を「消費アクション」と呼び、何かのリソースを得る処理を「入手アクション」と呼び、一連の処理を「トランザクション」と呼んでいます。 機能追加の背景 これまで「アイテムの所持数量が n 個であることを確認」「ミッション x が達成済みであることを確認」というようなトランザクションアクションは「消費アクション」に分類していました。gs2.hatenablog.comこちらの対応を進めるにあたって、If 文の condition に指定でき…
5ヶ月前
記事のアイキャッチ画像
消費アクション内で分岐処理が記述できるようになりました
GS2 Blog
はじめに GS2 においてプレイヤーの操作は最終的に「何かのリソースを消費」し「何らかのリソースを得る」という処理として表現されます。 何かのリソースを消費する処理を「消費アクション」と呼び、何かのリソースを得る処理を「入手アクション」と呼び、一連の処理を「トランザクション」と呼んでいます。 機能追加の背景 これまで消費アクションは静的な内容を記述することしかできませんでした。 たとえば、「課金通貨を300消費」して「単発ガチャを引ける」トランザクションを発行する「ゲーム内ストアの商品」があるとします。ここにガチャチケットの仕様を追加したとしましょう。 「ガチャチケットを1枚消費」して「単発ガ…
5ヶ月前
記事のアイキャッチ画像
ギルドへの参加を拒否するユーザーIDリストを設定できるようになりました
GS2 Blog
はじめに GS2-Guild はゲーム内のギルド機能を実現するための機能です。 機能追加の背景 ギルドから除籍したプレイヤーが再度ギルドに参加申請が出せるため、UXが良くない状況がうまれてしまっていました。 追加された機能の詳細 ギルドのパラメーターに ignoreUsers が追加されました。 ここにユーザーIDを設定すると、ギルドへの参加リクエストが失敗するようになります。これにより、除籍したプレイヤーをここに加えることで発生していた問題を回避することが可能となりました。
5ヶ月前
記事のアイキャッチ画像
GS2のログインアカウントを多要素認証で保護できるようになりました
GS2 Blog
はじめに 多要素認証とは、ログインIDとパスワードに加えて、追加のなんらかの情報に基づいて本人からのアクセスであることを確認することで、アカウントの保護を強固にする仕組みです。 一般にワンタイムパスワードが用いられることが多く、GS2 の多要素認証でもワンタイムパスワードを採用しています。 機能追加の背景 近年「パスワードリスト攻撃」と呼ばれる、サービスから漏洩したユーザーID・パスワードを使って他のサービスへのログインを試みる不正アクセスが横行しています。 このような攻撃への耐性を強めるために導入が進んでいるのがワンタイムパスワードです。 追加された機能の詳細 ワンタイムパスワードは30秒ご…
6ヶ月前
記事のアイキャッチ画像
GS2-Friend のフレンド申請の上限処理が改善されました
GS2 Blog
はじめに GS2-Friend はゲーム内のプレイヤー同士の関係を管理するマイクロサービスで、単方向のフォロー、双方向のフレンドを管理できます。 フレンドは申請を出し、承認されることで関係を構築できますが、フォローは承認プロセスなしで関係を構築できます。 今回改善されたのはフレンドの申請についてです。 機能追加の背景 GS2-Friend はさまざまな値の条件が絡み、エラー処理が複雑になりがちでした。 具体的にはフレンドについては以下の3つの上限が存在しました。 自分が他人に送信し、未承諾のフレンド申請数の上限 1000 他人が自分に送信し、未承諾のフレンド申請数の上限 1000 フレンド関係…
6ヶ月前
記事のアイキャッチ画像
GS2-Schedule に新しい繰返しの種類が追加されました
GS2 Blog
はじめに GS2-Schedule はゲーム内のイベントのスケジュールを管理するマイクロサービスです。 スケジュールには全てのプレイヤーが同じ期間をイベント期間とする絶対期間や、チュートリアル終了後24時間のようなプレイヤーごとに異なる相対期間の期間を設定することが可能で、 さらに、期間中に毎週月曜日だけイベント期間とするような繰返しの設定が可能です。 機能追加の背景 繰返し設定には「毎日」「毎週」「毎月」といった条件を設定できました。 今回これに加えて「X日開催し、Y日非開催日」というのを順番に繰り返す繰返し設定はできませんでした。 追加された機能の詳細 開催日数Xと、非開催日数Y、さらに「…
6ヶ月前
記事のアイキャッチ画像
GS2-Account に他プラットフォームにおけるIDを保持し検索する機能が追加されました
GS2 Blog
はじめに GS2-Account はゲームにログインするためのアカウントを管理します。 GS2-Account が発行するアカウントは匿名アカウントと呼ばれるタイプのアカウントで、このアカウントに引き継ぎ情報として他プラットフォームのIDを保持してデータを引き継ぎできるようにする仕組みがあります。 機能追加された背景 Facebook や X の友達をゲーム内にインポートして利用したい時に 各種プラットフォームのIDを使って GS2-Account の匿名アカウントを特定したいことがあります。 また、この処理はデータ引き継ぎとは異なり、他人が実行できる必要があります。 追加された機能の詳細 G…
6ヶ月前
記事のアイキャッチ画像
C# SDK にカオスモードが追加されました
GS2 Blog
はじめに GS2-SDK に「カオスエンジニアリング」のための機能が追加されました。カオスエンジニアリング とは Netflix が提唱した開発手法です。 Netflix は皆さんもよく知る動画配信サービスですが、本番環境のサーバーをランダムに停止する「カオスモンキー」や、本番環境のデータセンターのサーバーを全て停止する「カオスゴリラ」、特定地域のデータセンターのサーバーを全て停止する「カオスコング」といったプログラムが日常的に動くことで、システムの障害耐性を高めるアプローチをとっているという発表を行い、方々に驚きを生みました。この手法はゲーム開発にも応用できると考え、追加されたのが今回の機能…
6ヶ月前
記事のアイキャッチ画像
GS2-Money2 の提供を開始しました。
GS2 Blog
はじめに GS2-Money は課金通貨の残高を管理するマイクロサービスです。 機能追加の背景 GS2-Money は課金通貨の残高を管理するマイクロサービスですが、1つのネームスペースで1つの通貨(日本円/米ドルなど)しか扱えないため、グローバル展開する際の扱いが難しいという課題がありました。 新しいマイクロサービスの特徴 原則 GS2-Money とほぼ同じ仕様を持ちますが、ウォレットに複数種類の通貨でチャージした結果を保持できるようになりました。 ウォレットのフォーマットが変わっているため、GS2-Money の新機能というよりは、GS2-Money というマイクロサービス自体を新しくし…
6ヶ月前
記事のアイキャッチ画像
GS2-Buff で絶対値による補正を適用できるようになりました
GS2 Blog
はじめに GS2-Buff はゲーム内のイベントの一環として、クエスト報酬を2倍にしたり、クエストに挑戦可能なスタミナ消費量を減らしたりする各種補正を各マイクロサービスのマスターデータを書き換えることなく設定できる仕組みです。 機能追加の背景 GS2-Buff ではユーザーデータの最大値にも補正が可能で、サブスクリプション契約するとスタミナの最大値が 30 →50 に補正されるような取り組みも見られます。しかし、これまでの GS2-Buff では、絶対値による補正はできず、割合ベースの補正しかできませんでした。 つまり、これまでは 30→50 にしたければ、サブスクリプション契約中はスタミナの…
7ヶ月前
記事のアイキャッチ画像
シーズンマッチメイキング機能を追加しました
GS2 Blog
はじめに GS2-Matchmaking は対戦相手を見つけるためのマイクロサービスです。 GS2-Matchmaking がこれまで提供してきたマッチメイキングシステム(スタンダードマッチメイキング)はリアルタイム対戦を行う相手を探すことを想定して実装されました。 機能追加の背景 最近は近しいランクのプレイヤー同士を50人や100人、あるいは1000人といった単位で集めて、その中で一定期間の間にハイスコアを出したプレイヤーをより高いランクに引き上げたり、ランキング報酬を出すようなゲームが増えてきました。スタンダードマッチメイキングが形成するギャザリングは一時的なもので、マッチメイキングが完了…
7ヶ月前
記事のアイキャッチ画像
新しいランキングシステムを公開しました
GS2 Blog
はじめに これまでも GS2-Ranking というランキングの仕組みを提供していました。 サービスの初期に設計したサービスということもあり、その後の機能拡張で最も歪みが生じていたマイクロサービスでもありました。利用者からのフィードバックの反映に技術的負債の返済も兼ねて、新しくランキングシステムを再設計することにしました。ご安心いただきたいのは GS2-Ranking のサポートは今後も継続するということです。 そのため、現在 GS2-Ranking をご利用の皆様は無理して新しい GS2-Ranking2 へ移行することを検討する必要はありません。 ただし、今後積極的な機能追加は行われなくな…
7ヶ月前
記事のアイキャッチ画像
GS2-Mission がカウンター以外のプロパティと連携して達成判定ができるタスクを定義できるようになりました
GS2 Blog
はじめに GS2-Mission はゲーム内のミッション(トロフィーや実績ともいわれる)機能を提供します。 機能追加の背景 これまで、GS2-Mission で定義できるタスクはカウンターの値が目標値を超えた時に達成とする仕組みとして提供されてきました。 しかし、ミッションの設計によってはこの範囲に収まらないデータがあるのも事実でした。 具体的な例を挙げると「キャラクターAのレベルが100に達した」というようなミッションです。これまでの仕様でも GS2-Experience のランクアップ時のスクリプトでミッションのカウンターを上昇させることで似たような実装をすることも可能でしたが、値が二重管…
7ヶ月前
記事のアイキャッチ画像
GS2-Inbox のグローバルメッセージに受取可能期間を設定できるようになりました
GS2 Blog
はじめに GS2-Inbox はゲーム内のプレゼントボックス機能を実現するためのマイクロサービスで、すべてのプレイヤーにプレゼントを配布するための仕組みとしてグローバルメッセージ機能があります。グローバルメッセージ機能はマスターデータでメッセージデータを定義し、プレイヤーがグローバルメッセージの受信APIを呼び出すと各プレイヤーのプレゼントボックスにメッセージデータをコピーして実体化することで実現しています。 機能追加の背景 グローバルメッセージをプレイヤーに届けるにあたって、マスターデータに定義したら即座に配送対象となり、送信の予約はできませんでした。 追加された機能の詳細 「運営上、配信日…
7ヶ月前
記事のアイキャッチ画像
GS2-Schedule の相対期間イベントに絶対期間を組み合わせられるようになりました
GS2 Blog
はじめに GS2-Schedule はゲーム内のイベント開催期間を管理するマイクロサービスです。なかでも、相対期間イベントとはプレイヤーごとに異なるイベント期間を設定するもので、チュートリアル突破後24時間を特別な期間とするような仕様を実現するために使用できます。 機能追加の背景 相対期間イベントはトリガーを引くAPIを呼び出して、そこから一定期間をイベント期間とすることができます。 このイベント期間はトリガーを引けば必ず発動し、トリガーを引いたとしても 2024年1月1日〜2024年1月3日 の間しか相対期間イベントとするような設定ができませんでした。この課題を解消するための変更が今回のアッ…
7ヶ月前
記事のアイキャッチ画像
ギルド機能の提供を開始しました
GS2 Blog
はじめに ゲームにはプレイヤー同士が長期の協力プレイをするための仕組みとして、ギルドやクランという仕組みが導入されるケースがあります。 GS2 にはこれまでこのような仕組みを実現する方法がありませんでした。 追加された機能の詳細 新しく追加された GS2-Guild はギルドメンバーの管理と、ギルドに関する情報を紐づけるためのギルドユーザーの仕組みを提供します。 ギルドユーザー GS2-Guild では、ギルドレベルやギルドメンバーで共有するインベントリを実現するために「ギルドユーザー」という仕組みを持ちます。 ギルドユーザーは GS2 のいちアカウントとして処理され、全ての GS2 のマイク…
8ヶ月前
記事のアイキャッチ画像
リソースレベルのアクセス制御ができるようになりました
GS2 Blog
はじめに GS2-Identifier は GS2 のAPI呼び出しのための権限管理をするためのサービスです。 プロジェクトに対して複数のクレデンシャル(APIキー)を発行でき、それぞれに呼び出し可能なAPI権限を設定できます。 機能追加の背景 これまでは、呼び出し可能なAPIの種類のみが制御可能でした。 今回のアップデートでは、そこから更にリソース単位でのアクセス制御が可能となりました。例えば、クレデンシャルAは 「GS2-Account でアカウントを作成する権限がある」 というような設定しかできなかったのが 「GS2-Account のネームスペース1 にアカウントを作成する権限がある」…
8ヶ月前
記事のアイキャッチ画像
GS2-Account の認証時のスクリプトに前回ログインからの経過時間が渡るようになりました
GS2 Blog
はじめに GS2-Account はゲームが必要とする認証機能を提供するサービスです。 機能追加の背景 「久しぶりゲームを再開してくれたプレイヤーにカムバックボーナスを付与したい」というようなニーズがあります。 このようなニーズを満たすために認証時のスクリプトに前回ログインからの経過時間を渡すようにし、スクリプトから GS2-Schedule のカムバック用のイベントを開始状態にすることで、カムバック時にのみ得られる報酬を設定できます。 追加された機能の詳細 namespace = args.namespace account = args.account elapsedHours = arg…
9ヶ月前
記事のアイキャッチ画像
GS2の各種パラメーターに補正値を適用する GS2-Buff が公開されました
GS2 Blog
はじめに GS2 はさまざまなマスターデータやユーザーデータを取り扱います。 イベントやサブスクリプションの特典として、各種パラメーターに補正値を適用したいことがあります。例えば、イベント期間中は「スタミナ消費量半減」「クエスト報酬2倍」「スタミナ最大値2倍」というようなことです。 新サービス追加の背景 これまではこのような補正値を適用する手段がなく、マスターデータをイベント期間のみ差し替えるような対応が必要でした。 しかし、マスターデータの更新は予約することができないため、メンテナンス期間をとってメンテナンスとしてマスターデータの更新作業を行うようなオペレーションが必要でした。 新サービスの…
9ヶ月前
記事のアイキャッチ画像
GS2-Inventory の巨大インベントリのアイテム入手・消費時のスクリプトを実装できるようになりました
GS2 Blog
はじめに GS2-Inventory はアイテムの所持数量を管理するマイクロサービスです。 なかでも巨大インベントリは 64bit整数値 の範囲を超えるアイテムの所持数量を管理するマイクロサービスです。クッキークリッカーを代表するインフレ系ゲームのようなゲームでクッキーの所持数量を管理するために利用できます。 今回の更新で解消された課題 これまで巨大インベントリのアイテム入手・消費時のスクリプトは設定できませんでした。 追加された機能の詳細 新しく巨大インベントリのアイテム入手・消費時のスクリプトを設定できるようになりました。 スクリプトの戻り値では、処理を継続するかに加えて、入手量・消費量の…
10ヶ月前