<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Game Server Services ユーザーガイドへようこそ on Game Server Services | Docs</title>
    <link>/ja/</link>
    <description>Recent content in Game Server Services ユーザーガイドへようこそ on Game Server Services | Docs</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <atom:link href="/ja/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GS2-Account</title>
      <link>/ja/microservices/account/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/account/</guid>
      <description>Game Server Services が提供するアカウントシステムは「匿名アカウント」という種類のアカウントシステムです。 日本ではメジャーな仕組みですが、多くの地域では奇妙に感じるアカウントシステムかもしれません。&#xA;しかし、このアカウントシステムはゲームにおいて非常に理にかなったアカウントシステムです。&#xA;匿名アカウントとは何ですか？ 通常イメージするアカウント管理は、ログインIDがありパスワードがあるものでしょう。 匿名アカウントもその点は変わりません。&#xA;しかし、ログインIDとパスワードの両方がシステムによってランダムに決定されるというのが最大の特徴です。&#xA;システムによって発行されたログインID・パスワードをデバイスのローカルストレージに保存し、2回目以降はその情報を利用してログインすることでゲームを再開できます。&#xA;graph TD Startup --&amp;gt; LoadSave{&amp;#34;デバイスストレージから&amp;lt;br/&amp;gt;匿名アカウントを読み込み&amp;#34;} LoadSave -- Not Exists --&amp;gt; CreateAccount[&amp;#34;匿名アカウントを作成&amp;#34;] CreateAccount --&amp;gt; SaveAccount[&amp;#34;匿名アカウントを保存&amp;#34;] SaveAccount --&amp;gt; Login[&amp;#34;ログイン&amp;#34;] LoadSave -- Exists --&amp;gt; Login Login --&amp;gt; InGame 匿名アカウントのメリット 簡単な登録：ユーザーは煩雑な登録プロセスを経ずにゲームをすぐに開始することができます。特に、無料で遊べるF2Pスタイルのゲームでは、多くのユーザーがゲームを試してもらうためには登録の手間を減らすことが重要です。 プレイヤー情報の保護：ログインIDやパスワードを自分で設定する必要がないため、個人情報やプライバシーが保護されます。また、パスワードの再設定や変更なども必要ありません。 引き継ぎのしやすさ：引き継ぎ情報に各種プラットフォームのID基盤やSNSのアカウントなどを利用することができ、異なるデバイスやアプリ間での引き継ぎがスムーズに行えます。 匿名でのプレイ体験：プレイヤーは匿名でゲームをプレイすることができるため、リアルネームやニックネームを使用しなくてもよく、より自由なプレイ体験を楽しむことができます。 引き継ぎ デバイスのローカルストレージほど信頼性の低い場所は他にはありません。 デバイスを落としてしまうかもしれませんし、デバイスを壊してしまうかもしれません。 そのとき、ゲームデータを全て失ってしまうとしたら、それは絶望的な状況です。&#xA;ゲームプレイヤーは、匿名アカウントでゲームを体験し、本当に気に入ったら「引き継ぎ情報」を登録できます。 引き継ぎ情報には各種プラットフォーマーのID基盤の情報を利用してもいいですし、SNSのアカウントを設定してもいいでしょう。ゲームパブリッシャーのID基盤も良さそうです。&#xA;引き継ぎ情報はスロット番号0〜1024の範囲で管理され、最大1,025種類まで登録できます。 用途に応じて各スロットに異なる認証手段を紐付けることで、幅広い引き継ぎシナリオを実現できます。&#xA;引き継ぎ情報には各種ID基盤で認証した結果得られるユーザーIDなどを記録します。 そして、全く新しいデバイスで引き継ぎを実行します。各種ID基盤にログインし、得られたユーザーIDで引き継ぎを実行すると 過去に引き継ぎ情報を設定した匿名アカウントでログインするための情報を取得することができます。&#xA;この情報を再びデバイスのローカルストレージに保存して、今後のログインに利用します。&#xA;graph TD InGame -- ゲームを気に入った --&amp;gt; AddTakeOverSetting[&amp;#34;引き継ぎ情報を登録&amp;#34;] AddTakeOverSetting --&amp;gt; BrokenDevice[&amp;#34;スマホが壊れた&amp;#34;] NewDevice[&amp;#34;新しいスマホ&amp;#34;] --&amp;gt; DoTakeOver[&amp;#34;引き継ぎ情報を入力して&amp;lt;br/&amp;gt;引き継ぎを実行&amp;#34;] DoTakeOver -- 匿名アカウントを復元 --&amp;gt; SaveAccount[&amp;#34;匿名アカウントを保存&amp;#34;] SaveAccount --&amp;gt; Login[&amp;#34;ログイン&amp;#34;] OpenID Connect 連携 引き継ぎ情報の登録、引き継ぎ処理の実行に OpenID Connect に準拠した認証システムを使用するためのサポートが用意されています。</description>
    </item>
    <item>
      <title>GS2-AdReward</title>
      <link>/ja/microservices/ad_reward/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/ad_reward/</guid>
      <description>モバイルゲームのマネタイズ手法としてプレイヤーに広告を視聴してもらい、広告プラットフォームから報酬を得ることも一般的になりました。 広告が正しく視聴された時に広告プラットフォームからサーバー間連携で通知をもらい、GS2 に報酬を付与することでチート行為を防ぐことができます。&#xA;クライアント側のコールバックのみで報酬を付与する設計では、改ざんされた SDK を使用してチートが行われるリスクがあります。 GS2-AdReward は広告プラットフォームから GS2 への直接の Server-to-Server(S2S) 通知を介して、信頼できる視聴完了イベントを契機に報酬を発行する仕組みを提供します。&#xA;視聴ポイント 一般的に GS2 では対価と報酬を設定してリソースの交換を行っていますが、サーバー間通信の仕様が広告プラットフォームごとに異なり、データの粒度も異なるため GS2-AdReward では広告の視聴が確認できた際に《視聴ポイント》を1ポイント加算するようになっています。&#xA;獲得した《視聴ポイント》は GS2-Exchange や GS2-Showcase などで使用可能な消費アクションとして消費できます。 これにより、ゲーム内のあらゆる報酬と広告視聴を疎結合に結びつけられるため、新しい広告キャンペーンを追加する際にも報酬の設計を再利用できます。&#xA;トランザクションアクション GS2-AdReward では以下のトランザクションアクションを提供しています。&#xA;種別 アクション 説明 消費 Gs2AdReward:ConsumePointByUserId 視聴ポイントの消費 入手 Gs2AdReward:AcquirePointByUserId 視聴ポイントの加算 graph TD InGame[&amp;#34;ゲーム&amp;#34;] -- 広告を視聴 --&amp;gt; ViewAd[&amp;#34;広告&amp;#34;] ViewAd -- 広告の視聴が完了 --&amp;gt; AdPlatform2[&amp;#34;広告プラットフォーム&amp;#34;] ViewAd -- 広告の視聴が完了 --&amp;gt; InGame2[&amp;#34;ゲーム&amp;#34;] AdPlatform2 -- 広告の視聴完了を通知 --&amp;gt; AdReward[&amp;#34;GS2-AdReward&amp;#34;] AdReward --&amp;gt; AddPoint[&amp;#34;ポイントを付与&amp;#34;] AdReward -- ポイント付与を通知 --&amp;gt; InGame2 InGame2 -- 視聴ポイントとアイテムを交換 --&amp;gt; Exchange[&amp;#34;GS2-Exchange&amp;#34;] 対応している広告プラットフォーム 現在 GS2-AdReward は以下の広告プラットフォームに対応しています。 追加で対応を希望される場合はサポートにご連絡ください。</description>
    </item>
    <item>
      <title>GS2-Buff</title>
      <link>/ja/microservices/buff/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/buff/</guid>
      <description>GS2-Buff は GS2 が提供するマイクロサービスの対価や報酬、ユーザーデータの最大値の補正を一元管理する機能を提供します。 期間限定で報酬を増加させる機能や、サブスクリプション契約状態であればユーザーデータの最大値が増加するような機能を実現するために利用できます。&#xA;GS2-Buff は他のマイクロサービスを直接書き換えるのではなく、API 呼び出しの際に渡される「コンテキストスタック」というメタ情報を介して各マイクロサービスに補正値を伝播させます。 そのため、バフの内容や期間を変更しても各マイクロサービスのマスターデータやプレイヤーデータをいっさい書き換えることなく適用・解除が行えるのが大きな特徴です。&#xA;ユースケース GS2-Buff が想定する代表的なユースケースは以下の通りです。&#xA;期間限定で経験値の取得量を 2 倍にするキャンペーン 特定のショーケースで販売される商品の価格を一律 20% オフ サブスクリプション契約中はスタミナの最大値を引き上げる 特定の装備を装備中のみクエスト報酬を増加させる イベント期間中だけ強化素材の消費量を半減させる graph LR Player[&amp;#34;プレイヤー&amp;#34;] --&amp;gt;|ApplyBuff| Buff[GS2-Buff] Buff --&amp;gt;|コンテキストスタック| Player Player --&amp;gt;|API &amp;#43; コンテキストスタック| Other[&amp;#34;他のマイクロサービス&amp;lt;br/&amp;gt;(GS2-Experience / GS2-Stamina / GS2-Showcase など)&amp;#34;] Other -.参照.-&amp;gt; Buff Other --&amp;gt;|補正後の値| Player マスターデータ管理 マスターデータを登録することでマイクロサービスで利用可能なデータや振る舞いを設定できます。&#xA;マスターデータの種類には以下があります。&#xA;BuffEntryModel: 補正値と対象を定義する基本モデル マスターデータの登録はマネージメントコンソールから登録する他、GitHubからデータを反映したり、GS2-Deployを使ってCIから登録するようなワークフローを組むことが可能です。&#xA;BuffEntryModel の主な設定項目 設定項目 説明 name バフを識別する一意な名前 metadata クライアント側で利用する任意メタデータ expression 補正計算式の種別 (Rate Add / Mul / Value Add) targetType 補正対象が「モデル」か「アクション」か targetModel / targetAction 補正対象のモデル名・アクション名・条件 GRN・補正レート priority 適用優先度。値が小さいものから順に計算 applyPeriodScheduleEventId GS2-Schedule のイベントによる有効期間 バフエンティティ 各マイクロサービスに加える補正の単位です。 基礎値を 1.</description>
    </item>
    <item>
      <title>GS2-Chat</title>
      <link>/ja/microservices/chat/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/chat/</guid>
      <description>GS2-Chat を利用することで、ゲーム内にテキストチャットを組み込むことが可能です。 テキストチャットは新着メッセージの検知のために常時接続セッションを必要とし、サーバーに求める要件も複雑になります。&#xA;Game Server Services を利用すれば、そのようなめんどくさい常時接続セッションの管理からも解放されます。&#xA;ルーム GS2-Chat の利用を開始するには、まずはルームを作成する必要があります。 ルームはプレイヤーが自由に作成できるようにもできますし、開発サイドで用意したルームをプレイヤーに使用させることもできます。 また、投稿できるユーザーIDのホワイトリストを設定して特定メンバー専用のルームを構築することも可能です。&#xA;一点気をつけなければならないのが、GS2-Chat は投稿可能なメッセージの数をルームごとに1秒間あたり3件までしか保証しません。 これを超える頻度でメッセージの投稿を行うとエラーが発生する可能性があります。 そのため、ソーシャルネットワークのタイムラインのような大量のプレイヤーを1つのルームに格納するような要件には向きません。&#xA;パスワード ルームにはパスワードを設定することが可能です。 パスワードが設定されたルームのメッセージを取得する際や、メッセージを投稿する際にはパスワードの指定が必要となります。&#xA;ルーム設定の更新 ルームの作成後、メタデータやパスワード、ホワイトリスト（投稿可能なユーザーIDリスト）を更新することが可能です。これにより、動的にルームのアクセス権限を変更したり、ルームの属性情報を変更したりできます。&#xA;購読 プレイヤーはルームを購読することで、ルームへの新着メッセージの通知を受けることができるようになります。 メッセージにはカテゴリを設定可能で、ルーム内のカテゴリごとに購読が可能です。&#xA;ギルドチャットの実装においてギルドマスターからのメッセージだけカテゴリを特別なものに設定し、ギルドメンバーはギルドマスターからのメッセージだけは絶対に購読させるようなことができます。&#xA;購読設定は後から更新することも可能です。受信するカテゴリの追加・削除や、オフライン時のモバイルプッシュ通知転送設定を動的に変更できます。&#xA;購読による通知処理は GS2-Gateway の通知機能が利用されますが、GS2-Gateway には通知先プレイヤーがオフラインの場合 モバイルプッシュ通知などの、ゲーム外の方法で通知する機能が用意されています。&#xA;1つのルームを購読できる人数に明確な制限はありませんが、通知を送信するために GS2-Gateway のAPIリクエストが発生するため、GS2のAPI利用料金が通知先1件ごとに発生します。 また、通知先が多くなると通知が届くまでにかかる時間が長くなります。&#xA;ルーム名を指定して、そのルームを現在誰が購読しているかの一覧を取得することも可能です。&#xA;actor Player1 actor Player2 participant &amp;#34;GS2-Chat#Room&amp;#34; participant &amp;#34;GS2-Gateway#Namespace&amp;#34; participant &amp;#34;Firebase Cloud Messaging&amp;#34; Player1 -&amp;gt; &amp;#34;GS2-Chat#Room&amp;#34; : Subscribe Player2 -&amp;gt; &amp;#34;GS2-Chat#Room&amp;#34; : Post Message &amp;#34;GS2-Chat#Room&amp;#34; -&amp;gt; &amp;#34;GS2-Gateway#Namespace&amp;#34; : Send Notification to Player1 &amp;#34;GS2-Gateway#Namespace&amp;#34; -&amp;gt; &amp;#34;Firebase Cloud Messaging&amp;#34; : Notification(if player is offline) &amp;#34;GS2-Gateway#Namespace&amp;#34; -&amp;gt; Player1 : Notification Player1 -&amp;gt; &amp;#34;GS2-Chat#Room&amp;#34; : Load New Message メッセージ ルームに対してメッセージを送信することが可能です。 メッセージの保持期間はネームスペースの設定 messageLifeTimeDays で1〜30日の範囲で指定でき、保持期間を超えたメッセージは削除されます。</description>
    </item>
    <item>
      <title>GS2-Datastore</title>
      <link>/ja/microservices/datastore/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/datastore/</guid>
      <description>GS2-Datastore を利用することで、任意のバイナリデータをサーバーに保存できます。&#xA;アップロードしたデータにはアクセス権限を設定でき、public（全員に公開）、protected（指定したユーザーIDにのみ公開：最大100件）、private（自分のみ）から選択します。&#xA;GS2-Datastore は UGC やレースゲームのゴーストデータのようなデータをアップロードするのが主たる目的で、プレイヤーのユーザーデータを保存するのには必ずしも適切ではありません。&#xA;なぜなら、所持品の所持数量をバイナリデータとして保存していると、セーブデータやアプリ本体の改竄でアイテムを増殖したり、入手量を不正に増加させた改造アプリでのプレイを許してしまうためです。 所持品の所持数量であれば、GS2-Inventory のような専用のマイクロサービスを利用することで、そのような不正行為は行えなくなります。&#xA;ユーザーデータの中でも、コンフィグの設定値など、改竄されてもゲームバランスに影響を与えることがないデータについて保存することを否定するわけではありません。&#xA;ユースケース GS2-Datastore が想定する代表的なユースケースは以下の通りです。&#xA;ユーザーが投稿したスクリーンショットやリプレイなどの UGC コンテンツの保存 レースゲームにおけるゴーストデータの共有 フォトモードで撮影した画像のクラウド共有 ゲーム設定など改竄されてもゲームバランスに影響を与えないユーザーデータの保存 ステージのカスタムマップデータの公開・共有 アクセススコープ データオブジェクトには 3 種類のアクセススコープがあり、用途に応じて使い分けます。&#xA;スコープ 説明 主な用途 public 全プレイヤーがダウンロード可能 UGC コンテンツの公開、ゴースト共有 protected allowUserIds に指定したユーザーのみがダウンロード可能（最大100件） フレンドのみへの共有 private アップロードしたユーザー本人のみがダウンロード可能 個人のセーブデータ、設定値 スコープと許可ユーザーは UpdateDataObject で後から変更することも可能です。&#xA;アーキテクチャ GS2-Datastore はバイナリデータの保存場所などを記録したメタデータを管理しており、実際のバイナリデータの保存には外部のクラウドストレージを利用しています。 そのため、アップロード・ダウンロード処理は複数のステップを必要とします。&#xA;この処理の流れは、Game Engine 向けの SDK ではラップした高レベルなAPIが用意されているため、気にする必要はありませんが 各種プログラミング言語向けの SDK には高レベルなAPIは用意されていませんので、利用者自身で複数ステップを処理する必要があります。&#xA;アップロードプロセス sequenceDiagram actor Player as プレイヤー participant Namespace as GS2-Datastore#Namespace participant Storage as Cloud Storage Player-&amp;gt;&amp;gt;Namespace: PrepareUpload Namespace--&amp;gt;&amp;gt;Player: Cloud Storage URL Player-&amp;gt;&amp;gt;Storage: Upload Payload Storage--&amp;gt;&amp;gt;Player: OK Player-&amp;gt;&amp;gt;Namespace: DoneUpload Namespace-&amp;gt;&amp;gt;Storage: Check exists Namespace--&amp;gt;&amp;gt;Player: OK ダウンロードプロセス sequenceDiagram actor Player as プレイヤー participant Namespace as GS2-Datastore#Namespace participant Storage as Cloud Storage Player-&amp;gt;&amp;gt;Namespace: PrepareDownload Namespace--&amp;gt;&amp;gt;Player: Cloud Storage URL Player-&amp;gt;&amp;gt;Storage: Download Storage--&amp;gt;&amp;gt;Player: Payload アップロード処理中のダウンロード GS2-Datastore はすでにアップロードしたデータを更新することができます。 Prepare ReUpload を呼び出してから Done Upload を呼び出すまでの間は、更新前の古いファイルがダウンロード可能な状態となり、中途半端なデータがダウンロードされることはありません。</description>
    </item>
    <item>
      <title>GS2-Deploy</title>
      <link>/ja/microservices/deploy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/deploy/</guid>
      <description>GS2-Deploy は、GS2 の各マイクロサービスのネームスペースやマスターデータをコードとして管理し、宣言的にプロビジョニングするための機能を提供します。&#xA;AWS の CloudFormation に近い思想で設計されており、テンプレートファイルに記述したリソース定義を元に、複数のマイクロサービスをまたいだ環境構築・更新・削除をひとつのまとまり（スタック）として扱えます。&#xA;ゲーム開発においては、マスターデータの調整やネームスペース構成の変更が頻繁に発生します。&#xA;GS2-Deploy を活用することで、これらの変更を Git で管理し、GitHub などのリポジトリと連携した CI/CD パイプラインから自動的にデプロイする運用が可能になります。&#xA;スタック (Stack) スタックは、GS2 のリソースをまとめて管理する単位です。&#xA;スタックは YAML 形式で記述されたテンプレートを元に作成され、テンプレートに記述されたリソース定義に従って、ネームスペースやマスターデータなどを自動的に作成・更新・削除します。&#xA;1つのスタックには複数のマイクロサービスにまたがるリソースを含めることができ、ゲームを構成する一連の設定をひとまとまりとして扱えます。&#xA;graph LR Template[&amp;#34;テンプレート(YAML)&amp;#34;] --&amp;gt; Stack[&amp;#34;スタック&amp;#34;] Stack --&amp;gt; R1[&amp;#34;GS2-Account ネームスペース&amp;#34;] Stack --&amp;gt; R2[&amp;#34;GS2-Inventory マスターデータ&amp;#34;] Stack --&amp;gt; R3[&amp;#34;GS2-Mission マスターデータ&amp;#34;] Stack --&amp;gt; R4[&amp;#34;GS2-Showcase マスターデータ&amp;#34;] スタックは内部的に以下の状態を持ちます。&#xA;CREATE_PROCESSING: 作成処理中 CREATE_COMPLETE: 作成が完了し、リソースが利用可能 UPDATE_PROCESSING: 更新処理中 UPDATE_COMPLETE: 更新完了 ROLLBACK_PROCESSING: 失敗時のロールバック処理中 ROLLBACK_COMPLETE: ロールバック完了 DELETE_PROCESSING: 削除処理中 DELETE_COMPLETE: 削除完了 スタックの更新時に途中で失敗した場合は、自動的に変更前の状態に戻す《ロールバック》処理が行われます。&#xA;テンプレート テンプレートは YAML 形式で記述します。記述するセクションは以下です。&#xA;GS2TemplateFormatVersion: テンプレートのフォーマットバージョン Description: スタックの説明 Resources: 作成するリソースの定義 Outputs: スタック作成後に他システムから参照できる値の定義 以下はテンプレートの記述例です。</description>
    </item>
    <item>
      <title>GS2-Dictionary</title>
      <link>/ja/microservices/dictionary/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/dictionary/</guid>
      <description>GS2-Dictionary では、ゲーム内で入手したアイテムやキャラクターの図鑑機能を実現します。&#xA;基本的に、GS2-Inventory のシンプルな実装バージョンと捉えていただければよく、入手済み・未入手の2値の所持状態を管理できます。&#xA;図鑑以外の用途にも使用できます。たとえばアバターパーツの所持状態はいい例です。 アバターパーツを持っているかは、パーツごとに2値で状態管理できれば十分なので GS2-Dictionary 向きです。 他にも、達成済みのチュートリアルステップ管理、開放済みのカットシーン管理、解禁済みのBGM一覧など、二値の状態として表現できる要素全般に活用できます。&#xA;graph TD Boss[&amp;#34;ボスを討伐&amp;#34;] -- 報酬としてエントリー追加 --&amp;gt; Dictionary[&amp;#34;GS2-Dictionary に記録&amp;#34;] Shop[&amp;#34;ショップで購入&amp;#34;] -- 報酬としてエントリー追加 --&amp;gt; Dictionary Dictionary --&amp;gt; Browse[&amp;#34;プレイヤーが図鑑を閲覧&amp;#34;] Dictionary -- 所持証明署名 --&amp;gt; Formation[&amp;#34;GS2-Formation などで利用&amp;#34;] GS2-Inventory との違い スタックの概念の有無 GS2-Inventory は同一アイテムを複数所持する際に、スタックの概念があります。 これは、ポーションは最大99個スタック可能で、99個を超えると2個目のスタックを作成する というような仕様です。&#xA;この仕様があるため、GS2-Inventory では「ポーションの所持数量を取得する」というAPIの戻り値がリストになっています。 これはポーションが複数スタック存在する可能性があるためです。 この仕様はポーションのようなデータを管理するには都合がいいのですが、図鑑のようなシンプルな所持状態を管理するにはオーバースペックで、リストを取り扱うとコードの記述量も増加します。&#xA;入手処理で複数エントリーを登録可能 GS2-Inventory はポーションの入手とエリクサーの入手は別のAPIリクエストで処理する必要があります。 GS2-Dictionary は1回のAPIリクエストで最大100個のエントリーを登録できます。&#xA;これにより、クエストクリア時の報酬として「倒したモンスター全種類を一括で図鑑に登録」といった処理を1リクエストで効率的に行えます。&#xA;エントリーの検証と削除 GS2-Dictionary では、一度記録したエントリーを削除したり、特定のエントリーを入手済みか（または未入手か）を検証することができます。期間限定のイベントアイテムの所持状態をリセットしたり、特定のアイテムを入手している場合のみクエストを開始できるといった制限を設けるといった運用が可能です。&#xA;機能比較 項目 GS2-Dictionary GS2-Inventory 状態管理 所持/未所持の2値 数量・スタック管理 1リクエストでの登録数 最大100件 1件ずつ お気に入り機能 あり なし 所持証明署名 あり あり（ItemSet 単位） 主用途 図鑑、アバターパーツ、解禁状態 通常のアイテム所持 マスターデータ（EntryModel） 図鑑に登録可能なエントリーをマスターデータとして定義します。 EntryModel の主な設定項目は以下の通りです。</description>
    </item>
    <item>
      <title>GS2-Distributor</title>
      <link>/ja/microservices/distributor/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/distributor/</guid>
      <description>GS2-Distributor は、GS2 の各マイクロサービスをまたいだトランザクション処理を実現するための中核となるサービスです。 プレイヤーが「アイテムを消費して報酬を得る」「スタミナを消費してクエストを開始する」といった、複数のマイクロサービスをまたいだ一連の処理を安全に実行するための基盤を提供します。&#xA;GS2 では、プレイヤーにとってデメリットとなる操作を《消費アクション》、メリットとなる操作を《入手アクション》と呼びます。&#xA;GS2-Distributor は、これらのアクションをまとめた《トランザクション》を受け取り、適切なマイクロサービスに転送・実行することで、ゲームサイクルを構成する全ての処理を一貫した形で扱えるようにします。&#xA;トランザクションの仕組みについて詳しくは トランザクション を参照してください。&#xA;トランザクションを構成するアクション GS2 のトランザクションは、以下の3種類のアクションから構成されます。&#xA;graph LR Issue[&amp;#34;トランザクション発行&amp;lt;br/&amp;gt;(ストア・クエスト・ミッション など)&amp;#34;] --&amp;gt; Verify[&amp;#34;検証アクション&amp;#34;] Verify --&amp;gt; Consume[&amp;#34;消費アクション&amp;#34;] Consume --&amp;gt; Acquire[&amp;#34;入手アクション&amp;#34;] Acquire --&amp;gt; Done[&amp;#34;完了&amp;#34;] 検証アクション (VerifyAction) トランザクションの実行を開始する前に、消費アクションや入手アクションを実行できる状態にあるかを事前にチェックするアクションです。&#xA;例えば「特定のアイテムを所持していること」「ランクが一定値以上であること」「特定のクエストをクリア済みであること」などの条件を、消費を発生させる前に確認できます。&#xA;検証に失敗した場合、消費アクション・入手アクション は実行されません。&#xA;消費アクション (ConsumeAction) プレイヤーにとってデメリットとなる処理を表すアクションです。&#xA;アイテムの消費、通貨の消費、スタミナの消費、回数制限カウンターの増加などが該当します。&#xA;消費アクションが実行されると、各マイクロサービスは「実行済みであること」を証明する署名を発行します。 この署名は次の入手アクションの実行時に検証され、消費アクションを全て通過していなければ入手アクションは実行できない仕組みです。&#xA;入手アクション (AcquireAction) プレイヤーにとってメリットとなる処理を表すアクションです。&#xA;アイテムの入手、通貨の入手、経験値の入手、クエストの開始処理などが該当します。&#xA;入手アクションは、関連する全ての消費アクションが正常終了したことを示す署名が揃ったときにのみ実行されます。&#xA;トランザクションの構造 GS2 のトランザクションは「複数の消費アクション + 1つの入手アクション」という構造で発行されます。&#xA;トランザクションは GS2-Showcase / GS2-Quest / GS2-Mission など、各マイクロサービスのトランザクション発行 API の応答として受け取り、ゲームクライアントは取得したトランザクションを GS2-Distributor 経由で実行します。&#xA;なお、GS2 SDK にはトランザクションの実行を自動化する仕組みが組み込まれており、多くの場合、ゲーム側でトランザクションを意識的に実行する必要はありません。&#xA;発行 API の結果に含まれる TransactionDomain の WaitAsync を呼び出すだけで、消費アクション・入手アクションが正しい順番で実行され、結果を取得できます。</description>
    </item>
    <item>
      <title>GS2-Enchant</title>
      <link>/ja/microservices/enchant/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/enchant/</guid>
      <description>装備やキャラクターにユニークなランダムパラメーターを付与する機能を実現します。 RPG における武器の追加ステータス、ガチャで入手したカードに付与される個体値、ハクスラ系における装備の追加効果など、「同じアイテムでも個体ごとに性能が異なる」表現を実装する際に活用できます。&#xA;ランダムパラメーターには2種類用意しています。&#xA;バランスパラメーター レアリティパラメーター graph TD Item[&amp;#34;装備・キャラクターなど&amp;lt;br/&amp;gt;(propertyId で識別)&amp;#34;] --&amp;gt; Choose{パラメーター種別} Choose -- 総量を分配 --&amp;gt; Balance[&amp;#34;バランスパラメーター&amp;lt;br/&amp;gt;例: 攻撃力60/防御力40&amp;#34;] Choose -- 確率で複数付与 --&amp;gt; Rarity[&amp;#34;レアリティパラメーター&amp;lt;br/&amp;gt;例: クリティカル率&amp;#43;5%、HP&amp;#43;100&amp;#34;] Balance --&amp;gt; ReDraw1[&amp;#34;再抽選 / 値の直接設定&amp;#34;] Rarity --&amp;gt; ReDraw2[&amp;#34;再抽選 / 追加 / 値の直接設定&amp;#34;] ランダムパラメーターは「対象アイテムの識別子」となる propertyId をキーとして管理されます。 propertyId には GS2-Inventory のアイテムインスタンスIDや、GS2-Formation のフォーム識別子などを指定することで、装備個体ごとにパラメーターを紐付けることができます。&#xA;バランスパラメーター バランスパラメーターは用意された複数のパラメーターを定められた総量でランダムに分配します。 たとえば、攻撃力と防御力の2つのパラメーターを用意し、総量に100を設定した場合に攻撃力が60で抽選されると防御力は40になります。&#xA;マスター項目 説明 name バランスパラメーターモデル名 totalValue パラメーター値の合計総量 initialValueStrategy 初期値の決定方法（average：平均値 / random：ランダム） parameters 分配対象となるパラメーターの一覧 再抽選 バランスパラメーターは再抽選が可能です。 再抽選を行う際に、一部パラメーターの値を固定することができます。 パラメーターを一部固定することで、プレイヤーがパラメーターの最適化を効率的にを行う手段を提供することができます。&#xA;初期値 バランスパラメーターの初期値はランダム値にするか、平均値にするかを定めることが可能です。&#xA;値の直接設定 バランスパラメーターには、管理画面や API（トランザクションアクション）を通じて、抽選を経ずに任意の値を直接設定することも可能です。これにより、特定のイベント報酬として固定のステータスを持つ装備を配布するといった運用が可能になります。&#xA;レアリティパラメーター レアリティパラメーターは、バランスパラメーターのように一定のパラメーターに値を分配するのではなく、 装備やスキルに一定確率で追加パラメーターを付与するようなケースで利用できます。</description>
    </item>
    <item>
      <title>GS2-Enhance</title>
      <link>/ja/microservices/enhance/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/enhance/</guid>
      <description>この機能は開発者によっては全く理解できない機能でしょう。&#xA;しかし、日本をはじめとしたモバイルゲームのデファクトスタンダードのゲームシステムには必ず存在する機能です。 このゲームメカニクス自体は Game as a Service を実現する上で有用な知識になるはずですので、理解できない開発者向けにゲームメカニズムの解説を加えます。&#xA;強化機能のゲームメカニクスについて十分な知識がある場合はこの先の解説セクションは読み飛ばして問題ありません。&#xA;強化機能のゲームメカニクス 強化機能自体は非常にシンプルなゲームシステムで、素材アイテムを消費することで、対象の経験値を加算できる仕組みです。 バトルに参加して経験値を入手するという方法だけでなく、様々な方法でキャラクターや装備の育成ができるようになっています。 （装備にもレベルがあります）&#xA;さて、このゲームシステムがなぜ Game as a Service を実現するのに一役買っているかを説明しましょう。&#xA;一言で言えば、プレイ時間の水増しで活躍しています。&#xA;開発速度よりゲームのプレイ速度のほうが圧倒的に早いのは、みなさん十分理解しているでしょう。 私たちゲーム開発者が3年間かけて開発したゲームを、プレイヤーは10時間で終えてしまうわけです。 しかし、この差を埋めないと Game as a Service は成り立ちません。 つまり、プレイヤーのコンテンツ消費速度にデバフをかける必要があります。その魔法が強化のゲームシステムです。&#xA;一般的な Game as a Service のゲームは毎月1回はイベントを実施しています。 そのイベントには、なんらかのボスが存在し、プレイヤーはそのボスをイベント期間繰り返し討伐し続けることになります。 ボスはプレイヤーの成長段階に合わせて複数の難易度を用意し、討伐することでキャラクターや装備の強化素材を手に入れることができます。&#xA;集めた強化素材を使用して、キャラクターや装備の経験値に変換し成長させます。 キャラクターや装備を成長させると、より高難易度のボスにチャレンジできるようになります。&#xA;こうすることで、プレイヤー全員がイベントに参加しつつ、自分のキャラクターの成長段階にあわせた強化素材を入手し、キャラクターや装備を成長させる遊びを楽しむことができます。&#xA;実際には、強化素材を直接ボスがドロップすることは少ないかもしれません。 代わりにイベント期間だけチャレンジできるガチャがあり、そのガチャを引くためのポイントを集めて、ガチャを経由して素材を手に入れたり イベント期間だけ開店するショップで、ボスを討伐することで得られるゲーム内通貨を集めて、ショップから強化素材を購入するなど プレイヤーの判断でどこを優先して強化するかを決定できるようにするような工夫はありますが、最終的にはプレイヤーがキャラクターの育成に必要な時間を引き伸ばしてプレイ時間を水増ししています。&#xA;イベントを通して一貫して変わらないのは、プレイヤーのキャラクターが強くなるということです。 イベントが終わると強くなったキャラクターを使用して、より高難度の恒常コンテンツを楽しむなど、次の楽しみに繋げています。&#xA;graph TD BossBattle[&amp;#34;Boss Battle&amp;#34;] -- Acquire Event Point --&amp;gt; Shop Shop -- Buy Enhance Materials --&amp;gt; Enhance[&amp;#34;Enhance Character&amp;#34;] Enhance -- More Formidable --&amp;gt; BossBattle アーキテクチャ 強化には素材となるアイテムを管理している GS2-Inventory と、強化対象のキャラクターや装備を管理している GS2-Inventory または GS2-Dictionary。 そして、そのキャラクターや装備の経験値・レベルを管理している GS2-Experience を GS2-Enhance を通して操作することで実現しています。</description>
    </item>
    <item>
      <title>GS2-Exchange</title>
      <link>/ja/microservices/exchange/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/exchange/</guid>
      <description>GS2 が提供するマイクロサービスの中でも特に重用される機能です。 あらゆるマイクロサービスのリソースを、全く異なるマイクロサービスのリソースに変換する役割を担います。&#xA;ゲームの仕様にはリソースの交換に関するものが多数存在し、その度に GS2-Exchange の出番が発生します。&#xA;リソース交換の例 強化素材の変換 GS2-Inventory で管理する ★1 の強化素材 10個を、同じく GS2-Inventory で管理する ★2 の強化素材 1個と交換&#xA;6時間に1回アイテムを入手できる GS2-Stamina で管理する6時間で1回復するスタミナ1を、GS2-Inventory で管理するアイテムと交換&#xA;アイテムを売却 GS2-Inventory で管理するアイテムを、同じく GS2-Inventory で管理するゲーム内通貨と交換&#xA;交換の種類 GS2-Exchange はマスターデータで定められた交換レートで直ちに交換できるダイレクト交換と、 交換を実行した後、現実時間で一定時間経過したのちに交換結果を得られる非同期交換、 購入する度にコストが上昇するコスト上昇型交換の3つのモードが存在します。&#xA;flowchart LR Verify[&amp;#34;対価検証&amp;lt;br/&amp;gt;(verifyActions)&amp;#34;] --&amp;gt; Consume[&amp;#34;対価消費&amp;lt;br/&amp;gt;(consumeActions)&amp;#34;] Consume --&amp;gt;|timingType=direct| Acquire[&amp;#34;報酬付与&amp;lt;br/&amp;gt;(acquireActions)&amp;#34;] Consume --&amp;gt;|timingType=await| Await[&amp;#34;Await オブジェクト作成&amp;#34;] Await -. lockTime 経過 .-&amp;gt; Acquire2[&amp;#34;AcquireAsync で報酬受取&amp;#34;] 交換の挙動はネームスペース設定の enableDirectExchange / enableAwaitExchange でモードごとに有効化できます。 レートモデルの timingType を direct または await に切り替えることで個別のレートが即時交換と非同期交換のいずれで動作するかを選択できます。&#xA;非同期交換の挙動 非同期交換を使用した場合、交換を実行したタイミングで対価は消費され、 報酬を得る代わりに Await オブジェクトが作成されます。 Await オブジェクトの作成時刻からマスターデータで定義された交換待機時間（lockTime 秒）が経過すると報酬を受け取ることができます。</description>
    </item>
    <item>
      <title>GS2-Experience</title>
      <link>/ja/microservices/experience/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/experience/</guid>
      <description>Game as a Service において、成長要素は不可欠です。 キャラクターの成長をおこない、成長したキャラクターでさらに高難度のコンテンツに挑むゲームサイクルを実装するための経験値・ランク機能を提供します。&#xA;GS2-Experience は単一のキャラクターのレベルだけでなく、複数のプロパティ（キャラクター、武器、パーティ、ギルドなど）の成長を 1 つのマイクロサービスで一元管理できる柔軟な設計となっています。&#xA;ユースケース GS2-Experience が想定する代表的なユースケースは以下の通りです。&#xA;プレイヤーキャラクターのレベル管理 育成可能な装備品のレベル管理 ギルドやチームのランク管理 称号・バトルパスのレベル管理 スキルツリーの各スキル熟練度管理 graph LR Player[プレイヤー] --&amp;gt;|経験値加算| Exp[GS2-Experience] Exp --&amp;gt;|ランク計算| Status[Status] Status --&amp;gt;|閾値超え| RankUp[ランクアップ] RankUp --&amp;gt;|報酬付与| Inventory[GS2-Inventory] RankUp --&amp;gt;|スタミナ最大値更新| Stamina[GS2-Stamina] ランク GS2-Experience は経験値の値から自動的にランクの値を計算します。 そのためには、マスターデータを利用してランクアップの閾値となる経験値テーブルを定義する必要があります。 Experience Model でランクアップ閾値を管理し、その下に任意の値を持つプロパティIDをぶら下げることができます。 プロパティIDごとに経験値の値は管理され、経験値の値に基づいてランクが決定します。&#xA;Experience Model とプロパティIDの関係 graph TD N[Namespace] --&amp;gt; EM1[&amp;#34;ExperienceModel&amp;lt;br/&amp;gt;character_ssr&amp;#34;] N --&amp;gt; EM2[&amp;#34;ExperienceModel&amp;lt;br/&amp;gt;character_sr&amp;#34;] N --&amp;gt; EM3[&amp;#34;ExperienceModel&amp;lt;br/&amp;gt;weapon&amp;#34;] EM1 --&amp;gt; P11[&amp;#34;プロパティID:&amp;lt;br/&amp;gt;character-001&amp;#34;] EM1 --&amp;gt; P12[&amp;#34;プロパティID:&amp;lt;br/&amp;gt;character-002&amp;#34;] EM3 --&amp;gt; P31[&amp;#34;プロパティID:&amp;lt;br/&amp;gt;weapon-001&amp;#34;] EM3 --&amp;gt; P32[&amp;#34;プロパティID:&amp;lt;br/&amp;gt;weapon-002&amp;#34;] たとえば「キャラクターの種類ごとに必要経験値テーブルを変えたい」「キャラクター個別にランクキャップを変えたい」といったケースで、ExperienceModel をキャラクター種別ごとに用意し、プロパティID にキャラクターの個別 ID を割り当てることで実現できます。</description>
    </item>
    <item>
      <title>GS2-Formation</title>
      <link>/ja/microservices/formation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/formation/</guid>
      <description>所有しているリソースを組み合わせて1つの何かを編成するという仕様は一般的です。 複数のキャラクターを編成してパーティを作ったり、武器・防具といったアイテムを編成して装備するといったものです。&#xA;GS2-Formation は「どんなスロットが存在するか」「各スロットに何を装着できるか」「同じ種類の編成をいくつまで保持できるか」をマスターデータで定義し、プレイヤーごとの編成内容を管理するマイクロサービスです。&#xA;用語 graph LR MoldModel --&amp;gt; FormModel FormModel --&amp;gt; SlotModel PropertyFormModel --&amp;gt; SlotModel2[SlotModel] Mold --&amp;gt; Form Form --&amp;gt; Slot PropertyForm --&amp;gt; Slot2[Slot] 用語 説明 MoldModel 同種の編成（パーティ・装備セットなど）を複数保有するための型。容量（保存枠）の概念を持つ FormModel Mold に紐づく Form の構成定義。どのようなスロットを持つかを定義する PropertyFormModel プロパティIDで参照する単独の編成定義。Mold を介さず1キャラクター1編成のような形態で使う SlotModel スロットの定義。スロットに装着できるプロパティを正規表現で制限できる Mold プレイヤーごとの Mold 実体。capacity を持ち最大容量まで Form を作成可能 Form Mold 内の編成インスタンス。index で識別される PropertyForm プロパティID単位の編成インスタンス Slot プレイヤーが実際に装着しているリソースを保持する フォーム キャラクターの装備機能を実現するにあたって、武器・兜・籠手・胴・脚・足といった複数のスロットを用意し、 各スロットに適合するアイテムのみを装備できるように設定が可能です。&#xA;Form Model では、どのようなスロットが存在するのか、各スロットにはどのようなアイテムを編成できるのかをマスターデータとして定義します。&#xA;Mold と PropertyForm の使い分け flowchart LR subgraph Mold M1[&amp;#34;Form #0&amp;#34;] M2[&amp;#34;Form #1&amp;#34;] M3[&amp;#34;Form #2 (空き枠)&amp;#34;] end subgraph PropertyForm P1[&amp;#34;character-001 の編成&amp;#34;] P2[&amp;#34;character-002 の編成&amp;#34;] end Mold を使うケース: パーティ編成1〜N のように、編成セットを番号（index）で管理し、最大保有数（capacity）を成長要素として拡張したい場合 PropertyForm を使うケース: キャラクターごと・装備セットごとなど、外部のリソースID（propertyId）に1対1で結びつく編成 Mold の MoldModel は initialMaxCapacity（初期容量）と maxCapacity（拡張上限）を持ち、プレイヤーの成長やマネタイズ施策に応じてキャパシティを増減できます。</description>
    </item>
    <item>
      <title>GS2-Freeze</title>
      <link>/ja/microservices/freeze/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/freeze/</guid>
      <description>GS2-Freeze は、ゲームから利用する GS2 のマイクロサービスのバージョンを任意のタイミングで固定 (freeze) し、運営側が管理するタイミングでバージョンを更新できるようにするための機能です。&#xA;通常、GS2 のマイクロサービスは継続的にバージョンアップが行われ、ゲームは常に最新のバージョンの API を利用することになります。 多くのタイトルではこの運用で問題ありませんが、リリース直後の大規模タイトルや、長期にわたって安定性を最優先したい局面では、サービス側の更新タイミングをゲーム運営側でコントロールしたいというニーズが存在します。 GS2-Freeze はこのようなニーズに応えるための、エンタープライズ向けの機能です。&#xA;Tip GS2-Freeze はエンタープライズ向けの機能で、すべてのお客様に対して広範囲に提供される機能ではありません。 利用をご希望の場合はサポートまでお問い合わせください。 ステージ GS2-Freeze の中心となる概念が「ステージ (Stage)」です。 ステージは「特定の時点で固定された GS2 マイクロサービスのバージョンの集合」を表します。&#xA;各ステージには以下の情報が紐付きます。&#xA;ステージ名 (name): ステージを一意に識別する名前 ソースステージ名 (sourceStageName): バージョン情報の取得元となるステージの名前 ソート順 (sortNumber): 開発・検証・本番といったステージの並び順を表す番号 ステータス (status): ステージの状態 (プロモート中、ロールバック中など) ゲームのクライアント・サーバーは、利用したいステージを指定してGS2のAPIを呼び出すことで、そのステージに固定されたバージョンのマイクロサービスを利用できます。&#xA;graph LR Latest[&amp;#34;最新の GS2 マイクロサービス&amp;#34;] -- Promote --&amp;gt; StageDev[&amp;#34;Stage: dev&amp;#34;] StageDev -- Promote --&amp;gt; StageStg[&amp;#34;Stage: staging&amp;#34;] StageStg -- Promote --&amp;gt; StageProd[&amp;#34;Stage: production&amp;#34;] Game[&amp;#34;ゲームクライアント&amp;#34;] -- API リクエスト --&amp;gt; StageProd プロモート / ロールバック ステージのバージョンを更新する操作を「プロモート (Promote)」と呼びます。 プロモートを実行すると、ソースステージに固定されているバージョンが、対象のステージにコピーされます。 たとえば「staging ステージのバージョンを production ステージへプロモートする」ことで、検証済みのバージョンを本番に反映できます。</description>
    </item>
    <item>
      <title>GS2-Friend</title>
      <link>/ja/microservices/friend/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/friend/</guid>
      <description>ゲーム専用のソーシャルグラフを形成するための機能を提供します。 ソーシャルグラフはプラットフォーマーも提供している機能がありますが、ゲーム内で独自に形成することにも価値があります。&#xA;プラットフォーム全体で使用されるフレンド関係は登録を行うのに慎重になりがちです。 なぜなら「私はこの人と今遊んでるゲームは一緒に遊びたいけれど、他のゲームを一緒に遊びたいとは思っていない」というケースが存在するためです。 プラットフォーマーが提供するソーシャルグラフはリアルに近い関係性を反映したもので、ゲーム固有のソーシャルグラフはそのゲーム内の関係性を反映したものとして扱うと、プレイヤーはより気軽にフレンド機能を利用してくれます。&#xA;フレンド フレンドになるためには、双方向の同意関係が必要です。&#xA;フレンド関係を構築したいいずれかのプレイヤーが、相手にフレンドリクエストを送信し、フレンドリクエストを受け取ったプレイヤーがそれに同意することでフレンド関係が成立します。&#xA;フォロー フォローは相手の同意なく、関係を構築することができます。&#xA;フォローされている人は自分が誰にフォローされているかを一覧として知る術はありません。 この仕様はソーシャルネットワークのフォローの仕様を想像していると違和感があるかもしれません。 しかし、ゲーム内でフォロー機能を実装している多くのゲームの仕様をみていて、その必要性がないと判断しました。&#xA;自分をフォローしてくれているプレイヤーが自分のゴーストキャラクターと一緒に冒険に出た場合、 冒険で得た報酬を分け与えてくれるだけで十分で、誰が一緒に冒険してくれたのかにはあまり興味がなかっためです。&#xA;一覧で取得することはできませんが、冒険で得た報酬を分け与える処理として GS2-Inbox に報酬付きメッセージを届ける際に メッセージのペイロードに、一緒に冒険に出たプレイヤーのユーザーIDを載せることで、プロフィールを伝えること自体は可能です。&#xA;プロフィール GS2-Friend はプレイヤーのプロフィールを保持する領域を提供します。 プロフィールには任意の値を保持でき、スペースが3箇所存在します。&#xA;他プレイヤーが自由に参照できる「パブリックプロフィール」 フォローしているプレイヤーが参照できる「フォロワープロフィール」 フレンドが参照できる「フレンドプロフィール」 それぞれ、用途に合わせて使い分けることが可能です。&#xA;ブラックリスト ゲームを長期間プレイしていると、不快に感じるプレイヤーがいるかもしれません。 そのようなプレイヤーをリスト化して永続化する機能です。&#xA;あくまで永続化する機能が存在するだけで、ここに追加するだけでは何も機能は果たしません。 GS2-Matchmaking のマッチメイキング条件にリストを渡すなど別途ここに記録したリストを必要に応じて使用する必要があります。&#xA;スクリプトトリガー ネームスペースに followScript ・ unfollowScript ・ sendRequestScript ・ cancelRequestScript ・ acceptRequestScript ・ rejectRequestScript ・ deleteFriendScript ・ updateProfileScript を設定すると、フォローやフレンドリクエスト、プロフィール更新など各操作の前後でカスタムスクリプトを実行できます。スクリプトは同期・非同期の実行方式を選択でき、非同期では GS2-Script や Amazon EventBridge を介した外部連携にも対応します。これらの設定は GS2-Deploy や各言語向け CDK でテンプレート化して管理できます。&#xA;設定できる主なイベントトリガーとスクリプト設定名は以下の通りです。&#xA;followScript（完了通知: followDone）: フォローの前後 unfollowScript（完了通知: unfollowDone）: フォロー解除の前後 sendRequestScript（完了通知: sendRequestDone）: フレンドリクエスト送信の前後 cancelRequestScript（完了通知: cancelRequestDone）: フレンドリクエスト取消の前後 acceptRequestScript（完了通知: acceptRequestDone）: フレンドリクエスト承諾の前後 rejectRequestScript（完了通知: rejectRequestDone）: フレンドリクエスト拒否の前後 deleteFriendScript（完了通知: deleteFriendDone）: フレンド削除の前後 updateProfileScript（完了通知: updateProfileDone）: プロフィール更新の前後 プッシュ通知 設定できる主なプッシュ通知と設定名は以下の通りです。</description>
    </item>
    <item>
      <title>GS2-Gateway</title>
      <link>/ja/microservices/gateway/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/gateway/</guid>
      <description>GS2-Gateway はゲームクライアントとサーバーとの間で WebSocket による常時接続を維持し、サーバーから任意のタイミングで通知を送るための機能を提供します。&#xA;通常のゲームサーバーとの通信はクライアントからのリクエストに対してサーバーが応答する形式ですが、GS2-Gateway を使うことでサーバー起点の通知 (メッセージ着信・フレンド申請・ギルドからの招集など) をリアルタイムにクライアントへ届けることができます。&#xA;sequenceDiagram participant Client participant Gateway as GS2-Gateway participant Service as 各マイクロサービス Client-&amp;gt;&amp;gt;Gateway: WebSocket 接続 Client-&amp;gt;&amp;gt;Gateway: SetUserId(認証) Service-&amp;gt;&amp;gt;Gateway: SendNotification Gateway-&amp;gt;&amp;gt;Client: 通知ペイロード配信 主な機能 WebSocket 常時接続 GS2-Gateway は WebSocket プロトコルでクライアントからの接続を受け付け、ユーザーごとに接続情報を保持します。 他のマイクロサービスから「このユーザーに通知を送りたい」というリクエストが届くと、接続中のクライアントに対してペイロードを配信します。&#xA;主要な連携先は以下です。&#xA;GS2-Inbox: 新規メッセージの着信通知 GS2-Friend: フレンド申請・承認の通知 GS2-Guild: ギルド参加申請、ギルド内の状況変化通知 GS2-Matchmaking: マッチング完了通知 GS2-Distributor: トランザクション自動実行のための通知 GS2-JobQueue: 新規ジョブが積まれた際の通知 同時接続制御 ネームスペース内のユーザーは原則として同時に1セッションのみを保持できます。&#xA;SetUserId 実行時に allowConcurrentAccess を false にすると、すでに他のセッションが接続中の場合は、新しいセッション側で同時接続エラーとして検知できます。 true にすると、新しいセッションが接続された時点で古いセッションが切断されます。&#xA;この機能を利用することで、複数デバイスからの同時ログインを抑止できます。 GS2-Account のパスワード自動変更機能と組み合わせると、アカウント共有や引き継ぎ後の旧デバイスの締め出しをより強固に行うことができます。&#xA;Firebase Cloud Messaging 連携 (モバイルプッシュ通知) クライアントが起動していない (WebSocket が接続されていない) 状態でも通知を届けたい場合は、Firebase Cloud Messaging (FCM) との連携機能を利用できます。</description>
    </item>
    <item>
      <title>GS2-Grade</title>
      <link>/ja/microservices/grade/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/grade/</guid>
      <description>キャラクターや装備の育成には短期成長目標としてのレベルアップとは別にグレードアップを用意することが一般的な仕様です。 グレードアップすることによって、レベルキャップを引き上げることができ、キャラクターや装備をより強力に育成することが可能となります。&#xA;グレードアップの方法はいくつかの方法が考えられ、育成素材を消費することでグレードアップできるものや、同種のキャラクターや装備を合成することでグレードアップできるものもあります。 GS2-Grade は方法については問わず、グレードごとのレベルキャップを設定することで、GS2-Experience のレベルキャップの運用をより簡易に実装できるようにすることを目的としています。&#xA;graph LR Player[&amp;#34;プレイヤーの所持物&amp;#34;] -- グレードアップ --&amp;gt; Grade[&amp;#34;GS2-Grade&amp;lt;br/&amp;gt;(グレード値が上昇)&amp;#34;] Grade -- ApplyRankCap --&amp;gt; Experience[&amp;#34;GS2-Experience&amp;lt;br/&amp;gt;(ランクキャップが反映)&amp;#34;] Experience -- 経験値の獲得 --&amp;gt; LevelUp[&amp;#34;レベルアップ&amp;#34;] グレード グレードごとに GS2-Experience のランクキャップに設定する値を定義できます。 グレードはキャラクターや装備のような対象を一意に指す propertyId ごとに管理され、Status として個別に保持されます。&#xA;フィールド 説明 gradeName グレードモデル名 propertyId グレードを適用するリソースを示すGRN（例: GS2-Inventory の ItemSet） gradeValue 現在のグレード値（0始まりの整数） グレードの初期値 プロパティIDが正規表現にマッチするかによって初期グレードの値を設定できます。 例えば、GS2-Inventory の ItemModel の名前が SSR から始まる場合はグレード3、SR から始まる場合はグレード2で開始するようにすることで ItemModel の種類によって初期のランクキャップを変えることが可能です。&#xA;マスターデータの defaultGrades に複数の propertyIdRegex と defaultGradeValue の組を登録することで初期グレードを宣言します。&#xA;グレード引き上げ素材判定 グレードアップの方法として「同種のキャラクターや装備を合成する」ケースで、素材として使用しようとしているリソースが「同種のキャラクターや装備」であるかを判定する処理をサポートする機能が用意されています。 グレードのプロパティIDから正規表現によって、パラメーターを取り出して正規表現を構築し、素材として使用しようとしているリソースのプロパティIDがマッチするかを判定することで実現します。&#xA;例えば、GS2-Inventory の ItemSet が同種の ItemModel によるものかを判定する場合は以下のように正規表現を設定します。&#xA;propertyIdRegex: grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:(.</description>
    </item>
    <item>
      <title>GS2-Guard</title>
      <link>/ja/microservices/guard/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/guard/</guid>
      <description>GS2-Guard は GS2 のAPIエンドポイントに対するアクセスを保護するための機能を提供します。 特定の国や地域、IPアドレス、匿名化されたIP、ホスティング事業者のIP、評判の悪いIPなど、さまざまな条件で送信元を判定し、API リクエストを許可・拒否する仕組みを構築できます。&#xA;不正利用やチート行為、攻撃的なトラフィックからゲームサーバーを守るための、いわばゲーム向けの軽量な WAF (Web Application Firewall) として機能します。&#xA;GS2-Guard はゲームクライアントから直接利用する機能ではなく、運営側でブロッキングポリシーを定義し、他のGS2マイクロサービスのAPIに対して適用するための仕組みです。&#xA;ブロッキングポリシー GS2-Guard のネームスペースには BlockingPolicyModel を1つ設定でき、ここにアクセス制御のルールを記述します。 GS2の各マイクロサービスのネームスペースから、対象の GS2-Guard ネームスペースを参照することで、そのマイクロサービスへの API リクエストにブロッキングポリシーが適用されます。&#xA;ブロッキングポリシーで設定できる主な項目は以下の通りです。&#xA;既定の制限 (defaultRestriction): 既定で API リクエストを許可するか拒否するか 例外的に許可するサービス (passServices): 制限を適用しないGS2のサービス名のリスト 地理的制限 (locationDetection / locations / locationRestriction): リクエストの送信元の国・地域を判定し、特定の国・地域だけ許可・拒否する 匿名IP制限 (anonymousIpDetection / anonymousIpRestriction): Tor出口ノードやVPNなど、匿名化サービス経由のリクエストを判定し、許可・拒否する ホスティング事業者のIP制限 (hostingProviderIpDetection / hostingProviderIpRestriction): クラウド事業者などホスティング由来のIPからのリクエストを判定し、許可・拒否する 評判の悪いIPの制限 (reputationIpDetection / reputationIpRestriction): 攻撃の踏み台として知られるなど、悪評のあるIPからのリクエストを判定し、許可・拒否する 個別IPアドレス制限 (ipAddressesDetection / ipAddresses / ipAddressRestriction): 任意のIPアドレス・CIDRレンジを指定して、許可・拒否する graph LR Client[&amp;#34;ゲームクライアント&amp;#34;] -- API リクエスト --&amp;gt; Guard[&amp;#34;GS2-Guard&amp;lt;br/&amp;gt;(ブロッキングポリシー判定)&amp;#34;] Guard -- 許可 --&amp;gt; Microservice[&amp;#34;他のGS2マイクロサービス&amp;#34;] Guard -- 拒否 --&amp;gt; Block[&amp;#34;403 / アクセス拒否&amp;#34;] 検出と制限の分離 各検出条件 (Detection) は「無効」「有効」のいずれかを取り、検出条件が有効な場合に「対応する制限 (Restriction)」が適用されます。 これにより、検出だけ行ってログに残しておき、しばらく状況を確認したのちに本格的に拒否を有効化する、といった段階的な運用が可能です。</description>
    </item>
    <item>
      <title>GS2-Guild</title>
      <link>/ja/microservices/guild/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/guild/</guid>
      <description>複数のプレイヤーでチームを作成し、一緒になんらかの目標に向かって活動するための機能がギルド機能です。 GS2-Guild はギルドメンバーの管理と、ギルドメンバーが実行できる権限管理を行うためのマイクロサービスです。&#xA;GS2-Guild において「ギルド」は一人のプレイヤーとして処理され、ギルドユーザーと呼びます。 ギルドメンバーはギルドユーザーとして情報を取得・更新可能なフェデレーションを行うことで、ギルドメンバーが共通のプロパティを操作可能な状態を実現します。&#xA;例えば プレイヤーA プレイヤーB が所属している ギルドA があったと仮定します。 プレイヤーレベル や スタミナ といった一般的な情報が プレイヤーA や プレイヤーB に紐づいて管理されることは容易に想像できるでしょう。 これと同じように ギルドA に紐づいて ギルドレベル のようなプロパティを紐づけて管理することも容易に想像できるでしょう。&#xA;GS2-Guild の思想の特徴的な部分として プレイヤーA プレイヤーB と ギルドA の明確な区別はなく一律 ユーザー と捉えて処理されることにあります。 そのため、ギルドが持つプロパティには GS2 のあらゆるユーザーデータを扱うマイクロサービスを使用して管理できます。 たとえば、ギルドに GS2-Experience のランク・経験値を持たせることもできますし、GS2-Stamina のスタミナを持たせることもできますし、GS2-SkillTree のスキルツリーを持たせることもできます。&#xA;そして、GS2-Guild ではギルドメンバーを管理するとともに、ギルドメンバーが ギルドユーザー としてGS2のAPIを呼び出せるアクセストークンを発行する機能があります。 その際にギルドユーザーとしてどのAPIを呼び出せるのかをより細かく制御するためのアクセス権限制御機能があります。 この機能を利用すれば ギルドマスター の役職をもつプレイヤーのみが、ギルドユーザーとして GS2-Showcase の商品を購入できるような機能を実現できます。&#xA;ギルドモデル ギルド単位の設定は GuildModel で管理します。defaultMaximumMemberCount と maximumMemberCount でメンバーの初期値と上限を定め、inactivityPeriodDays にギルドマスターの無活動期間を指定すると自動的に後継者を選出できます。rejoinCoolTimeMinutes で脱退後の再参加クールタイム、maxConcurrentJoinGuilds や maxConcurrentGuildMasterCount で同時参加ギルド数やギルドマスターの人数制限も設定可能です。&#xA;ギルドメンバー ギルドに所属しているプレイヤーを指します&#xA;ロール ギルドに所属しているプレイヤーの役職に相当するエンティティで、実行可能なAPIの種類を定義します。 1つのギルドモデルに最大10種類のロールを定義できます。&#xA;権限設定 ロールには GS2-Identifier のポリシードキュメントを定義できます。 ギルドユーザーに変わる前の権限 &amp;amp;&amp;amp; ロールの権限 の範囲でAPIを呼び出すことができます。</description>
    </item>
    <item>
      <title>GS2-Identifier</title>
      <link>/ja/microservices/identifier/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/identifier/</guid>
      <description>GS2-Identifier は、GS2 マネージメントコンソールおよび GS2 の API にアクセスするためのクレデンシャルを管理するサービスです。&#xA;GS2 のオーナーアカウントに紐づくユーザー、各ユーザーに付与される権限 (セキュリティポリシー)、そして実際の API 呼び出しに利用するクライアントID / クライアントシークレットを発行・管理します。&#xA;GS2-Identifier はゲームクライアントから直接呼び出すことを想定していないサービスであり、運営側のセットアップやデプロイ自動化、CI/CD パイプラインなどで利用されます。&#xA;IAM 的な設計 GS2-Identifier は、クラウドサービスにおける IAM (Identity and Access Management) に相当する概念を提供します。&#xA;主要な要素は次の通りです。&#xA;ユーザー: GS2 オーナーアカウント配下に作成する個別の利用主体 セキュリティポリシー: 操作可能なリソースとアクションを記述したポリシー文書 セキュリティポリシーのアタッチ: ユーザーに対してセキュリティポリシーを紐づけ、権限を付与 クライアントID / クライアントシークレット: ユーザーごとに発行される API 認証情報 graph TD Owner[&amp;#34;GS2 オーナー&amp;#34;] --&amp;gt; User[&amp;#34;ユーザー&amp;#34;] User --&amp;gt;|アタッチ| Policy[&amp;#34;セキュリティポリシー&amp;#34;] User --&amp;gt;|発行| Credential[&amp;#34;クライアントID&amp;lt;br/&amp;gt;クライアントシークレット&amp;#34;] Credential --&amp;gt;|認証| API[&amp;#34;GS2 API&amp;#34;] Policy --&amp;gt;|権限制御| API セキュリティポリシー セキュリティポリシーは、JSON 形式で記述された権限定義です。許可するリソース GRN と、許可するアクション (Gs2Account:CreateAccount のような操作識別子) を記述することで、そのポリシーがアタッチされたユーザーに対してどのような操作を許可するかを表現します。&#xA;開発・運用の各フェーズに応じて適切なポリシーを設計し、ユーザーごとに最小権限を付与する運用が推奨されます。&#xA;クライアントID / クライアントシークレット ユーザーに対して発行されるクライアントIDとクライアントシークレットは、GS2 API を呼び出す際の認証情報として利用されます。1ユーザーに対して複数のクレデンシャルを発行することができ、用途やデバイスに応じて使い分けることができます。</description>
    </item>
    <item>
      <title>GS2-Idle</title>
      <link>/ja/microservices/idle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/idle/</guid>
      <description>ゲームをプレイしていない期間に応じて報酬を付与する仕組みを実現します。 スマートフォン向けゲームでは「久しぶりにアプリを起動したら大量の報酬を獲得できた」というデザインがプレイヤーの再訪促進に強く寄与します。 GS2-Idle はそのような放置報酬を簡単に組み込むためのマイクロサービスです。&#xA;graph LR Start[&amp;#34;待機開始&amp;#34;] --&amp;gt; Idle[&amp;#34;放置時間が経過&amp;#34;] Idle --&amp;gt; Prediction[&amp;#34;獲得予定報酬を取得&amp;#34;] Prediction --&amp;gt; Receive[&amp;#34;報酬を受取&amp;#34;] Receive --&amp;gt; Start カテゴリー 放置報酬は複数用意することができます。 プレイヤーはカテゴリー毎に1つの待機時間を持つことができます。&#xA;カテゴリーは「キャラクターのスタミナ自然回復」「採掘場の自動採掘」「素材の自動生成」など、それぞれ独立した放置報酬の単位として活用できます。&#xA;放置時間 カテゴリーには放置時間 何分毎に報酬を得られるかと、放置時間の最大値の初期値を設定できます。 放置時間の最大値はプレイヤーごとに引き上げることが可能です。報酬受取後に未消化の待機時間をリセットするか次回に持ち越すかは rewardResetMode で選択できます。&#xA;rewardResetMode 振る舞い Reset 報酬受取時に経過時間が0にリセットされます。獲得タイミングのあまり時間は破棄されます。 CarryOver 報酬受取時に獲得済みのインターバル分だけ経過時間から減算されます。あまり時間は次回の待機にも引き継がれます。 放置報酬 放置報酬には放置時間が一定時間経過すると得られるアイテムの一覧を定義します。 付与する報酬は、「経験値＋アイテム」のように複数(最大10個)設定することができます。&#xA;さらに、待機時間内で報酬の内容にバリエーションをもてるように、複数の報酬リストを設定することができます。&#xA;例えば、10分待機する毎に「経験値+10」と「強化素材Lv.1 x 1」を入手できる。 ただし、60分毎のタイミングでは上記の報酬の代わりに「経験値+20」と「強化素材Lv.2 x 1」を入手できる。 上記のような例を考えてみましょう。&#xA;この場合、放置報酬には以下のようなテーブルを設定します。&#xA;- 報酬1 報酬2 1 経験値+10 強化素材Lv.1 x 1 2 経験値+10 強化素材Lv.1 x 1 3 経験値+10 強化素材Lv.1 x 1 4 経験値+10 強化素材Lv.1 x 1 5 経験値+10 強化素材Lv.</description>
    </item>
    <item>
      <title>GS2-Inbox</title>
      <link>/ja/microservices/inbox/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/inbox/</guid>
      <description>システムや運営からプレイヤーにメッセージやプレゼントを届ける仕組みを実現します。&#xA;ゲームでは「お詫び配布」「ログインボーナス」「課金特典」「イベント報酬」など、プレイヤーに非同期で報酬を届けるシチュエーションが頻繁に発生します。 GS2-Inbox はメッセージのキューイング、未読／既読管理、報酬の添付、有効期限による自動削除を提供し、ゲームのライフサイクル全般を通じてプレゼントボックス機能を担います。&#xA;sequenceDiagram participant Ops as 運営 / サーバー participant Inbox as GS2-Inbox participant Player as プレイヤー Ops-&amp;gt;&amp;gt;Inbox: メッセージ送信 (報酬付き) Inbox--&amp;gt;&amp;gt;Player: receiveNotification 通知 Player-&amp;gt;&amp;gt;Inbox: メッセージ一覧取得 Player-&amp;gt;&amp;gt;Inbox: メッセージ開封 (Read) Inbox-&amp;gt;&amp;gt;Player: 添付報酬を付与 (トランザクション) Player-&amp;gt;&amp;gt;Inbox: 既読メッセージの削除 メッセージ 既読管理 メッセージは既読状態をもちます。 既読状態のメッセージをリストに残すか、リストから削除するかを設定が可能です。&#xA;ネームスペース設定の isAutomaticDeletingEnabled を有効にすると、既読化のタイミングでメッセージが自動削除されます。 プレゼントボックスの一覧には未受領のメッセージだけを残す仕様を、サーバー側の追加実装なしで実現できます。&#xA;報酬の添付 メッセージには報酬を添付することが可能です。 既読フラグを立てる代わりに、メッセージに添付された報酬を受け取ることができます。&#xA;添付できる報酬は GS2 のトランザクション機構を介した入手アクション（readAcquireActions）として表現されるため、GS2-Inventory GS2-Money GS2-Experience など、任意のマイクロサービスのリソースを報酬として配布できます。&#xA;有効期限 メッセージには有効期限（expiresAt）を設定できます。 有効期限を迎えたメッセージは、未読状態、開封後の既読状態にかかわらず、自動的に削除されます。&#xA;添付された報酬を受け取っていなかったとしても削除されます。&#xA;メッセージのライフサイクル stateDiagram-v2 [*] --&amp;gt; Unread: メッセージ受信 Unread --&amp;gt; Read: 開封 (Read) Unread --&amp;gt; Expired: 有効期限切れ Read --&amp;gt; Deleted: 削除 (Delete) Read --&amp;gt; AutoDeleted: isAutomaticDeletingEnabled Read --&amp;gt; Expired: 有効期限切れ Deleted --&amp;gt; [*] AutoDeleted --&amp;gt; [*] Expired --&amp;gt; [*] グローバルメッセージ 特定のプレイヤーではなく、全プレイヤーに対して同一のメッセージを配布したい場合は「グローバルメッセージ」を使用します。 グローバルメッセージはマスターデータとして定義し、各プレイヤーが ReceiveGlobalMessageAsync を呼び出した際に、まだ受け取っていないメッセージをそのプレイヤーの受信ボックスにコピーします。</description>
    </item>
    <item>
      <title>GS2-Inventory</title>
      <link>/ja/microservices/inventory/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/inventory/</guid>
      <description>プレイヤーが所持しているアイテムの情報を管理します。&#xA;アイテムの管理には3種類の方式があります。 1つ目はスタンダードインベントリ、2つ目はシンプルインベントリ、3つ目は巨大インベントリです。&#xA;スタンダードインベントリは以下のような機能を有します&#xA;インベントリの容量制限 同一アイテムを一定数量ごとに複数のスタックに分割 アイテムに有効期限を設定 シンプルインベントリはスタンダードインベントリが持つような機能は持ちません しかし、その代わりに複数のアイテムの増減処理をまとめて行うことができます。 シンプルインベントリをうまく利用することで、APIのコール数を削減することが可能です。&#xA;巨大インベントリはシンプルインベントリと同じくスタンダードインベントリが持つような機能は持ちません。 シンプルインベントリのように複数のアイテムの増減処理をまとめて行うこともできません。 その代わり、アイテムの所持数量を 64bit 整数の範囲を超えて保持することができます。&#xA;スタンダードインベントリ インベントリ プレイヤーが所持するカバンに相当するエンティティです。 カバンには容量が設定可能で、その容量を超えるアイテムを格納することはできません。&#xA;アイテム アイテムは所持品の種類を定義します。 アイテムには、スタック可能な最大数量を指定できます。&#xA;たとえば、ポーションというアイテムの種類が存在し、最大99個スタック可能とした場合 インベントリの容量の消費量1で99個までポーションを所持することが可能となります。&#xA;さらに、アイテムには複数スタックを所持可能かを指定できます。 複数スタック所持を可能に設定すると、100個以上のポーションを所持できるようになり、 例えば、150個のポーションを所持している場合は 99 個スタックされたポーションと、51個スタックされたポーションの2つのエントリが作成され、 インベントリの容量が 2 消費されます。&#xA;複数スタック所持を不可能の設定した場合、99個を超えるポーションを所持することはできなくなり それ以上ポーションを入手しても破棄されます。&#xA;アイテムの有効期限 アイテムには有効期限を設定できます。 有効期限を設定したアイテムは、設定時刻をすぎると自動的にインベントリから消去されます。&#xA;有効期限の設定されたアイテムは有効期限ごとに異なるスタックが作成され、それぞれインベントリの容量を消費します。 そのため、複数スタックを所持できないアイテムに有効期限をつけて配布すると、最初に入手した有効期限のアイテム（あるは最初に入手した有効期限のないアイテム）以外は破棄されます。&#xA;アイテムを使用する際には明示的に有効期限（アイテムセット名）を指定しなければ、有効期限の近いアイテムから優先して消費されます。&#xA;アイテムセット 1種類のアイテムを複数スタック管理できるよう、アイテムの種類をまとめたアイテムセットというエンティティが存在します。 このエンティティはスタックごとにアイテムの種類を表すIDとは別に、スタック固有のIDをもちます。 このスタック固有のIDを使用すれば、「ポーション x 99」と「ポーション x 51」のそれぞれのスタックを明確に区別することができます。&#xA;参照元 (Reference Of) アイテムセットには「参照元」情報を付与することができます。これは、特定のアイテムが他のエンティティ（例：キャラクターの装備、パーティへの編成、マーケットへの出品など）から使用されていることを示すために利用されます。 参照元が1つ以上設定されているアイテムセットは、たとえ所持数量が十分であっても消費したり削除したりすることができなくなります。これにより、装備中のアイテムを誤って売却したり、強化素材にしてしまうといったミスをシステムレベルで防ぐことができます。&#xA;ポーションを消費する際に、ポーションを示すアイテムIDに加えてスタック固有のIDを指定することで、どちらのスタックから消費するかを明示することができます。 スタック固有のIDは省略可能で、省略した場合は最も少ないスタックから優先して使用されます。&#xA;シンプルインベントリ シンプルインベントリ プレイヤーが所持するカバンに相当するエンティティです。 複数のシンプルアイテムを束ねる存在で、シンプルインベントリでは特にプロパティを持ちません。&#xA;シンプルアイテム アイテムは所持品の種類を定義します。&#xA;巨大インベントリ 巨大インベントリ プレイヤーが所持するカバンに相当するエンティティです。 複数の巨大アイテムを束ねる存在で、巨大インベントリでは特にプロパティを持ちません。&#xA;巨大アイテム アイテムは所持品の種類を定義します。&#xA;スクリプトトリガー ネームスペースに acquireScript・overflowScript・consumeScript・simpleItemAcquireScript・simpleItemConsumeScript・bigItemAcquireScript・bigItemConsumeScript を設定すると、アイテムの入手・消費処理の前後でカスタムスクリプトを呼び出せます。スクリプトは同期・非同期の実行方式を選択でき、非同期では GS2-Script や Amazon EventBridge を介した外部処理にも対応します。</description>
    </item>
    <item>
      <title>GS2-JobQueue</title>
      <link>/ja/microservices/job_queue/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/job_queue/</guid>
      <description>GS2-JobQueue はゲームサーバー上で実行する処理を非同期に積み上げるためのジョブキュー機能を提供します。&#xA;ゲームの処理には、すぐに結果を返す必要のないものや、サーバー側で時間をかけて段階的に進めたいものがあります。 そのような処理を「ジョブ」としてキューに登録しておき、後からプレイヤーがアクセスしたタイミングや明示的なAPI呼び出しによって実行することができます。&#xA;主な用途 GS2-Script を非同期に実行するための実行基盤 長時間処理を細かいステップに分割し、ステップごとにジョブとして登録して順次処理する ログイン中に発生したリワード配布などをまとめてサーバー側でトランザクション発行・実行 他マイクロサービスの完了通知ハンドラとして、後続処理を非同期に行う graph LR Producer[&amp;#34;ジョブ登録元&amp;lt;br/&amp;gt;(他のマイクロサービス / GS2-Script)&amp;#34;] --&amp;gt; Queue[&amp;#34;GS2-JobQueue&amp;#34;] Queue --&amp;gt; Run[&amp;#34;プレイヤーが Run を実行&amp;lt;br/&amp;gt;または 自動実行&amp;#34;] Run --&amp;gt; Script[&amp;#34;GS2-Script&amp;#34;] Script -- 成功 --&amp;gt; Result[&amp;#34;JobResult として記録&amp;#34;] Script -- 失敗 --&amp;gt; Retry{&amp;#34;最大試行回数&amp;lt;br/&amp;gt;に到達?&amp;#34;} Retry -- No --&amp;gt; Queue Retry -- Yes --&amp;gt; DeadLetter[&amp;#34;DeadLetterJob として保管&amp;#34;] 自動実行モード ネームスペースの設定で enableAutoRun を有効にすると、各マイクロサービスのAPI処理の最後にユーザーのキューに積まれているジョブを自動的に実行します。 プレイヤーがアプリを操作するだけで、サーバー側に積まれたジョブが順次消化されていきます。&#xA;enableAutoRun を無効にする場合は、クライアントから明示的に Run API を呼び出してジョブを実行する必要があります。&#xA;ジョブ結果 ジョブの実行結果は試行回数(tryNumber)ごとに JobResult として記録されます。 JobResult には GS2-Script の終了コード・実行ログ・結果ペイロードなどが含まれ、後から実行履歴を確認することができます。&#xA;通知設定 ネームスペースの設定で runNotification ・ pushNotification を構成しておくと、ジョブが実行されたとき、または新規にジョブがキューに積まれたときに GS2-Gateway を経由してクライアントへ通知できます。 この通知をフックに、クライアント側で残り情報を再取得するといった連携が可能です。</description>
    </item>
    <item>
      <title>GS2-Key</title>
      <link>/ja/microservices/key/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/key/</guid>
      <description>GS2-Key は、GS2 内で利用される暗号化キー (共通鍵) を管理し、AES による暗号化・復号 API を提供するサービスです。&#xA;機密性の高いデータをサーバー側で暗号化・復号する用途のほか、GS2 自身が内部的に利用する各種署名・暗号化処理の鍵管理基盤としても利用されます。&#xA;暗号化キーの管理 GS2-Key では、暗号化キーをネームスペース配下に作成して管理します。&#xA;キーには次のような情報を持たせることができます。&#xA;キー名 説明 (description: 用途や説明など、運用上の識別に利用) 実際の暗号化に使用される秘密鍵 (シークレット) は、キーの作成時に GS2 側で安全に生成され、GS2 内部に保管されます。秘密鍵自体をクライアント側に取り出して利用する設計ではなく、暗号化・復号のリクエストを GS2-Key に送信して結果のみを受け取る仕組みとなっています。&#xA;graph TD App[&amp;#34;アプリケーション&amp;#34;] --&amp;gt;|Encrypt(平文)| Key[&amp;#34;GS2-Key&amp;#34;] Key --&amp;gt;|暗号文| App App --&amp;gt;|サーバーに保管&amp;lt;br/&amp;gt;または送信| Storage[&amp;#34;データストア&amp;#34;] Storage --&amp;gt;|暗号文| App2[&amp;#34;アプリケーション&amp;#34;] App2 --&amp;gt;|Decrypt(暗号文)| Key Key --&amp;gt;|平文| App2 利用シーン GS2 内部での利用 GS2-Account のパスワード署名や、GS2-Auth のトークン発行など、GS2 内部で機密データを扱うマイクロサービスは GS2-Key が管理するキーを利用しています。各マイクロサービスのネームスペースを作成する際にキーを指定することで、そのネームスペース内で必要となる暗号化処理に利用されます。&#xA;アプリケーション独自データの暗号化 アプリケーション独自で機密情報を扱う場合にも、GS2-Key の Encrypt / Decrypt API を直接呼び出して暗号化・復号を行うことができます。秘密鍵をアプリケーション内に組み込むことなく、サーバーサイドでの暗号化が実現できます。&#xA;機密性の高い設定値や、外部サービスへの認証情報などを GS2 側で安全に管理したい場面で活用できます。&#xA;トランザクションアクション GS2-Key ではトランザクションアクションを提供していません。&#xA;マスターデータ管理 GS2-Key ではマスターデータの登録はありません。マネージメントコンソール、GS2-Deploy、API を通じてキーを作成・管理します。</description>
    </item>
    <item>
      <title>GS2-Limit</title>
      <link>/ja/microservices/limit/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/limit/</guid>
      <description>プレイヤーが行動できる回数を制限するための仕組みです。 「1日に5回までガチャを引ける」「1週間に1度だけ受け取れる報酬」など、ゲーム内で頻出する回数制限を一元的に管理できます。&#xA;graph LR Action[&amp;#34;プレイヤーの行動&amp;#34;] --&amp;gt; CountUp[&amp;#34;カウントアップ (maxValue 指定)&amp;#34;] CountUp -- 上限に達していない --&amp;gt; Success[&amp;#34;処理を許可&amp;#34;] CountUp -- 上限に達している --&amp;gt; Failure[&amp;#34;処理を拒否&amp;#34;] Reset[&amp;#34;リセット周期&amp;#34;] --&amp;gt; Counter[&amp;#34;カウンターを 0 に戻す&amp;#34;] カウンター プレイヤーの行動回数を表現するためのエンティティで、 カウンターの値を上昇する際に許容可能な最大値を指定してカウントアップを試みることで最大値を超える場合はカウントアップが失敗し、後続の処理を失敗させることができるメカニズムで回数制限を実現します。 このとき、カウンターに対して最大値が存在するのではなく、カウントアップアクションに最大値が設定できるのが特徴です。&#xA;たとえば、スタミナの回復処理を例に考えてみます。 多くのゲームでは1日にスタミナを回復できる回数には上限が設けられています。 そして、回復をすればするほど、回復に必要な金額が上昇していきます。&#xA;このような仕様は以下のように表現できます。&#xA;ティアー 回復に必要なコスト 実行できる回数 Tier.1 5 10 Tier.2 10 10 Tier.3 20 10 Tier.4 40 10 そして、これを 回数制限のカウントアップアクションと、回復に必要なコストとして捉えたのが以下です。&#xA;ティアー カウンター名 カウンターの上昇量 カウンターの最大値 回復に必要なコスト Tier.1 RecoveryStaminaCounter 1 10 5 Tier.2 RecoveryStaminaCounter 1 20 10 Tier.3 RecoveryStaminaCounter 1 30 20 Tier.4 RecoveryStaminaCounter 1 40 40 全てのティアーで同じカウンターを使用し、回復に必要なコストが安いものほど、カウンターの最大値を低く設定しています。</description>
    </item>
    <item>
      <title>GS2-Lock</title>
      <link>/ja/microservices/lock/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/lock/</guid>
      <description>GS2-Lock は、リソース単位で動作するミューテックスを提供し、複数のサーバープロセス・複数の処理系から同一リソースへ同時にアクセスすることを防ぐための分散排他制御サービスです。&#xA;ゲームの運営では「同じプレイヤーに対して同じ処理を二重に実行してしまう」「異なるバックエンドサーバーが同じデータを同時に書き換えてしまう」といった問題が容易に発生します。GS2-Lock を利用すると、これらの問題をマイクロサービスとして提供される共有ミューテックスによって防ぐことができます。&#xA;ミューテックスの基本 GS2-Lock のロックは「ネームスペース」「ユーザーID」「プロパティID」の組み合わせによって識別される「ミューテックス」というリソースに対して取得します。&#xA;プロパティID には、排他制御を行いたいリソースを一意に識別する任意の文字列を指定します。例えば「ガチャの抽選処理」「アイテムの所持数更新」「外部連携への通知送信」など、二重実行を避けたい処理ごとに異なるプロパティIDを割り当てる運用が考えられます。&#xA;graph TD Server1[&amp;#34;バックエンドサーバーA&amp;#34;] --&amp;gt;|Lock| Mutex[&amp;#34;GS2-Lock&amp;lt;br/&amp;gt;ミューテックス&amp;#34;] Server2[&amp;#34;バックエンドサーバーB&amp;#34;] --&amp;gt;|Lock 待機| Mutex Mutex --&amp;gt;|取得成功| Server1 Server1 --&amp;gt;|Unlock| Mutex Mutex --&amp;gt;|取得成功| Server2 トランザクションID ロックを取得する際にはトランザクションIDを指定します。同じトランザクションIDで同じミューテックスに対して再帰的にロックを取得した場合、参照カウントが加算されるリエントラントロックとして振る舞います。解放時には同数の Unlock を実行することでロックが完全に解放されます。&#xA;異なるトランザクションIDによる二重取得は競合となり、先に取得したセッションがロックを解放するまで待機状態となります。&#xA;TTL による自動解放 ロックには TTL (Time To Live) を設定でき、TTL を経過するとロックは自動的に解放されます。&#xA;これにより、ロックを取得した処理系が異常終了したり、ネットワーク障害でロック解放処理が呼び出されなかった場合でもデッドロックを防ぐことが可能です。TTL は処理の最大想定実行時間に応じて適切な値を設定してください。&#xA;マルチタイトル・複数バックエンド間での排他 GS2-Lock は GS2 のマイクロサービスとして提供されるため、マルチタイトル間や複数のバックエンドサーバー、複数のリージョン間で共通の排他制御を実現できます。&#xA;GS2-Script から呼び出すことで、サーバーサイドスクリプトの内部から他のスクリプト実行や外部処理との排他制御を行うことも可能です。&#xA;トランザクションアクション GS2-Lock ではトランザクションアクションを提供していません。&#xA;マスターデータ管理 GS2-Lock ではマスターデータの登録はありません。ネームスペースを作成するだけで利用を開始できます。&#xA;実装例 GS2-Lock は管理API/サーバーサイドAPI中心のマイクロサービスです。ゲームエンジン用 SDK (Unity/Unreal Engine) には専用の Domain クラスが提供されていません。&#xA;主に GS2-Script 内のサーバーサイドロジックや、自社のバックエンドサーバーから利用することを想定しているため、ゲームクライアントから直接呼び出すのではなく、以下のいずれかの手段で操作することを推奨します。&#xA;GS2-Script からの呼び出し (サーバーサイドスクリプト経由の排他制御) 各種言語向け一般SDK (C# / Go / Python / TypeScript / PHP / Java) によるバックエンドサーバーからの呼び出し マネジメントコンソール (動作確認・運用時) GS2 CLI 各種SDKの詳細は対応するリファレンスページを参照してください。</description>
    </item>
    <item>
      <title>GS2-Log</title>
      <link>/ja/microservices/log/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/log/</guid>
      <description>GS2-Log はゲームに組み込まれた全ての Game Server Services マイクロサービスのAPIアクセスログを集約・保存する機能を提供します。&#xA;ゲームの運営において「いつ・誰が・どのAPIを・どのような引数で呼び出し・どのような結果を返したか」を後から追跡できることは非常に重要です。 不正なプレイヤーの調査、ゲームバランスの確認、お問い合わせ対応、KPI 集計などのあらゆる運用業務の基盤として GS2-Log のデータを活用できます。&#xA;GS2-Log の機能はゲームクライアントから直接利用するものではなく、運営側のツールやデータ分析基盤と連携して活用するためのものです。&#xA;ログの種類 GS2-Log は以下の4種類のログを記録します。&#xA;AccessLog 各マイクロサービスのAPIが呼び出されるたびに記録されるログです。&#xA;timestamp: API呼び出し時刻 requestId: リクエストを一意に識別するID service: 呼び出されたマイクロサービス名 method: 呼び出されたAPIメソッド名 userId: 呼び出し元のユーザーID request: リクエストパラメーター (JSON文字列) result: 応答内容 (JSON文字列) API単位の細かい挙動追跡が可能で、不具合の調査や行動ログの分析に利用できます。&#xA;IssueStampSheetLog トランザクションが発行された際に記録されるログです。 トランザクションは Game Server Services における入手・消費アクションのまとめ実行単位であり、発行時の消費アクション一覧と、何をきっかけに発行されたのかを記録します。&#xA;timestamp: 発行時刻 transactionId: トランザクションID(トランザクション発行単位の識別子) service: 発行元マイクロサービス method: 発行元API userId: ユーザーID action: 入手アクション args: アクションの引数 tasks: トランザクションに含まれる消費アクション一覧 ExecuteStampSheetLog / ExecuteStampTaskLog トランザクション全体・消費アクションが実行された際に記録されるログです。&#xA;IssueStampSheetLog と組み合わせることで、いつ発行されたトランザクションが、いつどのように実行されたかをトレースできます。 この情報は、リプレイ攻撃や不正な多重実行、サービス間の整合性問題の検知に活用できます。&#xA;sequenceDiagram participant Client participant ServiceA as マイクロサービスA participant Sheet as トランザクション participant ServiceB as マイクロサービスB participant Log as GS2-Log Client-&amp;gt;&amp;gt;ServiceA: 報酬リクエスト ServiceA-&amp;gt;&amp;gt;Log: AccessLog ServiceA-&amp;gt;&amp;gt;Sheet: トランザクション発行 ServiceA-&amp;gt;&amp;gt;Log: IssueStampSheetLog Sheet-&amp;gt;&amp;gt;ServiceB: 消費アクション実行 ServiceB-&amp;gt;&amp;gt;Log: ExecuteStampTaskLog Sheet-&amp;gt;&amp;gt;Log: ExecuteStampSheetLog ログのエクスポート先 GS2-Log で記録したログは、ネームスペースの設定で指定したエクスポート先に転送できます。</description>
    </item>
    <item>
      <title>GS2-LoginReward</title>
      <link>/ja/microservices/login_reward/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/login_reward/</guid>
      <description>ゲームに毎日ログインしたプレイヤーへ報酬を配布する仕組みです。 日替わりのアイテム配布や、7日／30日サイクルでループするログインボーナス、見逃した日の報酬を後から補償する機能など、運営現場でよく使われるパターンを汎用的に提供します。&#xA;モード ログインボーナスの提供方法は《スケジュールモード》と《ストリーミングモード》2種類の方式があります。&#xA;graph LR Mode{ボーナスモード} --&amp;gt; Schedule[&amp;#34;スケジュールモード&amp;lt;br/&amp;gt;(mode: schedule)&amp;#34;] Mode --&amp;gt; Streaming[&amp;#34;ストリーミングモード&amp;lt;br/&amp;gt;(mode: streaming)&amp;#34;] Schedule -- 日付に固定 --&amp;gt; SchEx[&amp;#34;1日目=金貨、2日目=銀貨…&amp;lt;br/&amp;gt;取り逃しはスキップ&amp;#34;] Streaming -- 順番に消化 --&amp;gt; StrEx[&amp;#34;1個目=金貨、2個目=銀貨…&amp;lt;br/&amp;gt;取り逃しても次回に持ち越し&amp;#34;] Streaming --&amp;gt; Repeat{&amp;#34;repeat 設定&amp;#34;} Repeat -- enabled --&amp;gt; Loop[&amp;#34;終端到達後に先頭から再開&amp;#34;] Repeat -- disabled --&amp;gt; Stop[&amp;#34;終端で停止&amp;#34;] スケジュールモード GS2-Schedule のイベントと関連付けて利用します。 報酬として配布するトランザクションアクションを各日程分定義します。 イベントの開始日時から24時間ごとに報酬が変化し、各報酬を1回受け取ることができます。 途中で取り逃がした報酬があった場合は、スキップされます。&#xA;ストリーミングモード ストリーミングモードはストリームに設定された報酬として配布するトランザクションアクションを先頭から順番に配布します。 受け取らなかった日があったとしても、スキップはされずストリームの次の報酬が手に入ります。&#xA;ストリーミングモードのログインボーナスに GS2-Schedule のイベントを関連づけると、イベントの開始日時から24時間ごとにストリームの次の報酬を受け取ることができます。 設定しない場合は、報酬の種類が変化する時間をUTCタイムゾーンの24時間単位で指定して利用します。&#xA;繰り返し ストリーミングモードのログインボーナスには繰り返し設定ができます。 繰り返し設定（repeat: enabled）を有効にすると、ストリームの終端に到達した場合 翌日はストリームの先頭から報酬の受け取りを再開できます。 この機能を利用することで、常設のログインボーナスを7日ごとや30日ごとにループさせることができます。&#xA;repeat: disabled を選択すると、ストリームの最後まで配布した後はそのボーナスからの報酬入手は停止します。期間限定キャンペーンなどに利用できます。&#xA;見逃し補償 スケジュールモードで取り逃がした場合や、ストリーミングモードでもイベント開催期間中ではストリームのすべてのアイテムを入手できないような状態に陥った時に使える機能が見逃し補償機能です。 設定されたコストを支払うことで、取り逃がしたアイテムを入手することができます。&#xA;見逃し補償が利用できるのは GS2-Schedule のイベントと関連づけられたログインボーナスのみで、イベントの開始日からの経過日数までの報酬のみが受け取れます。 つまり、未来のログインボーナスはコストを支払っても受け取ることはできません。&#xA;見逃し補償のコストとして、missedReceiveReliefConsumeActions に GS2-Money2 などの消費アクションを設定でき、ジェムを消費して見逃した日を取り戻すといった運用が可能です。 受け取りの前提条件として missedReceiveReliefVerifyActions に検証アクションを指定することもできます。</description>
    </item>
    <item>
      <title>GS2-Lottery</title>
      <link>/ja/microservices/lottery/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/lottery/</guid>
      <description>ガチャを実装するための仕組みです。 GS2-Lottery では、通常ガチャとボックスガチャに対応しています。&#xA;graph TD Trigger[&amp;#34;抽選トリガー&amp;lt;br/&amp;gt;(GS2-Showcase の購入報酬 / クエストクリア報酬 など)&amp;#34;] --&amp;gt; LotteryModel[&amp;#34;LotteryModel&amp;lt;br/&amp;gt;(抽選モデル)&amp;#34;] LotteryModel -- &amp;#34;mode = normal&amp;#34; --&amp;gt; Normal[&amp;#34;通常モード抽選&amp;#34;] LotteryModel -- &amp;#34;mode = box&amp;#34; --&amp;gt; Box[&amp;#34;ボックスモード抽選&amp;#34;] Normal --&amp;gt; PrizeTable[&amp;#34;景品テーブル&amp;lt;br/&amp;gt;(PrizeTable)&amp;#34;] Box --&amp;gt; BoxData[&amp;#34;プレイヤー専有ボックス&amp;#34;] PrizeTable --&amp;gt; Prize[&amp;#34;Prize&amp;lt;br/&amp;gt;(acquireActions)&amp;#34;] BoxData --&amp;gt; Prize Prize --&amp;gt; Acquire[&amp;#34;GS2-Distributor&amp;lt;br/&amp;gt;報酬配布&amp;#34;] 通常ガチャ 通常ガチャは指定された確率で純粋な抽選を行います。&#xA;景品テーブル 景品テーブルとは、ガチャを実行した時に出てくる景品の排出確率を定義したものです。 マスターデータとして定義することになります。&#xA;重み 景品テーブルでの確率の設定は、景品ごとの重みを設定します。 具体的には以下のようなテーブルを作成することになります。&#xA;重み 景品A 1 景品B 2 景品C 4 これを百分率による確率として解釈すると以下のように解釈できます。&#xA;重み 確率 景品A 1 14.285% 景品B 2 28.571% 景品C 4 57.143% 百分率ベースで確率を設定する必要がある場合、全てを足して100%になるよう考える必要がありますが 重みベースで確率を設定する場合は、そのような負担をする必要がなくなります。</description>
    </item>
    <item>
      <title>GS2-Matchmaking</title>
      <link>/ja/microservices/matchmaking/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/matchmaking/</guid>
      <description>プレイヤーを条件に基づいてグルーピングする機能です。 対戦相手を見つけるために利用することができます。&#xA;スクリプトトリガー ネームスペースに createGatheringTriggerScriptId ・ completeMatchmakingTriggerScriptId ・ changeRatingScript を設定すると、ギャザリング作成完了時・マッチング完了時・レーティング変動時にカスタムスクリプトを実行できます。&#xA;設定できる主なイベントトリガーとスクリプト設定名は以下の通りです。&#xA;createGatheringTriggerScriptId: ギャザリング作成完了時 completeMatchmakingTriggerScriptId: マッチング完了時 changeRatingScript: レーティング変動時 プッシュ通知 設定できる主なプッシュ通知と設定名は以下の通りです。&#xA;joinNotification: マッチング参加時に通知 leaveNotification: マッチング離脱時に通知 completeNotification: マッチング完了時に通知 changeRatingNotification: レーティング変動時に通知 いずれも GS2-Gateway 経由で通知でき、オフライン端末へのモバイルプッシュ転送も可能です。&#xA;マスターデータ運用 マスターデータを登録することでマイクロサービスで利用可能なデータや振る舞いを設定できます。&#xA;マスターデータの種類には以下があります。&#xA;RatingModel: レーティング計算設定 SeasonModel: シーズン期間設定 マスターデータの登録はマネージメントコンソールから登録する他、GitHubからデータを反映したり、GS2-Deployを使ってCIから登録するようなワークフローを組むことが可能です。&#xA;追加設定 enableDisconnectDetection を有効化するとマッチメイキング中の切断検知を行い、disconnectDetectionTimeoutSeconds でタイムアウトを調整できます。また enableCollaborateSeasonRating を設定するとマッチメイキング完了時に GS2-SeasonRating と連携し、結果を受け付けるセッションを生成できます。&#xA;トランザクションアクション GS2-Matchmaking では以下のトランザクションアクションを提供しています。&#xA;検証アクション: 永続ギャザリングへの参加状況の検証 「永続ギャザリングへの参加状況の検証」を検証アクションとして利用することで、特定のシーズンギャザリング（チームやクラスター）に所属しているプレイヤーのみが受け取れる報酬の設定などが可能になります。これにより、シーズンごとのグループ対抗イベントや、特定のコミュニティ限定のインセンティブ付与といった施策をトランザクション内で安全に制御できます。&#xA;ユースケース別設計ガイド パーティトークンを使ったマッチメイキング マッチメイキング完了後に1名が離脱し補充したい場合や、事前にパーティを編成してからマッチメイキングを行いたい場合は「パーティトークン」を使用します。&#xA;パーティメンバーはそれぞれプレイヤートークン（有効期限3分）を発行し、パーティの代表者に送信します。代表者はパーティトークン発行APIに送信することでパーティトークン（有効期限10分）を入手し、ギャザリング作成またはギャザリング検索を呼び出します。これにより、パーティメンバー全員が参加した状態のギャザリングを作成または参加できます。&#xA;パーティ同士のマッチメイキング たとえば4 vs 4 の対戦で事前に編成したパーティを分散させたくない場合、まず4人のマッチメイキングを実行してパーティ単位のギャザリングを作成し、その後各パーティの代表者が定員2人のマッチメイキングを行うことでパーティ同士のマッチメイキングを実現できます。&#xA;マッチメイキング中のプレイヤー間の通信 マッチメイキング完了前にプレイヤー間でのやりとりが必要な場合、ギャザリング作成時に以下の2つの方法を使用できます。&#xA;GS2-Chat と連携したチャットルーム作成: メタデータの低頻度（秒間3回以内）交換に適しています GS2-Realtime と連携したゲームサーバの起動: 高頻度の通信や、人数が不足した状態でゲームを遊ばせたい場合に適しています マッチメイキング完了後の処理 マッチメイキングが完了したときに以下の方法でプレイヤーに通知できます。</description>
    </item>
    <item>
      <title>GS2-MegaField</title>
      <link>/ja/microservices/mega_field/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/mega_field/</guid>
      <description>GS2-MegaField は、巨大な3D空間上に存在する大量のプレイヤーの位置情報を、効率的に共有・同期するための機能を提供します。&#xA;MMORPG やオープンワールド、メタバース型のサービスなど、同じワールドに大量のプレイヤーが同時にログインするタイトルでは、すべてのプレイヤーの位置情報を全プレイヤーに配信していると、ネットワーク帯域もCPUも破綻してしまいます。 GS2-MegaField は「自分の近傍にいるプレイヤーだけ」を効率的に取得できるようにすることで、この問題を解決します。&#xA;エリアとレイヤー GS2-MegaField の空間は「エリア (Area)」と「レイヤー (Layer)」の2つの概念で構成されます。&#xA;AreaModel (エリアモデル): 1つの大きな3D空間を表すマスターデータ。たとえば「街の中」「ダンジョン」「フィールド」など、ワールド内の論理的な区画ごとに作成します。 LayerModel (レイヤーモデル): 1つのエリアの中に存在する、用途別のレイヤー。たとえば「プレイヤー用」「NPC用」「アイテム用」のように、同じ場所を異なる目的で重ねて利用できます。 エリアモデルは複数のレイヤーモデルを内包する形でマスターデータとして定義します。 プレイヤーの位置は「どのエリアの、どのレイヤーに、どの座標に居るか」という形で表現されます。&#xA;graph TD AreaModel[&amp;#34;AreaModel: town&amp;#34;] --&amp;gt; LayerPlayer[&amp;#34;LayerModel: player&amp;#34;] AreaModel --&amp;gt; LayerNpc[&amp;#34;LayerModel: npc&amp;#34;] AreaModel --&amp;gt; LayerItem[&amp;#34;LayerModel: item&amp;#34;] Player1[&amp;#34;Player A&amp;#34;] -- Spot --&amp;gt; LayerPlayer Player2[&amp;#34;Player B&amp;#34;] -- Spot --&amp;gt; LayerPlayer 空間インデックス GS2-MegaField は、レイヤー内のプレイヤーの位置を空間インデックス (R-Tree ベースの構造) で管理します。 これによって「自分の周囲 N メートル以内に居るプレイヤーをすべて取得する」といった近傍探索を、プレイヤー数に依存せず効率的に処理できます。&#xA;レイヤー単位で空間インデックスは独立しており、「プレイヤー同士の近傍」と「NPC との近傍」のような検索を別々に取り扱えます。&#xA;プレイヤーの位置情報 各プレイヤーは「自分の現在位置」を MyPosition として GS2-MegaField に送信します。 MyPosition には以下の情報が含まれます。&#xA;position: 3D 座標 (x, y, z) vector: 向きベクトル (x, y, z) r: 視界・関心の半径 プレイヤーは位置を送信する際に、同時に「自分が興味のある範囲」を Scope として指定でき、その範囲に居る他のプレイヤーの情報を応答として受け取ることができます。 Scope には以下の情報が含まれます。</description>
    </item>
    <item>
      <title>GS2-Mission</title>
      <link>/ja/microservices/mission/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/mission/</guid>
      <description>ゲーム内の蓄積した行動に基づいて、プレイヤーに報酬を与えるための仕組みです。 一般的に 実績・トロフィー・ミッション と呼ばれる機能を実現するための機能です。&#xA;graph TD Action[&amp;#34;ゲーム内行動&amp;lt;br/&amp;gt;(クエストクリア / ガチャ実行 など)&amp;#34;] -- &amp;#34;カウンター上昇&amp;lt;br/&amp;gt;(IncreaseCounterByUserId)&amp;#34; --&amp;gt; Counter[&amp;#34;ミッションカウンター&amp;lt;br/&amp;gt;(Counter / Scope)&amp;#34;] Counter -- &amp;#34;目標値到達&amp;#34; --&amp;gt; Task[&amp;#34;ミッションタスク&amp;lt;br/&amp;gt;(MissionTaskModel)&amp;#34;] Task -- &amp;#34;ReceiveRewards&amp;#34; --&amp;gt; Reward[&amp;#34;completeAcquireActions&amp;#34;] Reward --&amp;gt; Distributor[&amp;#34;GS2-Distributor&amp;lt;br/&amp;gt;報酬配布&amp;#34;] Task --&amp;gt; Group[&amp;#34;ミッショングループ&amp;lt;br/&amp;gt;(MissionGroupModel)&amp;#34;] Group -- &amp;#34;resetType に基づき&amp;lt;br/&amp;gt;受取フラグをリセット&amp;#34; --&amp;gt; Task ミッションカウンター プレイヤーの行動に基づく回数を数えるためのエンティティです。 「クエストをクリアした回数」「キャラクターを強化した回数」「ガチャを引いた回数」といったゲーム内の行動回数をカウントするためのカウンターを用意します。&#xA;カウンターにはスコープを設定できます。 スコープには以下の値を設定可能です。&#xA;スコープの種類 スコープの内容 リセットしない ゲームプレイ開始からの総計 毎日X時にリセット 当日実行した回数 毎週X曜日X時にリセット 今週実行した回数 毎月X日X時にリセット 今月実行した回数 一定日数ごとにリセット 基準時刻から指定日数ごとにリセット 検証アクションにマッチした時だけカウントアップ verifyAction の実行結果に基づいてカウンターを上昇 カウンターの値は各スコープで管理され、ミッションの達成条件には各スコープの値を利用できます。&#xA;graph LR Up[&amp;#34;カウンター上昇要求&amp;#34;] --&amp;gt; Counter[&amp;#34;Counter&amp;#34;] Counter --&amp;gt; Scope1[&amp;#34;スコープ1&amp;lt;br/&amp;gt;リセットしない&amp;#34;] Counter --&amp;gt; Scope2[&amp;#34;スコープ2&amp;lt;br/&amp;gt;毎日リセット&amp;#34;] Counter --&amp;gt; Scope3[&amp;#34;スコープ3&amp;lt;br/&amp;gt;毎週リセット&amp;#34;] Scope1 -- ScopedValue --&amp;gt; Mission1[&amp;#34;累計100回ミッション&amp;#34;] Scope2 -- ScopedValue --&amp;gt; Mission2[&amp;#34;デイリー10回ミッション&amp;#34;] Scope3 -- ScopedValue --&amp;gt; Mission3[&amp;#34;ウィークリー50回ミッション&amp;#34;] 検証アクションによるスコープ制御 scopeType=verifyAction を利用すると、conditionName と condition により任意条件を定義し、 他のマイクロサービスの検証結果に応じてカウンターを上昇するかの制御ができます。 これにより、特定のイベント期間だけカウンターを上昇するスコープや、特定のキャラクターを編成している状態でのみ上昇するスコープを作ることができます。</description>
    </item>
    <item>
      <title>GS2-Money</title>
      <link>/ja/microservices/money/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/money/</guid>
      <description>Warning GS2-Money2 がリリースされました。&#xA;特別な理由がない限りは新しく利用する場合は GS2-Money2 を利用してください。&#xA;ゲーム内のリソースのうち、現金相当の価値を持つリソースを扱う機能です。 日本の資金決済法の前払い式支払い手段（自家型）に該当する資産を取り扱う場合は必ずこの機能を利用してください。&#xA;残高 GS2-Money はプレイヤーのもつ課金通貨の残高を単純な数量では管理せず、購入時の価値ごとに数量を管理します。&#xA;例えば、100円で100個の課金通貨を購入した場合は課金通貨1個の価値は1円相当となります。 同時に1000円で1200個の課金通貨を購入できるとしましょう。あくまで課金通貨の単価は1円とし、200個はおまけとして無料で処理するのも一つの手段ですし、1000円で購入した場合は単価を 0.8334円 として異なる単価で扱うのも一つの手段です。&#xA;後者のような方式を採用した場合、GS2-Money は「単価1円の課金通貨の残高」「単価0.8334円の課金通貨の残高」をそれぞれ分けて管理する機能を持っています。&#xA;graph TD Wallet[&amp;#34;ウォレット&amp;lt;br/&amp;gt;(スロット番号で区別)&amp;#34;] Wallet --&amp;gt; Paid[&amp;#34;有償通貨&amp;lt;br/&amp;gt;(paid)&amp;#34;] Wallet --&amp;gt; Free[&amp;#34;無償通貨&amp;lt;br/&amp;gt;(free)&amp;#34;] Paid --&amp;gt; Detail1[&amp;#34;単価1円の残高&amp;#34;] Paid --&amp;gt; Detail2[&amp;#34;単価0.8334円の残高&amp;#34;] Paid --&amp;gt; Detail3[&amp;#34;...購入価値ごと&amp;#34;] 後者を選択するメリットは？ 明らかに後者は会計処理が複雑になり、メリットがないように感じるかもしれません。 サービス提供側としては全くのその通りです。しかし、立場を変えてゲームプレイヤーの立場で考えてみましょう。&#xA;ゲームの中には運営によって配られた現金相当の価値が0円の課金通貨（通称 無償通貨）があります。 プレイヤーに課金通貨を購入してもらうために、有償で購入した課金通貨(通称 有償通貨)でしか購入できない魅力的な商品を課金通貨300個で販売したとしましょう。&#xA;1000円 で 1200個の課金通貨を購入した際に、1000個の有償通貨と200個の無償通貨 を付与するように処理した場合 プレイヤーは有償通貨300個で購入できる商品を3回しか購入できません。 一方で、単価を0.8334円として1200個全てを有償通貨として取り扱う方法であればプレイヤーは4回購入できます。 この差はプレイヤー心理に多少なりとも影響を与えます。&#xA;会計上の都合を優先するか、プレイヤーの利益を優先するか 慎重に検討するべき仕様でしょう。&#xA;スロット GS2-Money ではウォレットを複数持つことができます。 その複数のウォレットを区別するためのキーがスロットです。&#xA;この機能は他のプラットフォームで購入した課金通貨を持ち込ませないようにしているプラットフォーマーが存在するため、そのガイドラインを遵守するために存在する機能です。&#xA;しかし、これらのガイドラインは有償通貨にのみ適用されるため、無償通貨については全てのスロットで共有できる機能があります。 ネームスペースの shareFree を true に設定すると、無償通貨は全スロット共通の残高として扱われます。&#xA;消費優先度 プレイヤーが課金通貨を消費する時に、無償通貨を優先して消費するか、有償通貨を優先して消費するかを選択できます。 一般的に無償通貨を優先して消費する仕様が採用されますが、会計上の都合がある場合は有償通貨を優先できます。 有償通貨を消費する場合は、より単価の高い通貨から優先して消費されます。&#xA;ネームスペースの priority で以下のいずれかを指定します。</description>
    </item>
    <item>
      <title>GS2-Money2</title>
      <link>/ja/microservices/money2/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/money2/</guid>
      <description>Tip GS2-Money2 は名前の通りバージョン2に相当するマイクロサービスです。&#xA;以前のバージョンに関するドキュメントは GS2-Money を参照してください。&#xA;ゲーム内のリソースのうち、現金相当の価値を持つリソースを扱う機能です。 日本の資金決済法の前払い式支払い手段（自家型）に該当する資産を取り扱う場合は必ずこの機能を利用してください。&#xA;GS2-Money2 は単に「課金通貨の残高」を扱うサービスではなく、以下のような会計・法令対応上の要件をまとめて引き受けるマイクロサービスです。&#xA;入金日時・単価ごとの残高管理 レシート検証による不正入金の防止 ウォレットの加減算履歴の保持 プラットフォームのガイドラインに沿った通貨の隔離 サブスクリプション（期間課金）契約の状態管理 未使用残高の集計（前払式支払手段への対応） 残高 GS2-Money2 はプレイヤーのもつ課金通貨の残高を単純な数量では管理せず、購入時の価値ごとに数量を管理します。&#xA;例えば、100円で100個の課金通貨を購入した場合は課金通貨1個の価値は1円相当となります。 同時に1000円で1200個の課金通貨を購入できるとしましょう。あくまで課金通貨の単価は1円とし、200個はおまけとして無料で処理するのも一つの手段ですし、1000円で購入した場合は単価を 0.8334円 として異なる単価で扱うのも一つの手段です。&#xA;後者のような方式を採用した場合、GS2-Money2 は「単価1円の課金通貨の残高」「単価0.8334円の課金通貨の残高」をそれぞれ分けて管理する機能を持っています。&#xA;後者を選択するメリットは？ 明らかに後者は会計処理が複雑になり、メリットがないように感じるかもしれません。 サービス提供側としては全くのその通りです。しかし、立場を変えてゲームプレイヤーの立場で考えてみましょう。&#xA;ゲームの中には運営によって配られた現金相当の価値が0円の課金通貨（通称 無償通貨）があります。 プレイヤーに課金通貨を購入してもらうために、有償で購入した課金通貨(通称 有償通貨)でしか購入できない魅力的な商品を課金通貨300個で販売したとしましょう。&#xA;1000円 で 1200個の課金通貨を購入した際に、1000個の有償通貨と200個の無償通貨 を付与するように処理した場合 プレイヤーは有償通貨300個で購入できる商品を3回しか購入できません。 一方で、単価を0.8334円として1200個全てを有償通貨として取り扱う方法であればプレイヤーは4回購入できます。 この差はプレイヤー心理に多少なりとも影響を与えます。&#xA;会計上の都合を優先するか、プレイヤーの利益を優先するか 慎重に検討するべき仕様でしょう。&#xA;スロット GS2-Money ではウォレットを複数持つことができます。 その複数のウォレットを区別するためのキーがスロットです。&#xA;この機能は他のプラットフォームで購入した課金通貨を持ち込ませないようにしているプラットフォーマーが存在するため、そのガイドラインを遵守するために存在する機能です。&#xA;しかし、これらのガイドラインは有償通貨にのみ適用されるため、無償通貨については全てのスロットで共有できる機能があります。 ネームスペースの sharedFreeCurrency を有効にすると、無償通貨は全スロット共通として扱われ、有償通貨のみがスロットごとに隔離されます。&#xA;graph LR subgraph Wallets[Wallets] direction TB S0[&amp;#34;Slot 0 (iOS)&amp;lt;br/&amp;gt;有償残高: 1,000&amp;#34;] S1[&amp;#34;Slot 1 (Android)&amp;lt;br/&amp;gt;有償残高: 500&amp;#34;] S2[&amp;#34;Slot 2 (Steam)&amp;lt;br/&amp;gt;有償残高: 800&amp;#34;] end Shared[&amp;#34;無償残高: 200&amp;lt;br/&amp;gt;(sharedFreeCurrency=true)&amp;#34;] -.</description>
    </item>
    <item>
      <title>GS2-News</title>
      <link>/ja/microservices/news/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/news/</guid>
      <description>ゲーム内のお知らせをHTML形式で配信するための仕組みです。 配信するHTMLコンテンツは hugo(https://gohugo.io/) で生成する必要があります。&#xA;GS2-News は記事データをアップロードすると、GS2 側で hugo によるビルドを行い、静的な Web コンテンツとしてホスティングします。ゲームクライアントは配信された一時 URL に対してアクセスすることでお知らせを閲覧できます。&#xA;graph LR Author[&amp;#34;運営者&amp;#34;] -- &amp;#34;ZIP アップロード&amp;#34; --&amp;gt; GS2[&amp;#34;GS2-News&amp;#34;] GS2 -- &amp;#34;hugo build (公開/非公開の&amp;lt;br/&amp;gt;全パターンを事前生成)&amp;#34; --&amp;gt; CDN[&amp;#34;CDN (HTML / ZIP)&amp;#34;] Player[&amp;#34;プレイヤー&amp;#34;] -- &amp;#34;GetContentsUrl&amp;#34; --&amp;gt; GS2 GS2 -- &amp;#34;URL &amp;#43; Cookie&amp;lt;br/&amp;gt;(1時間有効)&amp;#34; --&amp;gt; Player Player -- &amp;#34;WebView or ZIP DL&amp;#34; --&amp;gt; CDN hugo hugo は静的 Webページを生成するためのジェネレーターです。&#xA;ページのレイアウトやデザインを決定するためのテンプレートと、マークダウン形式で記述した記事データをビルドすることでHTMLファイルを生成します。 hugo の利用方法については、hugoの公式サイト または 各種解説サイトをご確認ください。&#xA;GS2 では最小限の hugo テンプレートと記事データのサンプルを GitHub で公開しています。&#xA;https://github.com/gs2io/gs2-news-sample&#xA;イベントと連動する記事 GS2-News では、GS2-Schedule で管理するイベントと連動する記事データを管理できます。</description>
    </item>
    <item>
      <title>GS2-Quest</title>
      <link>/ja/microservices/quest/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/quest/</guid>
      <description>ゲームの進捗管理や、クエストの進捗管理を行います。&#xA;GS2-Quest はゲームのインゲーム（バトルやステージ）に挑戦するための「入口」と「出口」だけをサーバーで管理するマイクロサービスです。 インゲーム内部のロジックには関与せず、開始時のコスト消費・クリア時の報酬付与・前提条件の判定といった、サーバーで信頼すべき処理に責任を持ちます。&#xA;graph LR Start[&amp;#34;クエスト開始&amp;lt;br/&amp;gt;StartAsync&amp;#34;] --&amp;gt; Battle[&amp;#34;インゲームを実行&amp;lt;br/&amp;gt;(クライアント / 専用サーバー)&amp;#34;] Battle -- 成功 --&amp;gt; End1[&amp;#34;クエスト終了報告&amp;lt;br/&amp;gt;EndAsync(isComplete:true)&amp;#34;] Battle -- 失敗 --&amp;gt; End2[&amp;#34;クエスト終了報告&amp;lt;br/&amp;gt;EndAsync(isComplete:false)&amp;#34;] End1 --&amp;gt; Reward[&amp;#34;クリア報酬を付与&amp;#34;] End2 --&amp;gt; FailedReward[&amp;#34;失敗報酬を付与&amp;#34;] クエスト クエスト はインゲームの基本単位で、インゲームを開始する時に選択するエンティティです。 クエストには挑戦に必要なコストと、挑戦によって得られる報酬を設定でき、GS2-Quest はその開始・終了をAPIとして受け付けます。 つまり、GS2-Quest はインゲームの内容には関与しません。&#xA;クエストの挑戦コスト クエストを開始状態にするために必要なコストを設定します。 一般的には GS2-Stamina で管理するスタミナを消費したり、GS2-Inventory で管理するアイテムを消費するようなコストを設定します。&#xA;QuestModel の consumeActions に消費アクションを設定することで、Start 実行時にトランザクションとしてアトミックに処理されます。&#xA;クエストの検証条件 QuestModel の verifyActions に検証アクションを設定すると、クエスト開始時に追加の条件チェックを行えます。 たとえば「特定のアイテムを所持していること」「GS2-Dictionary に特定のエントリーが登録されていること」といった、消費せずに状態だけを確認する条件を表現できます。&#xA;クエストのクリア報酬 クエストに挑戦し、クリアした場合に得られる報酬を設定できます。 報酬には複数の種類（Contents）を用意することができます。各 Contents には抽選用の weight を設定でき、確率に応じてどの報酬パターンが適用されるかが決定されます。 この機能を利用すれば、一定の確率でレアモンスターが出現するバージョンのクエストが開始され、報酬が通常より豪華になるような設定が可能です。&#xA;初回クリア報酬 クエストを初めてクリアしたときにのみ、追加の報酬を得られるよう設定が可能です。 QuestModel の firstCompleteAcquireActions に入手アクションを設定します。&#xA;クリア報酬の減額 クエスト内で出現したモンスターを倒さなかった場合や、宝箱を見落とした場合にクエスト報酬を報酬から減額できます。&#xA;クエストの開始APIのレスポンスにはクエスト内で得られる報酬の最大値が応答され、クエストの完了APIにはそのうち実際に入手した数量をレポートします。 そのレポートの際に報酬を減らして報告することで減額が行われます。 報告の際に最大値を超える報酬をレポートしようとするとエラーが発生します。</description>
    </item>
    <item>
      <title>GS2-Ranking</title>
      <link>/ja/microservices/ranking/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/ranking/</guid>
      <description>Warning GS2-Ranking2 がリリースされました。&#xA;特別な理由がない限りは新しく利用する場合は GS2-Ranking2 を利用してください。&#xA;ゲームのスコアやクリアタイムを競うランキング機能を実現します。&#xA;ランキングには2種類存在し「参加者全員が同じボード上で競い合うもの」と「購読したプレイヤーのスコアと競い合うもの」があります。 前者はグローバルランキング、後者はスコープランキングと呼びます。&#xA;グローバルランキング グローバルランキングは全てのプレイヤーと競い合うためのランキング機能を提供します。&#xA;GS2-Ranking では、数億人以上のプレイヤーが参加するような大規模なランキングを実現できます。&#xA;その代わり、ランキングの集計はリアルタイムではなく、事前に設定した周期で集計処理が行われ その集計結果をベースに順位計算などを行います。&#xA;カテゴリ ランキングの種類を設定します。 順位づけをするにあたって、スコアが大きい方が優れているのか、小さい方が優れているのかを設定する必要があります。&#xA;集計間隔 ランキングの集計を行う間隔を設定します。最小15分、最大24時間の範囲で指定ができます。&#xA;集計間隔の設定で気をつけなければならないのは、ここで設定する間隔は前回の集計開始時刻からの間隔ではなく、前回の集計終了時刻からの間隔であることです。 集計処理に5分要する状況で、00:00 に初回の集計が動いた場合について考えてみます。&#xA;集計開始時刻 集計終了時刻 00:00 00:05 00:20 00:25 00:40 00:45 固定集計時刻 集計間隔を24時間に設定した際に、その集計される時刻を固定したいというニーズがあります。 このようなニーズに対応するために、指定時刻になったら集計周期になっていなくても集計を実行する機能を提供しています。&#xA;集計間隔に24時間、固定集計時刻に AM5時 を設定したとします。&#xA;集計開始時刻 集計終了時刻 2020-01-01 05:00 2020-01-01 05:05 2020-01-02 05:00 2020-01-02 05:05 ← 23時間55分しか経過していないが、固定集計時刻になったため集計する 2020-01-03 05:00 2020-01-03 05:05 ← 23時間55分しか経過していないが、固定集計時刻になったため集計する スコアの有効範囲 スコアとして登録を受け付ける値の範囲を設定できます。 これによって、明らかに不適切なスコアの登録があった時に登録処理を行わずに捨てることができます。&#xA;この場合、不正なスコアの境界を調べるのを困難にするため、クライアントにエラーは返りません。&#xA;スコアの登録可能期間 スコアの登録を受け付ける期間の設定として GS2-Schedule のイベントを関連づけることができます。 スコア受け付け期間外にスコアを送信してもスコアは捨てられます。&#xA;スコアの登録可能期間外は集計処理は行われないため、集計にまつわる費用は発生しませんが、 スケジュールの判定のために GS2-Schedule のAPIコールは発生します。 そのため、明らかに2度と参照しないランキングに関してはマスターデータから削除することを推奨します。</description>
    </item>
    <item>
      <title>GS2-Ranking2</title>
      <link>/ja/microservices/ranking2/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/ranking2/</guid>
      <description>Tip GS2-Ranking2 は名前の通りバージョン2に相当するマイクロサービスです。&#xA;以前のバージョンに関するドキュメントは GS2-Ranking を参照してください。&#xA;ゲームのスコアやクリアタイムを競うランキング機能を実現します。&#xA;GS2-Ranking2 は以下の3種類のモードを提供します。&#xA;グローバルランキング クラスターランキング 購読ランキング ゲームが必要とするランキング機能の多くはこのいずれかのモードで要件を満たせるはずです。&#xA;ランキングモード グローバルランキング グローバルランキングは全てのプレイヤーと競い合うためのランキング機能を提供します。 GS2-Ranking2 では上位1000位のプレイヤーのみランキングに参加可能で、1000位以下のプレイヤーのスコアは送信したとしてもランキングへは登録されません。&#xA;以前のバージョンである GS2-Ranking が1億を超えるプレイヤーの正確な順位を返す能力を有する形で提供していましたので、以前のバージョンと比較して大きく仕様が変化しています。 GS2-Ranking では、多くのスコアを扱える代わりに、15分〜24時間の範囲で指定した集計間隔で集計が行われるまでランキングへの登録が行われない仕様で、集計の度に参加人数に応じたコストが生じていました。&#xA;GS2-Ranking を利用した開発者からのフィードバックを受けて GS2-Ranking2 は再設計されました。 具体的に以下の点を重要なフィードバックと捉えて再設計しています。&#xA;多くのユースケースにおいて上位プレイヤーのみ表示できればよい 順位の変化を即座にランキングへと反映したい プレイヤーの増加によるランキング集計コストの増加は望ましくない 結果として、前述のように上位1000人のプレイヤーのみがランキングに参加でき、1001位以下のプレイヤーは「圏外」として処理する仕組みになりました。 その代わりスコアの登録直後にランキングに反映され、通常のAPIリクエストコスト以上の追加コストは発生しません。&#xA;クラスターランキング 概ねグローバルランキングと同じ仕様ですが、唯一異なるのはクラスターIDごとに異なるランキングが作成されることです。&#xA;クラスターIDに GS2-Guild のギルドIDを指定することで、ギルドメンバー同士で競うようなランキングを実現するために利用できます。&#xA;クラスター参加判定 クラスターランキングでは、クラスターの種類を定義しておくことでスコア登録時にクラスターに参加しているか確認してからスコア登録を実行できます。&#xA;たとえば、GS2-Guild のギルドをクラスターとしたランキングを実現する場合、ランキングモードの設定でクラスターの種類に「Gs2Guild::Guild」を指定することで スコア登録時にクラスターIDで指定されたギルドにスコアを登録しようとしているプレイヤーがメンバーとして登録されていることを確認した上でスコアを登録するようにできます。&#xA;購読ランキング GS2-Ranking のスコープランキングに類似する仕様のランキング機能です。 他プレイヤーを購読することで、自分のランキングボードに他プレイヤーの最新のスコアを含めることが可能となります。&#xA;フレンド内ランキングのようなプレイヤー間で非対称性が強いランキングを実現するために使用します。&#xA;購読ランキングにおける反映遅延 スコアの登録を実行すると、プレイヤーを購読しているプレイヤーのランキングに非同期でスコア登録が実行されます。 この処理は通常1秒以内に実行されますが、非同期処理のためスコアが反映されるまで若干の遅延が生じます。&#xA;シーズン 各ランキングにはスコアの登録を受け付ける期間として GS2-Schedule のイベントを関連づけることが可能です。 GS2-Schedule のイベントには繰り返し設定が可能で、各ランキングはイベントが繰り返す度にリセットされます。&#xA;この機能を実現するために、GS2-Ranking2 は各ランキングに シーズン というプロパティを持っています。 ランキングの結果はシーズンごとに格納され、過去のシーズンの結果をいつでも参照することができます。&#xA;ランキング報酬 グローバルランキング・クラスターランキングではランキングの順位報酬を設定できます。 報酬を設定するには 順位閾値 と 報酬の内容 を設定します。</description>
    </item>
    <item>
      <title>GS2-Realtime</title>
      <link>/ja/microservices/realtime/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/realtime/</guid>
      <description>ゲームプレイヤー同士での対戦機能を実現するために、低レイテンシーかつ高頻度で通信する場合に利用できる機能です。&#xA;GS2 では一般的にAPIリクエスト回数に対して料金が発生しますが、このサービスについてはゲームサーバーが起動すれば、 そのゲームサーバーの起動時間と、通信容量に対して費用が発生し、通信回数に対しては費用が発生しません。&#xA;graph TD Match[&amp;#34;GS2-Matchmaking で&amp;lt;br/&amp;gt;ロビーを成立&amp;#34;] --&amp;gt; Want[&amp;#34;RoomWant でルーム要求&amp;#34;] Want -- ホットスタンバイから割り当て --&amp;gt; Warm[&amp;#34;Warm Start (1〜3秒)&amp;#34;] Want -- 新規起動 --&amp;gt; Cold[&amp;#34;Cold Start (40〜60秒)&amp;#34;] Warm --&amp;gt; Connect[&amp;#34;プレイヤーが接続&amp;#34;] Cold --&amp;gt; Connect Connect --&amp;gt; Play[&amp;#34;パケットリレーで対戦中通信&amp;#34;] Play -- 1分間無通信または3時間経過 --&amp;gt; Shutdown[&amp;#34;ルーム終了&amp;#34;] サーバータイプ 現在、GS2-Realtime はパケットリレー機能のみを提供しています。 これはゲームサーバーにメッセージを送信すると、そのメッセージが他のプレイヤーにブロードキャストされる機能を基本として プレイヤーIDを指定して、指定したプレイヤーにメッセージを届ける機能のみを有します。&#xA;RPCやオブジェクト同期といった機能はSDKには含まれておらず、単純なバイナリデータの送受信のみを行えます。 ペイロードのバイナリエンコーディングはアプリケーション側の責務となるため、Protocol Buffers / FlatBuffers / MessagePack といった任意のエンコーディングを採用できます。&#xA;Unreal Engine Dedicated Server ホスティング 開発者が Unreal Engine でビルドした Dedicated Server をホスティングできるようにすることを検討しています。 この機能の提供時期については未定です。&#xA;有償サポート契約をしたうえで開発を勧められる、強いニーズがあればスケジュールを調整できますので、ご相談ください。&#xA;サーバースペック サーバーの性能を設定できます。性能によって1分あたりの利用料金に差が生じます。 最も安い realtime1.nano で 8人プレイヤーが1秒間に3回メッセージを送り合えることを確認しています。</description>
    </item>
    <item>
      <title>GS2-Schedule</title>
      <link>/ja/microservices/schedule/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/schedule/</guid>
      <description>ゲーム内のイベントなどのスケジュールを管理する機能を提供します。&#xA;GS2-Schedule は単体ではイベントの期間情報のみを管理する機能を持ち、報酬の付与や購入制限といった処理は他のマイクロサービスと組み合わせて実現します。 GS2-Showcase / GS2-Exchange / GS2-LoginReward / GS2-Mission など、ほぼ全てのゲーム要素マイクロサービスがイベント期間との連携を前提に設計されているため、期間限定の運用施策を行う際の中核となるマイクロサービスです。&#xA;イベントの開催期間 イベントの開催期間には2種類あります。 1つ目は、全てのプレイヤーが同じ期間を共有する「絶対期間」、2つ目は、プレイヤーごとに期間が異なる「相対期間」となります。&#xA;graph TD Event[&amp;#34;イベント&amp;#34;] Event --&amp;gt; Absolute[&amp;#34;絶対期間&amp;lt;br/&amp;gt;(scheduleType = absolute)&amp;#34;] Event --&amp;gt; Relative[&amp;#34;相対期間&amp;lt;br/&amp;gt;(scheduleType = relative)&amp;#34;] Absolute --&amp;gt; AbsoluteSample[&amp;#34;例: 1月1日〜1月3日の&amp;lt;br/&amp;gt;ニューイヤーイベント&amp;#34;] Relative --&amp;gt; RelativeSample[&amp;#34;例: 初プレイから7日間&amp;lt;br/&amp;gt;初回ボス撃破から24時間&amp;#34;] 絶対期間 「1月1日〜1月3日でニューイヤーイベントを開催する」といったケースで使用する期間タイプです。 全プレイヤーで同一の開催期間が共有されるため、absoluteBegin / absoluteEnd をマスターデータで指定します。&#xA;相対期間 「ゲーム開始から1週間」や「初めてボスを倒してから24時間」のように、プレイヤーによってイベントの期間が異なるケースで使用する期間タイプです。&#xA;相対期間を実現するための「トリガー」という仕組みがあります。 トリガーを実行したあと、指定された期間（ttl）がイベントの開催期間として扱われます。&#xA;Gs2Schedule:TriggerByUserId アクション&#xA;トリガーの引き方の種類 トリガーを引く時に、すでにトリガーが引かれている場合のイベント期間の指定方法には複数の方式があります。&#xA;トリガーを再起動する（renew） トリガーを延長する（extend） 何もしない（drop） イベントの繰り返し終了日時で有効期限を迎える（repeatCycleEnd） 次回の繰り返し開始日時で有効期限を迎える（repeatCycleNextStart） 絶対期間イベントの終了日時で有効期限を迎える（absoluteEnd） repeatCycleEnd / repeatCycleNextStart / absoluteEnd は、繰り返し設定や絶対期間を持つイベントに合わせて有効期限を自動調整する方式です。&#xA;2020年1月1日 00:00にトリガーを引き、7日間の相対期間イベントが開始された場合、2020年1月3日 00:00にトリガーを再度引いたときの各動作は以下のようになります。&#xA;方式 イベント終了日時 renew 2020年1月10日 00:00 トリガーの起動時点 2020年1月3日 00:00に7日間を追加 extend 2020年01月14日 00:00 すでに存在するトリガーの有効期限 2020年1月7日 00:00に7日間を追加 drop 2020年01月7日 00:00 すでに存在するトリガーをそのまま維持 繰り返し設定 絶対期間／相対期間ともに、RepeatSetting を組み合わせることで「特定の曜日や時間帯のみ有効」「数日のサイクルで有効・無効を切り替える」といった繰り返しスケジュールを表現できます。</description>
    </item>
    <item>
      <title>GS2-Script</title>
      <link>/ja/microservices/script/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/script/</guid>
      <description>GS2-Script は、GS2 の各マイクロサービスのイベントに応じてサーバーサイドでカスタムロジックを実行するための、Lua ベースのスクリプト実行環境です。&#xA;GS2 の各マイクロサービスには、特定の API 呼び出しの前後にスクリプトを実行する《スクリプトトリガー》という仕組みが用意されています。&#xA;これに GS2-Script で記述したスクリプトを紐付けることで、各サービスの標準機能では実現できないゲーム固有の検証ロジックやデータ加工処理、外部システム連携などをサーバー側で動かせます。&#xA;クライアント側のロジックは改ざんのリスクがあるため、不正防止や監査の観点で重要な処理はサーバー側で動かしたいケースが多くあります。&#xA;GS2-Script を使えば、GS2 のフルマネージド環境の中でそうしたサーバーロジックを記述・運用できます。&#xA;Lua スクリプト スクリプトの記述言語には Lua を採用しています。&#xA;Lua はゲーム業界での採用実績が豊富な軽量スクリプト言語であり、シンプルな文法と高速な実行性能を備えています。&#xA;スクリプトの登録は文字列を直接アップロードする方法と、GitHub リポジトリと連携してファイルを取得する方法の両方が利用できます。&#xA;GitHub 連携を利用することで、スクリプトの変更履歴を Git で管理し、Pull Request ベースでのレビュー・運用が可能になります。&#xA;スクリプトトリガー 各マイクロサービスのネームスペース設定で、特定の API 処理の前後に実行するスクリプトを指定できます。&#xA;スクリプトの実行タイミングは大きく2種類に分かれます。&#xA;graph LR Request[&amp;#34;API リクエスト&amp;#34;] --&amp;gt; Pre[&amp;#34;前処理スクリプト&amp;lt;br/&amp;gt;(同期実行)&amp;#34;] Pre --&amp;gt; Process[&amp;#34;GS2 標準処理&amp;#34;] Process --&amp;gt; Done[&amp;#34;完了通知スクリプト&amp;lt;br/&amp;gt;(非同期実行)&amp;#34;] Process --&amp;gt; Response[&amp;#34;API レスポンス&amp;#34;] 前処理スクリプト (同期実行) API 処理の実行直前に同期実行されるスクリプトです。&#xA;スクリプトの実行結果でリクエストパラメーターを変換したり、処理そのものを中断 (例外を発生) させたりできます。&#xA;レスポンスタイムには影響しますが、リクエストの内容をサーバー側で動的に判定・改変したい場合に有用です。&#xA;例: GS2-Account の createAccountScript の triggerScriptId を設定すると、アカウント作成 API の実行前にスクリプトが走り、特定の条件下では作成を拒否するといった制御ができます。&#xA;完了通知スクリプト (非同期実行) API 処理の完了後に非同期で実行されるスクリプトです。</description>
    </item>
    <item>
      <title>GS2-SeasonRating</title>
      <link>/ja/microservices/season_rating/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/season_rating/</guid>
      <description>プレイヤースキルでプレイヤーを分類し、より近い実力のプレイヤーとのマッチメイキングを実現するための機能です。 レーティング値によるマッチメイキング機能は GS2-Matchmaking に備わっていますが、近年増えている現実時間で数週間〜数ヶ月程度のシーズンを通してプレイヤーをランクづけする仕組みには対応していませんでした。&#xA;このマイクロサービスは、定めた期間をシーズンと捉え、シーズン期間に高いティアーを目指して対戦を繰り返すゲームサイクルを実現するために利用できます。 そのため、この機能で強さを表す指標はレート値ではなく、どのティアーに属しているかによって表現されます。&#xA;graph TD Match[&amp;#34;GS2-Matchmaking&amp;lt;br/&amp;gt;マッチメイキング成立&amp;#34;] --&amp;gt; Session[&amp;#34;MatchSession 作成&amp;#34;] Session --&amp;gt; Ballot[&amp;#34;各プレイヤーが投票用紙を取得&amp;lt;br/&amp;gt;(Ballot / SignedBallot)&amp;#34;] Ballot --&amp;gt; GamePlay[&amp;#34;ゲームプレイ&amp;#34;] GamePlay --&amp;gt; Vote[&amp;#34;Vote / VoteMultiple&amp;lt;br/&amp;gt;順位を投票&amp;#34;] Vote --&amp;gt; Aggregate{&amp;#34;多数決で結果確定&amp;#34;} Aggregate -- 確定 --&amp;gt; Calc[&amp;#34;ポイント変動量を計算&amp;lt;br/&amp;gt;(TierModel に基づく)&amp;#34;] Calc --&amp;gt; Experience[&amp;#34;GS2-Experience に&amp;lt;br/&amp;gt;ポイント / ランクを反映&amp;#34;] Aggregate -- 分断 --&amp;gt; Skip[&amp;#34;集計せず終了&amp;#34;] ティアー ティアーは一般的にブロンズから始まり、勝ち進めることでシルバー、ゴールド、プラチナ…のように上がっていく仕様が一般的です。 ティアーを上げるには、同一ティアー内のプレイヤーと対戦し、順位によって変動する入手ポイントが閾値を超えると次のティアーに上がれます。 勝負に負けるとポイントは減ることがあり、ポイントが閾値を下回ると前のティアーに下がることがあります。&#xA;ティアーモデルの設定項目 各ティアーは TierModel として定義し、以下のパラメータでポイントの増減や昇格時の挙動を制御できます。&#xA;項目 説明 metadata ティアー名などの自由記述（ブロンズ/シルバー/ゴールド 等） entryFee ゲーム参加時に消費するポイント。連戦連勝でなければ昇格できない難易度設計に利用 minimumChangePoint 最下位を取った時のポイント減算量 maximumChangePoint 最上位を取った時のポイント加算量 raiseRankBonus ランクアップした際に付与するボーナスポイント。直後に降格しないチャタリング防止に有効 ティアーをまたぐ対戦 レーティング戦において、マッチメイキングのルールは原則的に同一ティアーで構成するべきです。 しかし、プレイヤーが不足するなどの理由で前後のティアーのプレイヤーを含んだ状態でマッチメイキングをする場合も各プレイヤーが属しているティアーの最小・最大変動量と順位を元にポイントの変動量を決定します。 低いティアーのプレイヤーが高いティアーのプレイヤーに勝った場合にボーナスポイントを加算する仕組みやその逆のような仕組みはありません。 本来異なる強さのプレイヤー同士を対戦させて細工で工夫をするより、各ティアーに最低限ゲームプレイを成立させるだけのプレイヤーが滞留するようにティアーの閾値設計を行うことを推奨します。</description>
    </item>
    <item>
      <title>GS2-SerialKey</title>
      <link>/ja/microservices/serial_key/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/serial_key/</guid>
      <description>ゲーム外の物販やリアルイベント、SNSキャンペーン、コラボキャンペーンなどを通じてゲーム内アイテムを配布したい場合に使用できます。 紙のパッケージや QR コードに印字したコード、メール／SNS で配布する文字列のいずれも同じ仕組みで取り扱うことができます。&#xA;ただし、この機能は一部プラットフォーマーは実装を許していないため、採用にあたってはプラットフォーマーのガイドラインを確認するようにしてください。&#xA;シリアルコードの種類 シリアルコードは以下の2種類があります。&#xA;シリアルキー：1回使用すると再利用できないコード キャンペーンコード：1つのコードを複数人で共有できるコード graph TD SerialCode[&amp;#34;シリアルコード&amp;#34;] SerialCode --&amp;gt; SerialKey[&amp;#34;シリアルキー&amp;lt;br/&amp;gt;1人1回限定&amp;#34;] SerialCode --&amp;gt; CampaignCode[&amp;#34;キャンペーンコード&amp;lt;br/&amp;gt;複数人で共用&amp;#34;] SerialKey --&amp;gt; SerialKeyUse[&amp;#34;RPCLP-FP7N-NCDMJ-FLVA-IRI4&amp;#34;] CampaignCode --&amp;gt; CampaignCodeUse[&amp;#34;NEWYEAR2026&amp;#34;] シリアルキー 1回使用すると2度と使用できなくなるコード です。&#xA;シリアルキーは「RPCLP-FP7N-NCDMJ-FLVA-IRI4」のような形式で発行され、データ長を変更することはできません。 シリアルキー内にはキャンペーンの種類の情報も含まれており、シリアルキーを使用する際にはネームスペースを指定するだけで使用できます。&#xA;キャンペーンコード 「ハロウィン2025」「SUMMER」のように人間にとって覚えやすい文字列を、運営側が任意に設定できるコード です。 1つのコードを多数のプレイヤーが共有して引き換えに使用することを想定しています。&#xA;キャンペーンコードはキャンペーンに紐づけて発行する シリアルキー とは異なり、キャンペーンの名前自体がコードとして引き換え可能になります。&#xA;キャンペーン 「シリアルキー」も「キャンペーンコード」もキャンペーンに属します。&#xA;キャンペーンには以下を設定します。&#xA;name: キャンペーン名（キャンペーンコードとしても利用される） metadata: 任意のメタデータ enableCampaignCode: キャンペーンコード（キャンペーン名そのものを使った引き換え）を有効化するか キャンペーンは GS2-Schedule のイベントと関連づけることで有効期間を設定することが可能です。 有効期間の検証はトランザクションアクションを組み合わせて実現できます。&#xA;シリアルキーの発行 対象のキャンペーンと発行数量を指定してシリアルキーの発行処理を実行することで、シリアルキーが発行されます。 発行処理は非同期ジョブとして実行され、IssueJob を介して進捗を確認できます。 発行されたシリアルキーのリストはCSV形式でダウンロードが可能です。&#xA;物販パッケージに印字するなど、大量に発行する用途では数十万件単位での発行も可能です。&#xA;シリアルキーの状態 シリアルキーは以下の状態を持ちます。&#xA;状態 説明 ACTIVE プレイヤーが利用可能な状態 USED 既に使用済み（再利用不可） INACTIVE 運営によって無効化された状態 実際にプレイヤーが利用できる状態が ACTIVE で、使用すると USED になります。 運営サイドでシリアルキーを無効化すると INACTIVE になります。</description>
    </item>
    <item>
      <title>GS2-Showcase</title>
      <link>/ja/microservices/showcase/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/showcase/</guid>
      <description>ゲーム内で商品を販売する際に使用します。&#xA;GS2-Exchange との違いは陳列棚が存在することです。 陳列棚には DisplayItem を陳列することができ、DisplayItem を購入するために必要な対価と、商品を購入した際に得られる報酬を設定できます。&#xA;陳列棚には2種類存在し、固定の DisplayItem が陳列される《スタンダード陳列棚》と、一定間隔で陳列内容がランダムに抽選される《ランダム陳列棚》が存在します。&#xA;graph TD Master[&amp;#34;マスターデータ&amp;#34;] --&amp;gt; Showcase[&amp;#34;スタンダード陳列棚&amp;lt;br/&amp;gt;(ShowcaseModel)&amp;#34;] Master --&amp;gt; RandomShowcase[&amp;#34;ランダム陳列棚&amp;lt;br/&amp;gt;(RandomShowcaseModel)&amp;#34;] Showcase --&amp;gt; DisplayItem[&amp;#34;DisplayItem&amp;lt;br/&amp;gt;(SalesItem / SalesItemGroup)&amp;#34;] RandomShowcase --&amp;gt; RandomDisplayItem[&amp;#34;RandomDisplayItem&amp;lt;br/&amp;gt;(stock / weight)&amp;#34;] Player[&amp;#34;プレイヤー&amp;#34;] -- Buy --&amp;gt; DisplayItem Player -- RandomShowcaseBuy --&amp;gt; RandomDisplayItem DisplayItem -- &amp;#34;consumeActions / acquireActions&amp;#34; --&amp;gt; Transaction[&amp;#34;GS2-Distributor&amp;lt;br/&amp;gt;トランザクション実行&amp;#34;] RandomDisplayItem -- &amp;#34;consumeActions / acquireActions&amp;#34; --&amp;gt; Transaction スタンダード陳列棚 スタンダード陳列棚は指定した DisplayItem が全て陳列されます。 DisplayItem には2種類存在し《SalesItem》と《SalesItemGroup》が存在します。&#xA;SalesItem SalesItem には購入するするために必要な対価と、購入した際に得られる報酬を設定できます。&#xA;SalesItem は次の3種類のアクションで挙動を表現します。&#xA;項目 説明 verifyActions 購入条件の検証アクション。指定したマイクロサービスの状態を検証し、条件を満たさない場合は購入を拒否します。 consumeActions 購入時に消費するアクション。GS2-Money2 の通貨や GS2-Inventory のアイテムなどを対価として消費します。 acquireActions 購入時に入手するアクション。GS2-Inventory・GS2-Experience・GS2-Lottery など、任意のマイクロサービスへ報酬として配布します。 SalesItemGroup SalesItemGroup は購入回数に応じて販売する SalesItem が変化する仕組みを実現します。</description>
    </item>
    <item>
      <title>GS2-SkillTree</title>
      <link>/ja/microservices/skill_tree/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/skill_tree/</guid>
      <description>キャラクターなどの成長要素として一般的に使用されるスキルツリー機能を実現するためのマイクロサービスです。 スキルツリーとは、以下のような木構造を持ち、ノードを解放することでキャラクターのパラメーターを向上させることができる機能を指します。 ノードの解放にはコストが必要で、GS2-SkillTree では各マイクロサービスが提供する《消費アクション》を設定できます。&#xA;flowchart TD Base --&amp;gt; Node1[STR&amp;#43;5] Node1 --&amp;gt; Node2[DEF&amp;#43;5] Node2 --&amp;gt; Node3[SPD&amp;#43;5] Node3 --&amp;gt; Node4[STR&amp;#43;5] Node4 --&amp;gt; Node5[DEF&amp;#43;5] Node5 --&amp;gt; Node6[STR&amp;#43;5] Node6 --&amp;gt; Node7[DEF&amp;#43;5] Node3 --&amp;gt; Node10[SPD&amp;#43;5] Node10 --&amp;gt; Node11[DEF&amp;#43;5] Node11 --&amp;gt; Node12[SPD&amp;#43;5] Node12 --&amp;gt; Node13[DEF&amp;#43;5] Node11 --&amp;gt; Node30[SPD&amp;#43;5] Node30 --&amp;gt; Node31[STR&amp;#43;5] Node31 --&amp;gt; Node32[SPD&amp;#43;5] Node7 --&amp;gt; Node20[STR&amp;#43;5] Node13 --&amp;gt; Node20 Node20 --&amp;gt; Node21[STR&amp;#43;5] Node21 --&amp;gt; Node22[STR&amp;#43;5] ノード定義（NodeModel） スキルツリーを構成するノードはマスターデータ NodeModel として定義します。 各ノードは以下のフィールドで構成され、これによりノードの解放条件・コスト・効果・依存関係を表現します。&#xA;フィールド 役割 name ノードの識別子 metadata クライアントで表示する説明用テキスト releaseVerifyActions 解放に必要な検証アクション（特定ランクであることなど。最大10件） releaseConsumeActions 解放時に消費されるアクション（SP・アイテム・ゴールド等。1〜10件） restrainReturnRate 未解放化（リストレイン）時のコスト返還率（0.</description>
    </item>
    <item>
      <title>GS2-Stamina</title>
      <link>/ja/microservices/stamina/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/stamina/</guid>
      <description>スタミナはゲーム内の回数制限機能を実現するものです。 GS2-Limit は「1日に3回」のように回数制限を表現しますが、GS2-Stamina は「8時間で1ポイント回復するスタミナを使用して1日3回に回数制限を実現する」というように、時間経過と消費アクションの組み合わせで制限を表現します。&#xA;スタミナの場合、消費するポイントに差をつけることで、Aという行動であれば1日3回、Bという行動であれば1日5回のような仕様を実現できます。 これは、スタミナ1あたりで得られる経験値やゲーム内通貨の指針を設けることで、ゲーム内のどのような行動をとっても、効率のいい行動というものを排除することができ、ゲームバランスを調整しやすくなります。&#xA;毎日ログインしてもらうように開発者は努力をするべきなので、あまりこのような仕様にはしませんが、 プレイヤーにとっては8時間で1ポイント回復し、最大15ポイントまで蓄積できる仕様であれば、毎日ログインしなくても5日に1回のログインでもポイントを無駄にすることなく使い切ることができます。&#xA;スタミナ スタミナには「回復周期」「回復量」「最大値」を設定します。&#xA;graph LR Time[&amp;#34;時間経過&amp;#34;] -- &amp;#34;recoverIntervalMinutes ごとに&amp;#34; --&amp;gt; Recover[&amp;#34;回復&amp;lt;br/&amp;gt;(&amp;#43;recoverValue)&amp;#34;] Recover --&amp;gt; Value[&amp;#34;現在値&amp;#34;] Consume[&amp;#34;消費アクション&amp;#34;] -- &amp;#34;-consumeValue&amp;#34; --&amp;gt; Value Value -- &amp;#34;maxValue を超過&amp;#34; --&amp;gt; Overflow[&amp;#34;オーバーフロー状態&amp;#34;] パラメーター 説明 value 現在の保有スタミナ値 maxValue 自然回復で到達できる上限値 recoverIntervalMinutes 1ポイント回復するのに必要な分数 recoverValue 1回の回復で増加する値 overflowValue 最大値を超過している分の値 nextRecoverAt 次回回復の予定日時 オーバーフロー スタミナは最大値を超えて回復させることができます。 最大値を超えた状態では時間経過による回復は発生しません。 また、最大値を超えた状態でもUIの都合などで、それ以上は加算させない「本当の最大値」を設定できます。&#xA;なぜオーバーフローさせるのですか？ この仕様はあまりスタミナを仕様に組み込んだゲームをプレイする機会のなかった開発者には奇妙に感じるかもしれません。&#xA;スタミナは一般的に回復するためのアイテムや、ゲーム内課金によって回復する手段が存在します。 そのアイテムを使用したり、スタミナを購入する際にプレイヤーのストレスを最小化しようとこのような仕様が生まれました。&#xA;具体的な例を示しましょう。&#xA;このゲームは5分で1ポイントスタミナが回復し、あなたのスタミナの最大値は50ポイントです。 あなたが次にプレイしたいクエストをプレイするにはスタミナが10ポイント必要です。 しかし、現在のあなたのスタミナ値は9ポイントしかなく、5分待たなければ次のクエストをプレイできません。 そこで、あなたはスタミナを購入しようと思いました。スタミナを購入するとスタミナが50ポイント回復します。 しかし、今すぐにスタミナを購入すると、50ポイント回復しても9ポイントは無駄になってしまいます。 そのため、あなたは5分待って1ポイント回復した後でクエストをプレイし、0ポイントにした後で、その次のクエストを遊ぶためにスタミナを購入しました。 これではプレイヤーがゲームを快適にプレイすることはできません。 そこで、最大値を超えてスタミナを回復できる仕様を導入するゲームが生まれました。&#xA;スタミナに最大値を超える仕様を加え、ユーザー体験がどのように変化するか見てみましょう。&#xA;現在のあなたのスタミナ値は9ポイントしかなく、5分待たなければ次のクエストをプレイできません。 そこで、あなたはスタミナを購入し、スタミナを50ポイント回復し、59ポイントしました。 この状態では時間経過によるスタミナの回復は行われなくなりますが、 あなたはすぐに次のクエストを開始し、スタミナを49ポイントにしました。 GS2-Experience との連携 MaxStaminaTable / RecoverIntervalTable / RecoverValueTable をマスターデータに登録し、GS2-Experience のランク（プレイヤーレベル等）に応じて自動的に最大値・回復周期・回復量を変化させることができます。 プレイヤーレベルアップに合わせて自動的にスタミナの上限が増えるといった、よくある成長要素を簡単に表現できます。</description>
    </item>
    <item>
      <title>GS2-StateMachine</title>
      <link>/ja/microservices/state_machine/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/state_machine/</guid>
      <description>GS2-Quest はクエストの開始・終了を管理し、開始したクエストに応じて終了時に報酬を受け取れる仕組みを提供しました。 しかし、インゲームのランダム性が強く報酬を事前に特定することが困難なゲーム仕様は、GS2-Quest ではうまく扱えない課題がありました。&#xA;GS2-StateMachine はより細かい粒度でインゲームの状態管理をおこなうために開発されました。&#xA;ステートマシン インゲームの状態管理に使用するのはステートマシンです。&#xA;flowchart TD Start ----&amp;gt; MainStateMachine_Initialize MainStateMachine_Pass ----&amp;gt; Exit subgraph MainStateMachine MainStateMachine_Initialize[[Initialize]] --&amp;gt;|Pass| MainStateMachine_ChoiceSkill MainStateMachine_ChoiceSkill[/ChoiceSkill/] MainStateMachine_InGame([InGame]) --&amp;gt;|Pass| MainStateMachine_NextTurn MainStateMachine_InGame([InGame]) --&amp;gt;|Fail| MainStateMachine_Pass MainStateMachine_NextTurn[[NextTurn]] --&amp;gt;|Next| MainStateMachine_ChoiceSkill MainStateMachine_NextTurn[[NextTurn]] --&amp;gt;|Exit| MainStateMachine_Pass MainStateMachine_Pass[\Pass/] subgraph ChoiceSkill ChoiceSkill_Initialize[[Initialize]] --&amp;gt;|Pass| ChoiceSkill_LotterySkills ChoiceSkill_LotterySkills[[LotterySkills]] --&amp;gt;|Pass| ChoiceSkill_WaitChoiceSkill ChoiceSkill_WaitChoiceSkill([WaitChoiceSkill]) --&amp;gt;|ChoiceSkill| ChoiceSkill_ChoiceSkill ChoiceSkill_WaitChoiceSkill([WaitChoiceSkill]) --&amp;gt;|ReLotterySkill| ChoiceSkill_ReLotterySkill ChoiceSkill_ReLotterySkill[[ReLotterySkill]] --&amp;gt;|Pass| ChoiceSkill_LotterySkills ChoiceSkill_ReLotterySkill[[ReLotterySkill]] --&amp;gt;|AlreadyReLottery| ChoiceSkill_WaitChoiceSkill ChoiceSkill_ChoiceSkill[[ChoiceSkill]] --&amp;gt;|Pass| ChoiceSkill_Pass ChoiceSkill_ChoiceSkill[[ChoiceSkill]] --&amp;gt;|InvalidSkillIndex| ChoiceSkill_WaitChoiceSkill ChoiceSkill_Pass[\Pass/] end end MainStateMachine_ChoiceSkill --&amp;gt; ChoiceSkill_Initialize ChoiceSkill_Pass --&amp;gt;|Pass| MainStateMachine_InGame Player -----&amp;gt;|Interaction| MainStateMachine_InGame Player -----&amp;gt;|Interaction| ChoiceSkill_WaitChoiceSkill あなたがプログラマーならプランナーから上記のようなフローチャートを受け取ったことがあるはずです。 このような状態遷移を表現したものがステートマシンです。</description>
    </item>
    <item>
      <title>GS2-Version</title>
      <link>/ja/microservices/version/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/microservices/version/</guid>
      <description>アプリケーションのバージョンや、追加アセットのバージョン、利用規約に同意しているバージョンなどを判定する機能を提供します。&#xA;バージョンチェックを通過した際に、新しい一時的なGS2のクライアントID/シークレットを発行できます。&#xA;この機能を利用することで、アプリ内に組み込んだGS2のクライアントID/シークレットは、ログインを行いバージョンチェックを行うAPIしか呼び出す権限を持たず、バージョンチェックを通過した後で、実際にゲームをプレイするのに十分な権限のクライアントID/シークレットを受け取れるようにできます。&#xA;graph TD Boot[&amp;#34;アプリ起動&amp;#34;] --&amp;gt; Login[&amp;#34;GS2-Account でログイン&amp;#34;] Login -- &amp;#34;最小権限の&amp;lt;br/&amp;gt;クライアントID/シークレット&amp;#34; --&amp;gt; Check[&amp;#34;GS2-Version&amp;lt;br/&amp;gt;CheckVersion&amp;#34;] Check -- &amp;#34;OK&amp;#34; --&amp;gt; Token[&amp;#34;新しい ProjectToken を取得&amp;lt;br/&amp;gt;(本来の権限)&amp;#34;] Check -- &amp;#34;Warning&amp;#34; --&amp;gt; Notify[&amp;#34;プレイヤーに更新を促す&amp;#34;] Check -- &amp;#34;Error&amp;#34; --&amp;gt; Force[&amp;#34;強制バージョンアップ&amp;#34;] Notify --&amp;gt; Token Token --&amp;gt; Game[&amp;#34;ゲーム本編&amp;#34;] バージョンモデル ネームスペースには最大10個のバージョンモデルを宣言できます。バージョンチェックには複数の項目を設定でき、全てのバージョンチェックが通過した場合にのみ、チェックを通過できます。&#xA;バージョンモデルには2種類あり「アプリケーションが送信してきたバージョンを元にバージョン判定をする」「ログイン中のユーザーが過去に同意した規約のバージョンを元にバージョン判定をする」ことができます。&#xA;前者を「パッシブバージョンチェック」後者を「アクティブバージョンチェック」と呼びます。&#xA;マスター項目 説明 name バージョンモデル名（チェック時の識別子） scope passive（パッシブ） / active（アクティブ） type simple（単一のしきい値） / schedule（時刻でしきい値を切り替え） currentVersion アクティブバージョンチェックで、初回参加時に自動的に承認したことにするバージョン warningVersion 警告を出すバージョン閾値（このバージョン以下で warnings を返却） errorVersion エラーとするバージョン閾値（このバージョン以下で errors を返却） scheduleVersions type: schedule 時に時刻ごとのしきい値を定義 needSignature バージョン情報に署名を要求するか signatureKeyId 署名検証に使用する GS2-Key の鍵ID approveRequirement アクティブバージョンチェック時の承認要件（required / optional） バージョン番号のフォーマット {major}.</description>
    </item>
    <item>
      <title>GS2のアカウントを登録</title>
      <link>/ja/overview/workflow/setup_gs2/create_account/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/overview/workflow/setup_gs2/create_account/</guid>
      <description>Game Server Services の利用を開始するには、まずはアカウントの登録が必要です。&#xA;アカウントの登録は https://gs2.io のページ下部よりできます。&#xA;このフェーズで開発者が利用するアカウントの運用方針について検討する必要があります。&#xA;開発者がそれぞれ専用のアカウントを作成して開発 共有アカウントで開発 開発者がそれぞれ専用のアカウントを作成して開発 GS2 としてはこちらの方法を推奨しています。&#xA;開発者が専用のアカウントを作成し、専用の環境で開発を進めることで、他の開発者のGS2の設定変更の影響を受けることなくスムーズに開発を進めることができます。 GS2 では 開発者間で GS2のリソース設定を共有する方法を提供しており、この機能を活用することで専用の開発環境を最小の手間でメンテナンスすることができます。&#xA;Project &amp;#34;1&amp;#34; *-- &amp;#34;many&amp;#34; Developer Developer &amp;#34;1&amp;#34; -- &amp;#34;1&amp;#34; Gs2Account Gs2Account &amp;#34;1&amp;#34; *-- &amp;#34;many&amp;#34; Gs2Project Gs2Project &amp;#34;1&amp;#34; *-- &amp;#34;many&amp;#34; GS2Resources この方法を採用した時、コストも気になる点かもしれません。 GS2 では Pay-as-you-go スタイルの料金請求を行なっているため、アカウント数やプロジェクト数が増えたからといって追加の費用は発生しません。&#xA;その方法については後のステップで解説します。&#xA;共有アカウントで開発 プロジェクト用の GS2 アカウント、または開発用の GS2 アカウント を作成し、そのアカウント内に開発用のプロジェクトを作成します。&#xA;プロジェクトごとに、プロジェクトの管理機能にアクセス可能なサブアカウントを作成できるため、この仕組みを利用して1つのプロジェクトを複数人で管理できます。&#xA;Project &amp;#34;1&amp;#34; *-- &amp;#34;1&amp;#34; &amp;#34;Gs2Project(Dev Env)&amp;#34; &amp;#34;Gs2Project(Dev Env)&amp;#34; &amp;#34;1&amp;#34; *-- &amp;#34;many&amp;#34; User User &amp;#34;1&amp;#34; -- &amp;#34;1&amp;#34; LoginPassword User &amp;#34;1&amp;#34; -- &amp;#34;1&amp;#34; Developer </description>
    </item>
    <item>
      <title>GS2 States Language フォーマット</title>
      <link>/ja/api_reference/state_machine/format/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/api_reference/state_machine/format/</guid>
      <description>はじめに GS2 States Language(GSL) は独自の構造を持つステートマシン定義言語です。 ステートマシンは一般的に複数の状態を表す Task と、タスク間の遷移を表す Transition によって構成されます。 外部からのメッセージを送信すると、Transition によって定められたルールに基づいて、「実行中の Task」が遷移することで状態管理を行います。&#xA;ステートマシンは 「実行中の Task」以外に「状態変数」を持ちます。 Task にはいくつか種類がありますが、一般的には GS2-Script の実行によって処理を記述できます。 GS2-Script は「状態変数」を参照でき、またスクリプトの実行結果として、「状態変数」を書き換えることができます。&#xA;(C) Game Server Services Inc. and affiliates.&#xA;GSL の仕様の実装および派生仕様は無償で許可します。 ただし、上記コピーライトを派生物に含んでください。 本仕様の派生物をサブライセンスおよび販売を行うことはできません。&#xA;本仕様は「現状のまま」提供され、本仕様によって他社の著作権などを侵害していないことを保証するものではありません。 本使用によって生じるあらゆる請求、損害、その他責任についても Game Server Services, Inc. は責任を負わないものとします。&#xA;本仕様書に含まれるサンプルコードは特に指定がない限り Apache License, Version 2.0 の下でライセンスされます。&#xA;GSL の例 StateMachine MainStateMachine { Variables { int counter; } EntryPoint Task1; Task Task1(int initCounter) { Event StartLoop(); Event Error(string Reason); Payload { args.variables.counter = args.</description>
    </item>
    <item>
      <title>マネージメントコンソールを使用したセットアップ</title>
      <link>/ja/overview/workflow/setup_gs2_resources/manual_setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/overview/workflow/setup_gs2_resources/manual_setup/</guid>
      <description>開発者がまずマネージメントコンソールでやるべきことは、ネームスペースの作成とマスターデータの登録です。 これらはマネージメントコンソール上で作成が可能です。&#xA;リージョンの選択 サイドメニューの下方にリージョンメニューがあります。 ここからマイクロサービスを操作するリージョンを選択できます。&#xA;ネームスペースの作成 マネージメントコンソールにログインし、マイクロサービスを選択します。&#xA;ネームスペースの一覧が表示されたら、ネームスペースを新規作成します。&#xA;設定項目に値を入力し、確定すればネームスペースの作成は完了です。&#xA;マスターデータの登録 マイクロサービスによっては、機能を利用する前にマスターデータの登録が必要な場合があります。&#xA;マスターデータの登録が必要なマイクロサービスには、ネームスペースの詳細ページに「マスターデータ」というタブがあります。&#xA;タブを選択すると「Currently available master data could not be found」というようなエラーが表示され、まだマスターデータが登録されていないことがわかります。&#xA;マスターデータエディターの利用 マスターデータを作成するには マスターデータエディタ が利用できます。&#xA;ネームスペースの詳細ページに「マスターデータエディタ」というタブがありますので、それを選択します。&#xA;このスクリーンショットは GS2-Inventory の例です。 マスターデータの作成について説明するために、GS2-Inventory がどのようなマスターデータを必要とするのか説明しましょう。&#xA;class InventoryModel { &amp;#43;string 名前 &amp;#43;int 初期サイズ &amp;#43;int 最大サイズ } class ItemModel { &amp;#43;string 名前 &amp;#43;int スタック可能な最大数量 &amp;#43;bool スタック可能な最大数量を超えた時、複数枠にアイテムを保管することを許すか &amp;#43;int 表示順番 } Namespace &amp;#34;1&amp;#34; *-- &amp;#34;many&amp;#34; InventoryModel InventoryModel &amp;#34;1&amp;#34; *-- &amp;#34;many&amp;#34; ItemModel GS2-Inventory には容量制限のある Inventory と、Inventory に格納できる Item の定義が必要です。 Inventory には初期容量と最大容量。Item には1容量で最大いくつのアイテムをスタックできるか、アイテムの所持数量がスタックできる最大数に達した時、2スタック目を作成するかを設定します。</description>
    </item>
    <item>
      <title>設計</title>
      <link>/ja/overview/workflow/architect/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/overview/workflow/architect/</guid>
      <description>ゲームの仕様が決まってきたら、どのように実装するかを検討する必要があります。 GS2 ではゲームの様々な仕様を実現するために活用できるマイクロサービスを提供しています。&#xA;GS2 が提供するマイクロサービスの種類と、それぞれのマイクロサービスの役割については以下のドキュメントを参考にしてください。&#xA;マイクロサービスの紹介 Game Server Services では設計を手助けするための有償サポートを提供しています。&#xA;有償サポートを契約することで、ゲームの仕様を GS2 のスタッフが理解し、最適な GS2 のマイクロサービスの適用方法について一緒に検討します。&#xA;サポートメニュー </description>
    </item>
    <item>
      <title>GS2-Deploy を使用したセットアップ</title>
      <link>/ja/overview/workflow/setup_gs2_resources/automation_setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/overview/workflow/setup_gs2_resources/automation_setup/</guid>
      <description>マネージメントコンソールを使用したセットアップは手軽に実行できるのは魅力です。&#xA;しかし「同じ環境をもう一つ作って欲しい」というオーダーを受けた時にあなたは絶望するに違いありません。 ゲーム開発では一般的に「開発環境」「検証環境」「本番環境」のように複数のサーバー環境を必要とします。&#xA;それぞれで、マネージメントコンソール上で同じ操作を繰り返して GS2 への設定をミスをせず行うのは不可能と言えるでしょう。&#xA;GS2-Deploy そこで、GS2 には環境構築のためのマイクロサービスである GS2-Deploy が用意されています。&#xA;あなたがクラウドに精通したエンジニアであれば、AWS が提供している Cloud Formation の GS2版 と言うだけで、このマイクロサービスの役割を理解できます。 理解できたあなたはこれ以上このページを読み進める必要はありません。GS2 は Cloud Formation のような機能を使って、マイクロサービスをオーケストレーションできます。&#xA;そうではないあなたも安心してください。ここから GS2-Deploy について詳しく解説します。&#xA;Infrastructure as Code 管理画面を使用して GS2 への設定を反映することの愚かさについて、すでにあなたが理解している信じています。 このような愚かさに対抗するべく、サーバーインフラの世界では様々な改善が行われてきました。&#xA;そして、その成果が Infrastructure as Code(IaC) です。&#xA;20年前には、サーバーを新しくセットアップすることになったインフラエンジニアは1台1台にコマンドを入力して環境を構築していました。 「HTTPサーバーをインストール」「HTTPサーバーの設定ファイルを更新」「データベースサーバーをインストール」「データベースにスキーマを登録」 その作業は1台であれば問題ありませんが、100台のサーバーに設定するとなるとどうでしょうか？&#xA;1週間かけて100台のサーバーをセットアップしたが、そのうち数台は設定ミスがあって動かない なんてことが起こっていたわけです。&#xA;2006年に Amazon が現代のクラウドの基礎と言える Elastic Compute Cloud をローンチしました。 すると、これまで発注してからサーバーが手元に届くまで数ヶ月待つ必要がありましたが、発注してから5分後にはサーバーが手元にある状態になりました。 これはサーバーインフラの世界に激変をもたらしました。&#xA;これまでハードウェアのリードタイムが数ヶ月あるのだから、サーバーのセットアップをしてミスがあれば修正する作業を1週間かけてやっていても、非効率をごまかせていました。 しかし、5分でサーバーを調達した後1週間かけてサーバーをセットアップしているのは何かおかしい と気付いた人たちがいます。&#xA;そこで、サーバーのセットアップ手順を自動化し、セットアップにかける時間を短縮するモチベーションが高まりました。 その成果物として、出てきたのが サーバーのセットアップ手順をコード化する IaC です。 IaC によって、サーバーのセットアップ時間は高速かつ正確なものになりました。&#xA;IaC のアプローチ IaC には2つのアプローチが存在します。 1つ目は命令型、2つ目は宣言型です。&#xA;命令型は「apt install httpd」というようなセットアップ手順のコマンドを羅列させ、それを実行することで自動化しようという考えに基づいています。 これは人間が行なっていたセットアップ手順を自動化しようとした場合、素直なアイデアです。</description>
    </item>
    <item>
      <title>GS2にプロジェクトを作成</title>
      <link>/ja/overview/workflow/setup_gs2/create_project/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/overview/workflow/setup_gs2/create_project/</guid>
      <description>アカウントの作成が完了したら、プロジェクトを作成します。&#xA;プロジェクトには料金プランや、請求先を設定できます。 つまり、1つのアカウントでもプロジェクトごとに異なる請求先を設定できます。&#xA;これは、パブリッシャーにGS2の利用料金を負担してもらうデベロッパーにとっては有意義な構成のはずです。&#xA;プロジェクトの作成が完了したら、GS2の利用を開始するための準備は整いました。</description>
    </item>
    <item>
      <title>エラーハンドリングの実装パターン</title>
      <link>/ja/articles/tech/error/pattern/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/articles/tech/error/pattern/</guid>
      <description>GS2 を利用したネットワーク機能の実装において、エラーハンドリングはゲームの安定性とユーザー体験（UX）に直結します。 ここでは、単なる例外のキャッチに留まらない、実践的な実装パターンを紹介します。&#xA;1. エラーの分類と対応方針 GS2 の例外は、その性質によって大きく 3 つに分類できます。&#xA;分類 該当する例外 (例) 対応方針 一時的なエラー InternalServerError, ServiceUnavailable, RequestTimeout 自動リトライ。数回試行してもダメな場合はエラーダイアログを表示。 ロジック/設定エラー BadRequest, NotFound 開発中に解消すべきエラー。リリース後はバグとしてログ収集し、ユーザーには適切なメッセージを表示。 認証・状態エラー Unauthorized, Conflict, QuotaLimitExceeded 特別なリカバリ処理が必要。再ログインや、データの再同期（ドメインの再取得）を行う。 2. リトライ戦略の実装（指数バックオフ） サーバーの過負荷や一時的なネットワークの不安定さによるエラーに対しては、即座にリトライするのではなく、間隔を空けてリトライする「指数バックオフ（Exponential Backoff）」が推奨されます。&#xA;Unity / C# での例（自動リトライ） public async Task&amp;lt;T&amp;gt; ExecuteWithAutoRetry&amp;lt;T&amp;gt;(Func&amp;lt;Task&amp;lt;T&amp;gt;&amp;gt; action, int maxRetries = 3) { for (int i = 0; i &amp;lt; maxRetries; i&amp;#43;&amp;#43;) { try { return await action(); } catch (Gs2.Core.Exception.Gs2Exception e) when (e.RecommendAutoRetry) // 自動リトライ推奨か判定 { if (i == maxRetries - 1) throw; // 指数バックオフ: 1s, 2s, 4s.</description>
    </item>
    <item>
      <title>GS2-CDK を使用したセットアップ</title>
      <link>/ja/overview/workflow/setup_gs2_resources/cdk_setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/overview/workflow/setup_gs2_resources/cdk_setup/</guid>
      <description>GS2-Deploy は環境構築のために素晴らしい成果をあげています。 しかし、テンプレートの記述方法にはまだ課題がありました。それは、テンプレートファイルを記述するのに入力支援が得られないことです。&#xA;GS2-Deploy を設計するのに AWS の Cloud Formation を参考にしたのはすでに説明した通りですが、 2019年に AWS が発表したのが AWS CDK(Cloud Development Kit)です。&#xA;これは、従来のJSONやYAMLでのテンプレートファイルを記述するのに入力支援を得られない という問題の解決策として、各種プログラミング言語でテンプレートを記述できるようにしよう という成果です。&#xA;2019年のサービス開始から、GS2 はずっと JSON/YAML によるテンプレートのデプロイ機能を提供してきましたが、2022年11月に GS2 も CDK のサポートを開始しました。 CDK は現在 Go / Java / PHP / Python / TypeScript をサポートしています。&#xA;それぞれのプログラミング言語で、GS2-Inventory の GS2-Deploy 用のテンプレートを生成するコードを記述した例が以下です。&#xA;Language: Go Java PHP Python TypeScript stack := core.NewStack() inventory.NewNamespace( &amp;amp;stack, &#34;test&#34;, inventory.NamespaceOptions{ }, ).MasterData( []inventory.InventoryModel{ inventory.NewInventoryModel( &#34;inventory&#34;, 5, 10, []inventory.ItemModel{ inventory.NewItemModel( &#34;Potion&#34;, 99, true, 1, inventory.</description>
    </item>
    <item>
      <title>マスターデータの CI/CD</title>
      <link>/ja/articles/master_data/cicd/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/articles/master_data/cicd/</guid>
      <description>マスターデータの更新作業を自動化することで、人為的なミスを減らし、開発サイクルを高速化できます。&#xA;自動化のフロー 一般的な自動化のフローは以下の通りです。&#xA;データ作成: Excel や Google スプレッドシート、CSV 等でマスターデータを作成。 変換: スプレッドシートから GS2 のマスターデータ形式（JSON）へ変換。 コミット: 変換後の JSON または GS2-Deploy のテンプレートを Git リポジトリへコミット。 デプロイ: CI ツール（GitHub Actions, CircleCI 等）が変更を検知し、GS2 へ反映。 デプロイの自動化 GS2-Deploy を使用する場合 GS2-Deploy のテンプレートにマスターデータを埋め込んでいる場合、CI から GS2-Deploy のスタックを更新することで反映できます。&#xA;GitHub Actions の例:&#xA;jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: GS2 Deploy run: | # gs2-cli 等を使用してスタックを更新 gs2-cli deploy update-stack --stack-name master-data --template-file template.yaml マネージメントコンソールのエクスポート/インポートを使用する場合 各マイクロサービスの CurrentItemModelMaster を更新する API を呼び出すことで、JSON ファイルの内容を反映できます。</description>
    </item>
    <item>
      <title>GS2 States Language 定義拡張</title>
      <link>/ja/api_reference/state_machine/deploy/extention/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/ja/api_reference/state_machine/deploy/extention/</guid>
      <description>GSL は可読性・記述性に優れたステートマシン定義言語ですが、IDEの入力支援や学習コストの観点で優れているとは言い難い側面があります。 各種プログラミング言語を使用して GSL を定義する方法として、CDK を利用することができます。&#xA;CDK の詳細&#xA;ステートマシンの定義の開始 ステートマシンを定義を開始するには以下の構文を使用します。&#xA;Language: Java PHP Python TypeScript C# class TestStateMachine extends io.gs2.cdk.stateMachine.integration.StateMachineDefinition { public TestStateMachine() { // ここにステート定義を記述 } } class TestStateMachine extends \Gs2Cdk\StateMachine\Integration\StateMachineDefinition { public function __construct() { parent::__construct(); // ここにステート定義を記述 } } class TestStateMachine(gs2_cdk.state_machine.StateMachineDefinition): def __init__(self): # ここにステート定義を記述 class TestStateMachine extends StateMachineDefinition { constructor() { super(); // ここにステート定義を記述 } } public class TestStateMachine : Gs2Cdk.Gs2StateMachine.Integration.StateMachineDefinition { public TestStateMachine() { // ここにステート定義を記述 } } ステートマシンの定義 Language: Java PHP Python TypeScript C# stateMachine( &#34;</description>
    </item>
  </channel>
</rss>
